久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 272|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

串口1源碼例程改為空閑中斷求助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:792801 發(fā)表于 2025-3-23 12:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
是這樣的,我想將正點原子的例程中里面的串口實驗改為空閑中斷,在例程代碼基礎(chǔ)上修改,串口中斷可以進入但是不能進入空閑中斷的判斷里面,哪位大神能幫忙看一下這個代碼是什么地方有問題導(dǎo)致進入不了空閑中斷還是說這種辦法確實實現(xiàn)不了,感謝,代碼如下,其他的地方都沒有動,加入了__HAL_UART_ENABLE_IT(&g_uart1_handle, UART_IT_IDLE);以及在中斷接收回調(diào)函數(shù)里面加入一個if判斷語句
void usart_init(uint32_t baudrate)
{
    /*UART 初始化設(shè)置*/
    g_uart1_handle.Instance = USART_UX;                                       /* USART_UX */
    g_uart1_handle.Init.BaudRate = baudrate;                                  /* 波特率 */
    g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B;                      /* 字長為8位數(shù)據(jù)格式 */
    g_uart1_handle.Init.StopBits = UART_STOPBITS_1;                           /* 一個停止位 */
    g_uart1_handle.Init.Parity = UART_PARITY_NONE;                            /* 無奇偶校驗位 */
    g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;                      /* 無硬件流控 */
    g_uart1_handle.Init.Mode = UART_MODE_TX_RX;                               /* 收發(fā)模式 */
    HAL_UART_Init(&g_uart1_handle);                                           /* HAL_UART_Init()會使能UART1 */

    /* 該函數(shù)會開啟接收中斷:標志位UART_IT_RXNE,并且設(shè)置接收緩沖以及接收緩沖接收最大數(shù)據(jù)量 */
    HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
        __HAL_UART_ENABLE_IT(&g_uart1_handle, UART_IT_IDLE);
}

/**
* @brief       UART底層初始化函數(shù)
* @param       huart: UART句柄類型指針
* @note        此函數(shù)會被HAL_UART_Init()調(diào)用
*              完成時鐘使能,引腳配置,中斷配置
* @retval      無
*/
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    GPIO_InitTypeDef gpio_init_struct;

    if (huart->Instance == USART_UX)                            /* 如果是串口1,進行串口1 MSP初始化 */
    {
        USART_TX_GPIO_CLK_ENABLE();                             /* 使能串口TX腳時鐘 */
        USART_RX_GPIO_CLK_ENABLE();                             /* 使能串口RX腳時鐘 */
        USART_UX_CLK_ENABLE();                                  /* 使能串口時鐘 */

        gpio_init_struct.Pin = USART_TX_GPIO_PIN;               /* 串口發(fā)送引腳號 */
        gpio_init_struct.Mode = GPIO_MODE_AF_PP;                /* 復(fù)用推挽輸出 */
        gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */
        gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* IO速度設(shè)置為高速 */
        HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct);

        gpio_init_struct.Pin = USART_RX_GPIO_PIN;               /* 串口RX腳 模式設(shè)置 */
        gpio_init_struct.Mode = GPIO_MODE_AF_INPUT;   
        HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct);   /* 串口RX腳 必須設(shè)置成輸入模式 */

#if USART_EN_RX
        HAL_NVIC_EnableIRQ(USART_UX_IRQn);                      /* 使能USART1中斷通道 */
        HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3);              /* 組2,最低優(yōu)先級:搶占優(yōu)先級3,子優(yōu)先級3 */
#endif
    }
}

/**
* @brief       串口數(shù)據(jù)接收回調(diào)函數(shù)
                數(shù)據(jù)處理在這里進行
* @param       huart:串口句柄
* @retval      無
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        static uint16_t len = 0;
    if (huart->Instance == USART_UX)                    /* 如果是串口1 */
    {
                if (len < USART_REC_LEN)
                {
                        g_usart_rx_buf[len] = g_rx_buffer[0];
                        len++;
                }
                else
                        len = 0;
                if (__HAL_UART_GET_FLAG(&g_uart1_handle, UART_FLAG_IDLE) != RESET)
                {
                        __HAL_UART_CLEAR_FLAG(&g_uart1_handle, UART_FLAG_IDLE);
                        g_usart_rx_sta = len;
                        len = 0;
                        printf("OK");
                }
        HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
    }
        if (__HAL_UART_GET_FLAG(&g_uart1_handle, UART_FLAG_IDLE) != RESET)
                {
                        __HAL_UART_CLEAR_FLAG(&g_uart1_handle, UART_FLAG_IDLE);
                        g_usart_rx_sta = len;
                        len = 0;
                        printf("OK");
                }
}

/**
* @brief       串口1中斷服務(wù)函數(shù)
* @param       無
* @retval      無
*/
void USART_UX_IRQHandler(void)
{
#if SYS_SUPPORT_OS                          /* 使用OS */
    OSIntEnter();   
#endif

    HAL_UART_IRQHandler(&g_uart1_handle);   /* 調(diào)用HAL庫中斷處理公用函數(shù) */

#if SYS_SUPPORT_OS                          /* 使用OS */
    OSIntExit();
#endif

}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:554658 發(fā)表于 2025-3-31 17:51 | 只看該作者
不應(yīng)該在串口數(shù)據(jù)接收中斷處理函數(shù)HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)中判斷空閑中斷,應(yīng)該在USART_UX_IRQHandler(void)函數(shù)中判斷
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产最新视频在线 | 天天看片天天干 | 日韩一二区 | 色视频网站免费 | 久久性色 | 成人乱人乱一区二区三区软件 | 久久亚洲欧美日韩精品专区 | 免费观看色 | 午夜免费福利片 | 日日爱av| 日本在线网站 | 国产一区二区精品在线观看 | 国产精品久久久久久久久久免费看 | 欧美亚洲第一区 | 日韩成人精品一区 | 久久国产欧美日韩精品 | 日本精品久久 | 国产一区在线免费观看视频 | 成人综合视频在线 | 精久久久 | 91看国产| 欧美一区成人 | 91在线看 | 超碰在线97国产 | 日韩激情免费 | 古典武侠第一页久久777 | 欧美成人激情 | 精品日韩一区 | 99福利视频 | 国产成人高清在线观看 | 综合网在线 | 国产精品国产a级 | 中文字幕 在线观看 | 日韩av啪啪网站大全免费观看 | 日韩在线免费视频 | 国产在线精品一区二区 | 日本电影韩国电影免费观看 | 久久久一区二区 | 亚洲综合区| 亚洲一区中文字幕 | 在线观看国产三级 |