MCU上的两个UARTs:需要FreeRTOS(或明智)?



我想使用一个带有两个UARTs的小型stm32G0:

  • 一个RX从RFID读取器接收约300字节,大约每秒一次,115k波特。我解析消息到简单的Modbus数据每次我收到它(CRC检查涉及)
  • RX每秒接收一个8字节的请求(Modbus), TX计算CRC并在30-200ms后发送一个40字节的响应(Modbus)。9600波特。

此外,没有任务。

我知道这可以用FreeRTOS来完成,但我是新手,我会弄清楚的,但我想知道它是否能像保持简单时那样稳定。但我必须承认,我还没有想出如何使它保持简单:

  • 接收大约每秒300字节的消息(不固定),检查CRC16,解析出大约10个浮点值(ascii),将这些转换为IEEE754浮点数,准备被请求(其中一些,或全部)
  • 在另一个RX上监听传入的Modbus请求,检索1-10浮点值,创建(=简单)消息并计算CRC16

我的问题是,如果没有freeRTOS,它是否可以完成。如果是,是否明智。

这个项目可能不需要RTOS。

有三个主要部分:

  1. 一些逻辑来填充RFID RX缓冲区,使用DMA和/或中断
  2. 一些逻辑来填充Modbus RX缓冲区,使用DMA和/或中断
  3. 主循环:
do forever {
    Process RFID RX buffer, parse text
    Possibly update Modbus registers using the parsed values
    Process Modbus RX buffer, arm USART TX DMA with the response
}

如果这个循环可以在Modbus主机超时或RFID阅读器发送另一个包之前执行,那么就完成了。如果没有,您可以将Modbus处理(可能比RFID有更严格的时间要求)转移到ISR中。通常,在ISR中做耗时的工作不是一个好主意,但在你的情况下,我认为考虑到你的uC没有太多事情要做,这是可以的。

最新更新