1 现象发现 在使用LoRaWAN开发板调试程序时,发现一个现象,LPUART的波特率设置为2400bps时,初始化异常,出现程序进入死循环的现象: 同样的,其他条件均不改变,若将波特率修改为<2400的值,则会出现初始化异常;但波特率>2400,则初始化正常,程序可正常运行。 从上述现象可初步得出:波特率值的大小是出现该异常的原因。
2 原因分析翻阅《STM32L4 Reference mannual》中LPUART1的资料, 在"LPUART baud rate generation
"章节,有以下关键描述: 从文章中可获知: Tx/Rx baud = 256*fck/LPUARTDIV
其中fck为时钟源频率,程序中LPUART1的时钟源为HSI:16MHz,并且fck需满足[3*baud rate, 4096*baud rate]; LPUARTDIV的数值范围查看LPUART_BRR 寄存器:
从描述可获知:LPUARTDIV的范围是[0x300, 2^20-1]。
3 问题解决 3.1 公式反推 整理上述资料,分析得知:3*baud rate < fck < 4096*baud,fck固定为:16MHz,按照这个范围计算范围,反推看是否成立: 假设baud rate = 2400bps,那么3*baud rate = 7200,4096*baud rate = 9830400 < 16000000 可见 fck > 4096*baud rate,不符合要求; 假设baud rate = 4800bps,那么3*baud rate = 14400,4096*baud rate = 19660800 > 16000000; 可见fck < 4096*baud rate,符合要求。 可得出结论,若LPUART的时钟源固定为HSI = 16MHz,那么当波特率 <= 2400时无法满足要求,需更换时钟源。 串口4个时钟源
可看出,若baud rate <= 2400,时钟源更换为LSE = 32.768kHz最为合适。 3.2 STM32 CubeMX图形化分析
3.2.1 HSI时钟源分析
stm32 cubeMX引脚配置界面 stm32 cubeMX时钟配置界面 - 双击图中心LPUART按钮
- 选中Baud Rate,下方会自动弹出波特率范围,可看出baud rate > 2400bps
stm32 cubeMX参数配置界面 stm32 cubeMX波特率参数配置界面 从stm32cube mx配置中看出,若时钟源为HSI,则baud rate范围:[3.907k, 5.33M],2400bps无法满足。
3.2.2 LSE时钟源分析 stm32 cubeMX引脚配置界面 stm32 cubeMX时钟配置界面 - 双击图中心LPUART按钮
- 选中Baud Rate,下方会自动弹出波特率范围,可看出baud rate > 2400bps
stm32 cubeMX参数配置界
|