GD32F4(6):晶振引发串口乱码
1. 系统环境
-
系统:win10
-
IDE:keil5
-
开发板:GD官方评估板GD32450Z_EVAL
-
用户手册版本:GD32F4xx_yonghushouce_Rev2.6.pdf
-
标准库版本:GD32F4xx_Demo_Suites_V2.5.0
2. 开发板串口乱码
官方带的开发板晶振都是25M的,当你自己设计的时候可能会使用其它数值的外部晶振,就需要自己设计相应的时钟程序,好在GD官方设计了很多程序,你通过更改宏,就可以在不同晶振下来回切换,如下:
没错,这样就在不同晶振下设置成200M了,具体的原理请参考我的另一篇文章:GD32F4(5):GD32F450时钟配置为200M过程分析
现在系统是200M没错,但是外设还不知道系统当前的时钟,那就会导致外设初始化时钟出现错误,如使用串口的时候,会发现数据乱码,这是因为有一个定义时钟的宏需要修改,如下:
解释:在使用外设的时候,外设时钟初始化会调用rcu_clock_freq_get(rcu_clock_freq_enum clock)
获取时钟,如下图:
这个函数会通过读取配置的晶振时钟还有时钟配置相关的寄存器,算出每个bit需要的时钟延时,当算出的延时和真正的延时相等的时候,就不会出现乱码了。