本帖最后由 倚楼听风和雨 于 2023-4-27 16:35 编辑
看N32G455的串口资料时,想起可以用DMA传输串口的数据;但是在DMA传输中需要先设定传输的数据长度,当串口接收或者发送的数据不是固定长度时,好像就不可以了。百度了一下关于不定长接收的例子,有看到ST的,不过没有找到国民的,在官方的BSP中也没有这个例程,最后,参考ST的不定长接收,移植了一个N32G455的不定长收发数据。上传到21ic,希望对大家有帮助,也方便下次自己能找到。 有写的不对的地方,希望有大神能提出修改。
原帖:https://blog.csdn.net/sudoeast/article/details/128022610
1.定义收发的数组和标志位等
2.初始化
这里我使用的是串口1和DMA1的通道4和5;串口用空闲中断,不用使能接收和发送中断
3.中断函数
在接收数据之前最好能对两个接收数组做初始化,这样在把接收的数据再发送出来的时候,不会发送错误(比如第一次接收10Byte,第二次接收3Byte,可能会导致第二次再发出的数据是3Byte和第一次接收的10Byte后面几位)
4.测试
使用串口助手给MCU发送数据,MCU接收到的数据重新发送出来,可以看到是匹配的。
UART+DMA.zip
(1.15 MB)
|
老哥,我试了你的例程,但是烧录后发现串口只能发送一次,用串口第二次给455发数据时候串口就没有回传了