单片机学习小组
直播中

石飞鹏

7年用户 974经验值
私信 关注

怎样使用FIFO去实现串口数据的收发功能呢

怎样使用FIFO去实现串口数据的收发功能呢?其基本实现流程有哪些呢?

回帖(1)

陈燕

2022-1-27 11:06:11

  • 1、Cubemx串口配置

            使用Cubmx对串口进行配置如下:






  • 2、驱动程序编写

    2.1驱动初始化

            进行串口收发FIFO的创建,进行发送FIFO回调函数的初始化,调用函数UsartStartCloseHT实现串口DMA+IDLE模式接收,同时关闭DMA的半满中断,减少进中断次数。

  • 2.2串口接收处理

            使用HAL库使能串口接收DMA+IDLE后,串口在接收完成或DMA满后会进入到中断中,并调用回调函数HAL_UARTEx_RxEventCallback,我们在该函数中将接收到的数据进行FIFO写入操作。
            串口接收过程中我们使用了两个缓冲区,中断中进行缓冲区的切换及数据向FIFO的写入操作。
    2.2串口发送处理

            串口发送过程中,先将数据压入到串口发送的FIFO中,判断串口发送不繁忙时,将数据读取到发送缓冲区记性DMA发送。

  • DMA发送完成后会进入发送完成中断,中断对未发送完的数据进行继续发送
    2.3串口FIFO的定时器功能

            FIFO定时器遍历FIFO链表
            对接收FIFO实现备份缓冲到FIFO的写入操作
            对发送FIFO实现未发送完成数据的继续发送。
    2.3串口错误处理

            解决串口接收发送过程中发生溢出中断等意外情况
    2.3详细完整代码

    1)中断中在FIFO不繁忙时将接收数据写入到FIFO中。                     
  • 2)中断中在FIFO繁忙时,将数据写入到BACK区域                           
  • 通过FIFO的定时器来实现BACK数据向FIFO的写入功能。
  • 串口的发送使用发送完成中断结合DMA的定时器回调功能实现。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分