本帖最后由 519382868 于 2023-6-12 00:05 编辑
此文转载公众号《小龙智控》 文章,上连接不方便大家看,所以我就直接给大家上完整得文章
GD32F30x的串口不定长DMA接收和发送史诗级例子。虽然串口是单片机最常用的一种外设,今天就由我来给大家展示一个最好用的串口接收发送例子解说吧。DMA不定长接收和DMA发送。 GD32单片机自带串口发送接收有三种方式,下面就简单介绍一下三种处理数据的方式: 1、轮询方式(Polling):使用轮询方式发送和接收数据。在发送数据时,检查串口的状态寄存器,确认发送缓冲区为空后将数据写入发送寄存器。在接收数据时,检查状态寄存器的接收缓冲区非空标志位,然后读取接收寄存器中的数据。这种方式简单易懂,但需要不断检查状态寄存器,可能会浪费处理器的时间。 2、中断方式(Interrupt):配置串口为中断模式,在数据发送或接收完成时触发中断。当数据准备就绪时,触发发送或接收中断,在中断处理程序中处理数据的发送和接收。这种方式相对于轮询方式来说,减少了处理器的负载,但需要正确配置中断和编写中断处理程序。 3、DMA 方式(Direct Memory Access):使用 DMA 控制器来完成数据的传输。DMA 可以在不依赖处理器的情况下直接从内存复制数据到串口发送寄存器,或从串口接收寄存器复制数据到内存。这种方式能够大大减轻处理器的负担,并且适用于大量数据的传输。 前面的两种方式就不做详细的例程了,直接第三种方式开干,废话不多说下面直接上干货。 [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]
此例程就算两串口接起来无限对发也不影响主程序正常跑。上面所有的配置都是GD32F303官方库配置。 喜欢得可以关注下作者微信公众号 [color=rgba(0, 0, 0, 0.9)]
|