记录一次AT32串口DMA+空闲中断开发中的问题及解决方法——2021.06

项目开发中使用AT32F415的串口DMA+空闲中断接收不定长数据,由于AT32的库类似STM32的标准库,外设的使用上并没有STM32 HAL库那么方便直接一个函数搞定,收发处理需要自己写。网上有非常多的STM32标准库的串口DMA+空闲中断接收不定长数据代码,直接搬过来,但实际上碰到了一些问题,并不能直接用。

主要遇到的问题:

  1. 串口的帧错误标志位被置1
  2. 触发空闲中断后DMA只传了1个字符
  3. 串口助手返回的前几个字符不对
  4. 回环测试中收发字符数不相等

解决方法:

  1. 对于第一个问题,帧错误标志位被置1说明串口接收波形出错导致不能正确识别到停止位,检查出来的原因是接收引脚的GPIO模式被设成了上拉输入,改成浮空输入后,帧错误标志位正常。
  2. 第二个问题原本设置的波特率是921600,波特率降到115200后可以正常接收全部数据,最后查出来原因是系统时钟错了,外部晶振本来是8M的,后来换成了25M,但程序里还是按照8M设置的系统时钟,导致串口外设时钟和实际计算出的波特率也跟着错了。
  3. 第3、4个问题是串口助手有bug,换一个就好了。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值