【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’,所以上位机会有收发字符数不一致的现象。
感谢楼主,运行了楼主的代码,发现一个奇怪现象。 当串口接收到的数据时0x00的时候,即使后面仍然有数据没有发送完成,程序也会立刻进入空闲中断。导致的结果就是从0x00开始到后面的数据都接收不到。其他的数据包括0xFF都不会碰到这样的情况,唯独0x00这样子。 这个问题是什么原因啊???帮忙分析一下。 谢谢楼主分享的资料了。 DMA配置也简单。 楼主测试的效果怎么样 应该开发一个配置工具了 DMA+USART1的IDLE 不定长字符? 配置DMA操作步骤 设置成循环的了吧 用DMA方式从内存向串口1数据寄存器传送数据 usart用dma发送的条件是什么 AT-START-F407免费领取的吗 主频可以到多少呢? 这个有结束位吗? 代码编写也简单多了。 spi1的dma可以和usart3的dma一起用么 对应的通道:DMA2-Channel4-Stream7? 代码跟stm32兼容吗 只要重新配置一下长度,然后再次enable就可以了吧。
页:
[1]
2