This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

uart的波特率设置问题,他与时钟的关系是怎么计算的



我用的 是tm4c1233的芯片,我想问 如果我软件里面设置波特率位115200如:

UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(), 115200,
                       (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                         UART_CONFIG_PAR_NONE));(问题1,这个一个字符发送的是10位把?)

就是这样的格式(115200-N-8-1),那我的分配到uart上的时钟是多少呢,

目前我是这么配置的SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_12MHZ);问题2,我这个时钟是多少,怎么计算的,我的外接晶震是12M。

SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL| SYSCTL_OSC_MAIN |SYSCTL_XTAL_12MHZ);问题3这个配置出来的时钟是80M吗问题4还有那个锁相环出来都是400M吗?

问题4,那个波特率跟时钟之间是怎么算,按照我上面问题给出的例子?

问题5,能帮我简单的解释下这张图吗?

  • 1.是11位的,还要包括一个起始位的,你抓取下串口传送的波形就知道了

    2.3.4 。

    ROM_SysCtlClockGet函数可以读取回来当前的时钟频率。

    应该是先倍频到200MHZ,再2.5分频就是80MHZ了

  • 1. 一个起始位,8个数据位,1个停止位。

    简单解释一下,上面的图会先把PLL倍频到400然后做一个2分频到200.

    然后再分配得到主时钟。

    UART波特率的配置,可以参考库函数UARTConfigSetExpClk的源码,这里寄存器操作一目了然。