纪国圣 发表于 2021-1-31 11:07

【AT-START-F407测评】+ DMA+USART1的IDLE实现不定长字符收发

本帖最后由 纪国圣 于 2021-1-31 11:09 编辑

熟悉STM32的朋友应该都使用过DMA+USART1的IDLE实现不定长字符收发的功能。本人将此功能移植到AT32F407VG上。具体移植过程就不详细说明,和STM32开发流程一样。



注意配置DMA时USART->DT的地址和DMA通道。



编译下载,效果如下:


有几点说明一下:
1.不要在中断内循环使用USART_SendData代替printf,不然单步调试可以发送完整的字符串,全速运行会出现字符严重丢失的情况。
2.上位机不能点击自动发送,否则下位机会进入HardFault_Handler中断。
3.和STM32一样,通过USART_ReceiveData(USART1);清除IDLE中断标志位,不然会一直进入中断。
4.由于发送给上位机的字符串多一个‘\0’,所以上位机会有收发字符数不一致的现象。

chenzuyan0359 发表于 2021-2-3 18:35

感谢楼主,运行了楼主的代码,发现一个奇怪现象。   当串口接收到的数据时0x00的时候,即使后面仍然有数据没有发送完成,程序也会立刻进入空闲中断。导致的结果就是从0x00开始到后面的数据都接收不到。其他的数据包括0xFF都不会碰到这样的情况,唯独0x00这样子。          这个问题是什么原因啊???帮忙分析一下。

kkzz 发表于 2021-2-4 10:53

谢谢楼主分享的资料了。   

hudi008 发表于 2021-2-4 10:53

DMA配置也简单。   

lzmm 发表于 2021-2-4 10:53

楼主测试的效果怎么样

minzisc 发表于 2021-2-4 10:54

应该开发一个配置工具了   

mmbs 发表于 2021-2-4 10:54

DMA+USART1的IDLE      

fentianyou 发表于 2021-2-4 10:54

不定长字符?

xiaoyaodz 发表于 2021-2-4 10:55

配置DMA操作步骤   

febgxu 发表于 2021-2-4 10:55

设置成循环的了吧   

sdlls 发表于 2021-2-4 10:56

用DMA方式从内存向串口1数据寄存器传送数据

pixhw 发表于 2021-2-4 10:56

usart用dma发送的条件是什么

mmbs 发表于 2021-2-4 10:57

AT-START-F407免费领取的吗   

lzmm 发表于 2021-2-4 10:57

主频可以到多少呢?   

fentianyou 发表于 2021-2-4 10:57

这个有结束位吗?   

minzisc 发表于 2021-2-4 10:57

代码编写也简单多了。   

febgxu 发表于 2021-2-4 10:57

spi1的dma可以和usart3的dma一起用么

xiaoyaodz 发表于 2021-2-4 10:57

对应的通道:DMA2-Channel4-Stream7?

hudi008 发表于 2021-2-4 10:57

代码跟stm32兼容吗   

pixhw 发表于 2021-2-4 10:57

只要重新配置一下长度,然后再次enable就可以了吧。
页: [1] 2
查看完整版本: 【AT-START-F407测评】+ DMA+USART1的IDLE实现不定长字符收发