STM32L4 LPUART1经验分享
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时钟源分析
●使能LPUART1stm32 cubeMX引脚配置界面
●LPUART1时钟选择HSIstm32 cubeMX时钟配置界面
●波特率参数配置 ●双击图中心LPUART按钮 ●选中Baud Rate,下方会自动弹出波特率范围,可看出baud rate > 2400bpsstm32 cubeMX参数配置界面stm32 cubeMX波特率参数配置界面
●总结
从stm32cube mx配置中看出,若时钟源为HSI,则baud rate范围:[3.907k, 5.33M],2400bps无法满足。
3.2.2 LSE时钟源分析
●使能LPUART1和LSEstm32 cubeMX引脚配置界面
●LPUART1时钟选择LSEstm32 cubeMX时钟配置界面
●波特率参数配置 ●双击图中心LPUART按钮 ●选中Baud Rate,下方会自动弹出波特率范围,可看出baud rate > 2400bpsstm32 cubeMX参数配置界
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/91030.html