[AT32F403/403A] 关于AT32F403A使用RTThread的驱动时,串口复用问题怎么解决呢?

[复制链接]
 楼主| fattyhuang 发表于 2023-4-25 23:17 | 显示全部楼层 |阅读模式
使用的时AT32F403AVGT的主控,使用的时RTThread Studio编程环境,关于串口端口复用的问题,使用了rtthread的驱动程序。硬件上UART3使用了PC10,PC11端口,但是发现官方的驱动并没有支持这个端口,于是修改了驱动,修改部分如下:
  1.         /* usart3 configure */
  2.         { .pin_index = GET_PIN(B, 10), .normal_uart =  3, .remap_uart = -1 },
  3.         { .pin_index = GET_PIN(B, 11), .normal_uart =  3, .remap_uart = -1 },
  4.         { .pin_index = GET_PIN(C, 10),  .normal_uart = -1, .remap_uart =  3 },
  5.         { .pin_index = GET_PIN(C, 11),  .normal_uart = -1, .remap_uart =  3 },

  6.         /* uart4 configure */
  7.         //{ .pin_index = GET_PIN(C, 10), .normal_uart =  4, .remap_uart = -1 },
  8.         //{ .pin_index = GET_PIN(C, 11), .normal_uart =  4, .remap_uart = -1 },
  9.         { .pin_index = GET_PIN(A, 0),  .normal_uart = -1, .remap_uart =  4 },
  10.         { .pin_index = GET_PIN(A, 1),  .normal_uart = -1, .remap_uart =  4 },

此时的问题就是需要屏蔽uart4的PC10,PC11端口,才能正常工作,对于这个问题,请问一下各位还有什么好的办法吗?

评论

很好的资源,学习啦~~  发表于 2023-9-17 08:45
sheltonyu 发表于 2023-4-26 09:55 | 显示全部楼层
本帖最后由 sheltonyu 于 2023-4-26 09:58 编辑

你好,uart3/uart4在硬件上确实都支持PC10 PC11脚,但因为rtt studio串口pin脚初始化方式的关系,其pin脚是通过传入脚名再循环查表的方法找到对应脚位的串口号及remap情况,这样的方式不支持脚名重复。所以在进行pin脚分配时就进行了取舍,因uart3有3组可用,uart4仅有2组可用,所以就折中的将pc10/pc11给到了uart4,这样驱动上就能保证uart3/uart4都能有两组可用。
如果uart3确实需要使用pc10/pc11时,也可修改一下代码来实现,修改方式:
1.对应修改uart3的pd8/pd9脚位为pc10/pc11(你代码已贴出来)
2.uart3 remap配置需要修改为gpio_pin_remap_config(USART3_MUX_01, TRUE);
注:这样修改后最好就把uart4的pc10/pc11屏蔽,或者不开启uart4,防止pin脚被抢占。

a.PNG
 楼主| fattyhuang 发表于 2023-4-26 10:06 | 显示全部楼层
sheltonyu 发表于 2023-4-26 09:55
你好,uart3/uart4在硬件上确实都支持PC10 PC11脚,但因为rtt studio串口pin脚初始化方式的关系,其pin脚是 ...

谢谢您的回复,目前就是这么做的,主要看还有其他办法没。看来只有这样了
duo点 发表于 2023-9-20 16:06 | 显示全部楼层
参考AT32F403A和RTThread的文档吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

31

帖子

0

粉丝
快速回复 返回顶部 返回列表