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

標題: 串口1源碼例程改為空閑中斷求助 [打印本頁]

作者: 南湖悲    時間: 2025-3-23 12:32
標題: 串口1源碼例程改為空閑中斷求助
是這樣的,我想將正點原子的例程中里面的串口實驗改為空閑中斷,在例程代碼基礎上修改,串口中斷可以進入但是不能進入空閑中斷的判斷里面,哪位大神能幫忙看一下這個代碼是什么地方有問題導致進入不了空閑中斷還是說這種辦法確實實現不了,感謝,代碼如下,其他的地方都沒有動,加入了__HAL_UART_ENABLE_IT(&g_uart1_handle, UART_IT_IDLE);以及在中斷接收回調函數里面加入一個if判斷語句
void usart_init(uint32_t baudrate)
{
    /*UART 初始化設置*/
    g_uart1_handle.Instance = USART_UX;                                       /* USART_UX */
    g_uart1_handle.Init.BaudRate = baudrate;                                  /* 波特率 */
    g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B;                      /* 字長為8位數據格式 */
    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;                               /* 收發模式 */
    HAL_UART_Init(&g_uart1_handle);                                           /* HAL_UART_Init()會使能UART1 */

    /* 該函數會開啟接收中斷:標志位UART_IT_RXNE,并且設置接收緩沖以及接收緩沖接收最大數據量 */
    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底層初始化函數
* @param       huart: UART句柄類型指針
* @note        此函數會被HAL_UART_Init()調用
*              完成時鐘使能,引腳配置,中斷配置
* @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;               /* 串口發送引腳號 */
        gpio_init_struct.Mode = GPIO_MODE_AF_PP;                /* 復用推挽輸出 */
        gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */
        gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* IO速度設置為高速 */
        HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct);

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

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

/**
* @brief       串口數據接收回調函數
                數據處理在這里進行
* @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中斷服務函數
* @param       無
* @retval      無
*/
void USART_UX_IRQHandler(void)
{
#if SYS_SUPPORT_OS                          /* 使用OS */
    OSIntEnter();   
#endif

    HAL_UART_IRQHandler(&g_uart1_handle);   /* 調用HAL庫中斷處理公用函數 */

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

}
作者: feihangdan    時間: 2025-3-31 17:51
不應該在串口數據接收中斷處理函數HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)中判斷空閑中斷,應該在USART_UX_IRQHandler(void)函數中判斷




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美日韩一区在线观看 | 天天看天天爽 | 国产传媒在线播放 | 欧美一区二区三区国产精品 | 天天操天天干天天爽 | 男人天堂手机在线视频 | 日本成人中文字幕在线观看 | 欧美日韩高清在线一区 | 久久精品二区亚洲w码 | 久久久久久久久淑女av国产精品 | 免费在线成人 | 国产成人精品久久二区二区91 | 亚洲成人高清 | 91久久久久久久久 | 国产精品久久久久久福利一牛影视 | 看av网| 久久久久久久久久久久久9999 | 欧美一区在线看 | 亚洲精品日韩视频 | 久久久久久免费毛片精品 | 99欧美精品 | 国产精品久久久久久久一区二区 | 精品国产一区二区三区在线观看 | 九九激情视频 | 五月天国产视频 | 一区二区三区亚洲视频 | 99久久久国产精品免费消防器 | 亚洲国产精品第一区二区 | 欧美日韩成人网 | 成人性生交大片 | 日韩在线一区二区三区 | 免费久久精品 | 91麻豆精品国产91久久久久久 | 午夜精品久久 | 亚洲精品一 | 瑟瑟免费视频 | 91精品国产91久久久久久最新 | 亚洲综合色网 | 亚洲综合一区二区三区 | 一级午夜aaa免费看三区 | 国产欧美在线一区 |