打印
[STM32F4]

关于UART的DMA和IDLE中断接收不定长数据的应用

[复制链接]
1701|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shipeng1989|  楼主 | 2018-11-21 19:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天花了1天时间调试不定长数据接收功能期间参考了很多例程,但总是问题不断。费了九牛二虎之力最后总算是调通了。整个过程下来发现坑还是非常多的,在此分享下我的经验之谈:
1.打开IDLE中断后此中断并不会调用中断回调函数,因此中断处理函数绝对不能放在回调函数当中,必须直接放到stm32f4xx_it.c文件的void UART8_IRQHandler(void)函数中:
void UART8_IRQHandler(void)
{
  /* USER CODE BEGIN UART8_IRQn 0 */

  /* USER CODE END UART8_IRQn 0 */
  HAL_UART_IRQHandler(&huart8);
  /* USER CODE BEGIN UART8_IRQn 1 */
        if(__HAL_UART_GET_FLAG(&huart8,UART_FLAG_IDLE) != RESET)
        {
                if (rxd_uart8[0] == 0xCC && rxd_uart8[1]<18  && u8rxd_end == 0x33)
                {
                        if (u8rxd_end == 0x33 && CalcBlockCrc(rxd_uart8+1,rxd_uart8[1]-1) == u8rxd_crc8)
                        {
                                U8Analyze_Package();
                        }
                }
                __HAL_UART_CLEAR_IDLEFLAG(&huart8);
                HAL_UART_AbortReceive(&huart8);
                HAL_UART_Receive_DMA(&huart8,rxd_uart8,19);
        }
  /* USER CODE END UART8_IRQn 1 */
}
沙发
幸福小强| | 2018-11-21 22:35 | 只看该作者
如果把回调函数添加到中断处理函数内,会不会就可以用回调了?

使用特权

评论回复
板凳
观海| | 2018-11-27 12:51 | 只看该作者
感觉二楼的想法是正确的

使用特权

评论回复
地板
小灵通2018| | 2018-11-27 14:57 | 只看该作者
用中断接收不行吗

使用特权

评论回复
5
wowu| | 2018-12-3 14:43 | 只看该作者
太感谢分享了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

134

帖子

1

粉丝