我用的 是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,能帮我简单的解释下这张图吗?
xyz549040622:
1.是11位的,还要包括一个起始位的,你抓取下串口传送的波形就知道了
2.3.4 。
ROM_SysCtlClockGet函数可以读取回来当前的时钟频率。
应该是先倍频到200MHZ,再2.5分频就是80MHZ了
Michael Sun:
1. 一个起始位,8个数据位,1个停止位。
简单解释一下,上面的图会先把PLL倍频到400然后做一个2分频到200.
然后再分配得到主时钟。
UART波特率的配置,可以参考库函数UARTConfigSetExpClk的源码,这里寄存器操作一目了然。