[活动专区] 【AT-START-F407测评】+ DMA+USART1的IDLE实现不定长字符收发

[复制链接]
 楼主| 纪国圣 发表于 2021-1-31 11:07 | 显示全部楼层 |阅读模式
本帖最后由 纪国圣 于 2021-1-31 11:09 编辑

熟悉STM32的朋友应该都使用过DMA+USART1的IDLE实现不定长字符收发的功能。本人将此功能移植到AT32F407VG上。具体移植过程就不详细说明,和STM32开发流程一样。
1.PNG
2.PNG
3.PNG
注意配置DMA时USART->DT的地址和DMA通道。
4.PNG
5.PNG
6.PNG
编译下载,效果如下:
演示.gif
USART1_DMA_IDLE.zip (3.76 MB, 下载次数: 105)
有几点说明一下:
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兼容吗   

评论

是的,该代码在ST103上一样可以运行。  发表于 2021-3-1 11:42
pixhw 发表于 2021-2-4 10:57 | 显示全部楼层
只要重新配置一下长度,然后再次enable就可以了吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

407

帖子

5

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