[其他] STM32F103C8T6串口DMA不能清除空闲中断问题

[复制链接]
 楼主| 过期的塔头 发表于 2022-1-26 23:12 | 显示全部楼层 |阅读模式
AD, DM
今天经过一下午的折腾,找到了两处bug。

1.第一点错误:USART1_Init()与DMA_config();的顺序有误,其实就是USART_Cmd(USART1, ENABLE)与 USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE)顺序弄错了。正确的是先USART_Cmd(),后USART_DMACmd()。
2.第二点错误:STM32F103C8T6清除空闲中断的方式有所不同,具体得参考其数据手册。

 楼主| 过期的塔头 发表于 2022-1-26 23:13 | 显示全部楼层
  1. if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
  2.     {
  3.                         USART_ClearFlag(USART1,USART_IT_IDLE);
  4.                         //Usart_SR=USART1->SR;
  5.                         //Usart_DR=USART1->DR;                          
  6.     }
 楼主| 过期的塔头 发表于 2022-1-26 23:14 | 显示全部楼层
这样是无法清除空闲中断的。
根据其数据手册:
7082461f16517c27c9.png
 楼主| 过期的塔头 发表于 2022-1-26 23:14 | 显示全部楼层
故应当先读取寄存器SR与DR的值。

  1. if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
  2.     {
  3.                         //USART_ClearFlag(USART1,USART_IT_IDLE);
  4.                         Usart_SR=USART1->SR;
  5.                         Usart_DR=USART1->DR;                          
  6.     }
 楼主| 过期的塔头 发表于 2022-1-26 23:15 | 显示全部楼层
这样就可以成功清除了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

999

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部