[AT32F437] 看看串口的最大波特率是多少

[复制链接]
1715|13
神秘低语 发表于 2025-9-26 10:31 | 显示全部楼层 |阅读模式
, , pi, IO,
一直都觉得115200bps的波特率低,这种感觉像极了当年觉得9600bps太慢而升级到了115200bps的前夜。
雅特力AT32F437官方的数据手册说明串口最高波特率高达9Mbps!我想试试!
以串口发送为例,主要是我没有其它硬件设备可以发送9Mbps的能力,我们再通过示波器来观察串口的波特率。
串口发送的代码我们参考官方示例库中的usart里的polling工程,源代码如下:
  1. static void usart1_init(void)
  2. {
  3.   gpio_init_type gpio_init_struct;
  4.   crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);
  5.   crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

  6.   gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  7.   gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
  8.   gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  9.   gpio_init_struct.gpio_pins = GPIO_PINS_9 | GPIO_PINS_10;
  10.   gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  11.   gpio_init(GPIOA, &gpio_init_struct);
  12.   gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE9, GPIO_MUX_7);
  13.   gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE10, GPIO_MUX_7);

  14.   usart_init(USART1, 9000000, USART_DATA_8BITS, USART_STOP_1_BIT);
  15.   usart_parity_selection_config(USART1, USART_PARITY_NONE);
  16.   usart_transmitter_enable(USART1, TRUE);
  17.   usart_receiver_enable(USART1, TRUE);
  18.   usart_enable(USART1, TRUE);
  19. }

  20. static void usart1_send_bin(uint8_t dat)
  21. {
  22.   while (usart_flag_get(USART1, USART_TDBE_FLAG) == RESET)
  23.   {
  24.     ;
  25.   }
  26.   usart_data_transmit(USART1, dat);
  27. }

可以看到雅特力AT32F437平稳地发出了9Mbps的串口数据0x55。


串口最高速率.jpg
好吧!我承认,我仅仅希望其能稳定工作在1Mbps波特率上。

dukedz 发表于 2025-9-26 14:48 | 显示全部楼层
我这个开源 usb 转 串口 485 总线用的 是 at32f405 主控,外挂的 uart 控制器,速度可以到 50Mbps,串口还带多主仲裁,和 can 类似:

https://bbs.21ic.com/forum.php?mod=viewthread&tid=3426278
天鹅绒星星 发表于 2025-9-27 23:27 | 显示全部楼层
dukedz 发表于 2025-9-26 14:48
我这个开源 usb 转 串口 485 总线用的 是 at32f405 主控,外挂的 uart 控制器,速度可以到 50Mbps,串口还 ...

能到50Mbps 是不是也把RS485芯片的带宽给跑满了啊
和谐智者 发表于 2025-9-28 10:48 | 显示全部楼层
dukedz 发表于 2025-9-26 14:48
我这个开源 usb 转 串口 485 总线用的 是 at32f405 主控,外挂的 uart 控制器,速度可以到 50Mbps,串口还 ...

这么高的速率,AT32F405 能处理过来了吗?
1/4主频了?
dukedz 发表于 2025-9-28 11:49 | 显示全部楼层
天鹅绒星星 发表于 2025-9-27 23:27
能到50Mbps 是不是也把RS485芯片的带宽给跑满了啊

我默认贴的是 50Mbps 的接口芯片,那就用满了

贴一些 50Mbps 的 RS485 接口芯片,这些都是 TI 的:
THVD1450DR、THVD2450、THVD1550、SN65HVD78DR

还有 100Mbps 的 RS485 芯片,譬如美信的:MAX22500E/MAX22501E
dukedz 发表于 2025-9-28 12:28 | 显示全部楼层
本帖最后由 dukedz 于 2025-9-28 15:45 编辑
和谐智者 发表于 2025-9-28 10:48
这么高的速率,AT32F405 能处理过来了吗?
1/4主频了?

50Mbps 是串口波特率,使用 8N1 格式,那么有效数据占 80%, 等效 40 Mbits/s

然后包之间也有空闲,所以实际要传输的数据量会再少一些

不过包之间的空闲比传统软件处理要小很多,硬件打包解包可以最高效的利用总线带宽
观星者宁静 发表于 2025-9-29 20:09 | 显示全部楼层
dukedz 发表于 2025-9-28 12:28
50Mbps 是串口波特率,使用 8N1 格式,那么有效数据占 80%, 等效 40 Mbits/s

然后包之间也有空闲,所以实 ...

您可是RS485,工控通讯行业的大佬啊!
前段时间查过RS485多主中继器,一下就查到大佬了
观星者宁静 发表于 2025-9-30 11:23 | 显示全部楼层
9Mbps,相当于900KBps。
话说要是这速率走中断接收,MCU的性能会如何?
转瞬回声 发表于 2025-9-30 17:24 | 显示全部楼层
楼主 如果把串口波特率设置为了10Mbps会是怎么样呢
 楼主| 神秘低语 发表于 2025-10-17 15:15 | 显示全部楼层
转瞬回声 发表于 2025-9-30 17:24
楼主 如果把串口波特率设置为了10Mbps会是怎么样呢

感觉像是溢出了。
串口不再输出数据了
灵感之源 发表于 2025-10-17 19:43 | 显示全部楼层
这个还和你硬件有关系的吧
闪烁黎明 发表于 2025-10-18 21:38 | 显示全部楼层
观星者宁静 发表于 2025-9-30 11:23
9Mbps,相当于900KBps。
话说要是这速率走中断接收,MCU的性能会如何?

波特率是这么算的??
治愈糖果屋 发表于 2025-10-20 15:11 | 显示全部楼层
我之前也尝试过提高波特率,但发现数据传输的稳定性会受到影响
 楼主| 神秘低语 发表于 2025-10-20 15:08 | 显示全部楼层
灵感之源 发表于 2025-10-17 19:43
这个还和你硬件有关系的吧

我用得示波器。还能和啥硬件相关啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部