先吐槽下,华大的函数库都是坑,而且很浪费CPU资源,在此建议有能力、有时间的一定要去学习他的寄存器操作,一是防坑,二可以提高个人能力,毕竟这是基础的东西(俗话说:基础不牢,地动山摇)。
进入主题,这个说是串口BUG,实际是系统时钟问题。本人使用外部8M晶振,按照官方例程,将串口配置完成后,测试。设置波特率为9600,实际使用波特率只有2400。使用仿真查看系统时钟频率,这点华大的库提供了一个比较便利的函数 Clk_GetHClkFreq()
仿真发现,程序运行到u32Val = CLK_XTH_VAL;时,Val值为32000000,GO TO一下
发现外部高速时钟频率默认值是32000000。我的天呐,以后换个外部高速晶振都得来改下这个值。。。惊掉下巴!!!
在使用华大MCU的串口时还要注意波特率与系统主频的匹配,在他们的用户手册里有“Mode1/Mode3波特率设置示例”需要跑更高的波特率时,主频速率也要跟上。
这里备注个“双波特率”,根据华大提供的公式理解,就是将(主频*2),具体功能未查到,也未细研究,如有知道的大佬欢迎留言解惑。