问答

汇集网友智慧,解决技术难题

21ic问答首页 - AT32F403AVGT7的UART在波特率1200BPS为什么无法正常工作?

AT32 MCU UART 波特率 ps

AT32F403AVGT7的UART在波特率1200BPS为什么无法正常工作?

fyywhy2022-09-15
AT32F403AVGT7 主频工作在240MHZ时,为什么使用UART在波特率1200BPS为什么无法正常工作,在不降低主频的情况下有什么解决办法吗?
回答 +关注 15
4114人浏览 8人回答问题 分享 举报
8 个回答
  • 已经理解了,感谢大家的解答,用如此低的波特率是为了通信稳定,主要是使用了光耦作隔离。
  • 楼主1200如此极低的波特率 是外设模块的吗? 还是为了通信稳定,如果为了稳定,可以UART TX RX加RC,连接线外部屏蔽。
  • 楼上2位正解
  • 你的公式用错了
    DIV = 120 000 000 / 16 / 1200 = 6250.——不需要除16
  • 你算一下,实际波特率寄存器中的值是DIV/16值,按上面的计算,2400波特率时,DIV = 120000000/2400=50000,小于65535的,如果是1200波特率,则=100000,远大于65535,这时波特率误差超过30%了,能通信并不能保证数据100%准确。你发长数据包就会发现到后面的数据有误差。
  • 通过测试,确实可以通过降低主频至120MHz,uart5可以正常工作。如下所示:
    crm_pll_config(CRM_PLL_SOURCE_HEXT_DIV, CRM_PLL_MULT_15, CRM_PLL_OUTPUT_RANGE_GT72MHZ);

    在不变主频的情况下,也可以单独增大APB时钟分频因子。如下所示:
    crm_apb_div_set(CRM_AHB_DIV_2);

    在不变主频的情况下,还可以单独增加aph1时钟分频因子。如下所示:
    crm_apb1_div_set(CRM_APB1_DIV_4);

    不过根本的原因还是有点疑问:
    根据参考手册:

    如在fPCLK=120MHz时,在波特率为2400bps时,置于波特率寄存器的值为3125。
    即DIV = 120 000 000 / 16 / 2400 = 3125.
    那么在波特率为1200bps时.
    DIV = 120 000 000 / 16 / 1200 = 6250.

    又因为波特比率寄存器的[15:0]为分频系数,即DIV可以设置的范围为16~65535,那么6250应该在此范围内,怎么说分频因子不对呢,还有哪个地方是我没有理解的吗?

  • 好的,感谢解答
  • 主频在240M时,USART的分频因子无法分到1200 bps,
    如果在240M时,一定要用1200 bps,建议降频或增大APB时钟分频因子。

您需要登录后才可以回复 登录 | 注册