本帖最后由 纪国圣 于 2021-1-31 11:09 编辑
熟悉STM32的朋友应该都使用过DMA+USART1的IDLE实现不定长字符收发的功能。本人将此功能移植到AT32F407VG上。具体移植过程就不详细说明,和STM32开发流程一样。
注意配置DMA时USART->DT的地址和DMA通道。
编译下载,效果如下:
USART1_DMA_IDLE.zip
(3.76 MB)
有几点说明一下:
1.不要在中断内循环使用USART_SendData代替printf,不然单步调试可以发送完整的字符串,全速运行会出现字符严重丢失的情况。
2.上位机不能点击自动发送,否则下位机会进入HardFault_Handler中断。
3.和STM32一样,通过USART_ReceiveData(USART1);清除IDLE中断标志位,不然会一直进入中断。
4.由于发送给上位机的字符串多一个‘\0’,所以上位机会有收发字符数不一致的现象。
|