c - UART 至 UART 桥接器 STM32

标签 c microcontroller stm32 uart stm32f1

是否有一种简单的方法可以在软件中桥接 2 个 U(S)ART 线(STM32F107 上的 USART1 和 UART5)?

我需要将 USART1 上传入的数据转发到 UART5 并返回。

当前MCU是STM32F107VCT7。

我想要这样做的主要原因是通过 UART 更新设备,该设备连接到我的 MCU。 MCU已连接至PC。

PC --- STM32 --- 其他设备

最佳答案

仅将字节从一个 UART 复制到另一个是行不通的。

如果发送端(PC 串行适配器)仅比 MCU 快 0.1%,它将在第 1000 个字节后开始丢弃字节。数据表中给出的 STM32F107 内部时钟的频率精度在室温下为 -1.1% 至 +1.8%,因此它可能发生得更早,其他两个参与者也可能不完全准确。

在固件更新过程中将字节丢弃到其他无法访问的部分不会很有趣。

双向都需要循环 (FIFO) 缓冲区

缓冲区的大小由数据包的大小以及参与设备中的频率误差总和决定。例如。如果一个 block 中有 64 kB 数据,并且两台设备的频率精度均为 +/- 2%,那么您至少需要 65536*0.04 ~ 2622 字节缓冲区。

无限循环地执行此操作,

  • 检查USART1->SR中的RXNE
  • 如果设置,则从USART1->DR中读取数据并将其放在缓冲区的头部(如果缓冲区已满则大声提示)
  • 检查 UART5->SR 中的 TXE`
  • 如果设置,并且缓冲区不为空,则将缓冲区尾部的字节写入UART5->DR
  • 对另一个方向执行相同的操作

关于c - UART 至 UART 桥接器 STM32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56694018/

相关文章:

c - 如何获得 C 函数的基本编译二进制代码?

c - 通过闪存进行 STM32F1 EEPROM 仿真

c - 像 "bpf_map_update_elem"这样的bps API map 助手的详细过程是什么?

c - FreeRTOS:osDelay 与 HAL_delay

c - PIC18f2520 + HCSR04

c - STM32F103RC TIM3 不工作

函数的 C typedef,如何使用 - 简单示例

C++/C : Move Directory to Another Location

c - 如何检查一个变量是否在C中

c - Fletcher 校验和从 32 位重制为 8 位