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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:792801 發(fā)表于 2025-3-23 12:32 | 只看該作者 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
是這樣的,我想將正點(diǎn)原子的例程中里面的串口實(shí)驗(yàn)改為空閑中斷,在例程代碼基礎(chǔ)上修改,串口中斷可以進(jìn)入但是不能進(jìn)入空閑中斷的判斷里面,哪位大神能幫忙看一下這個(gè)代碼是什么地方有問題導(dǎo)致進(jìn)入不了空閑中斷還是說這種辦法確實(shí)實(shí)現(xiàn)不了,感謝,代碼如下,其他的地方都沒有動,加入了__HAL_UART_ENABLE_IT(&g_uart1_handle, UART_IT_IDLE);以及在中斷接收回調(diào)函數(shù)里面加入一個(gè)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è)停止位 */
    g_uart1_handle.Init.Parity = UART_PARITY_NONE;                            /* 無奇偶校驗(yàn)位 */
    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ù)會開啟接收中斷:標(biāo)志位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)用
*              完成時(shí)鐘使能,引腳配置,中斷配置
* @retval      無
*/
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    GPIO_InitTypeDef gpio_init_struct;

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

        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ù)處理在這里進(jìn)行
* @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ù)

使用道具 舉報(bào)

沙發(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ù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人一级 | www.操.com | 国产精品乱码一区二区三区 | 久久爱综合 | 久久伊 | 欧美精品一区二区三区在线 | 精品国产一区二区国模嫣然 | 久草视频在线播放 | 国产精品久久九九 | 日韩av免费在线电影 | 在线小视频 | 一区二区三区免费 | 久久av资源网 | 国产精品高潮呻吟久久 | 中文在线一区二区 | 久久av一区二区三区 | 精品免费在线 | 成人免费视频网站在线观看 | 91久久北条麻妃一区二区三区 | 中文字幕精品一区 | 中文字幕一区二区三 | 日韩免费网站 | 亚洲一一在线 | 成人在线精品视频 | 色综合视频| 亚洲综合国产 | 波多野结衣在线观看一区二区三区 | 精品久久久久久久人人人人传媒 | 国产精品国产成人国产三级 | 亚洲精品一区在线观看 | 国产精品 欧美精品 | 午夜精品一区二区三区在线观看 | 狠狠做深爱婷婷综合一区 | 高清国产午夜精品久久久久久 | 人和拘一级毛片c | 欧美日韩在线免费 | 在线观看中文字幕视频 | 紧缚调教一区二区三区视频 | 国产蜜臀97一区二区三区 | 黄网免费看 | 麻豆久久久久久久久久 |