狗啃模拟 发表于 2022-1-26 22:54

华大MCU填坑之USART

先吐槽下,华大的函数库都是坑,而且很浪费CPU资源,在此建议有能力、有时间的一定要去学习他的寄存器操作,一是防坑,二可以提高个人能力,毕竟这是基础的东西(俗话说:基础不牢,地动山摇)。

进入主题,这个说是串口BUG,实际是系统时钟问题。本人使用外部8M晶振,按照官方例程,将串口配置完成后,测试。设置波特率为9600,实际使用波特率只有2400。使用仿真查看系统时钟频率,这点华大的库提供了一个比较便利的函数 Clk_GetHClkFreq()

狗啃模拟 发表于 2022-1-26 23:10

狗啃模拟 发表于 2022-1-26 23:13

仿真发现,程序运行到u32Val = CLK_XTH_VAL;时,Val值为32000000,GO TO一下

狗啃模拟 发表于 2022-1-26 23:13

发现外部高速时钟频率默认值是32000000。我的天呐,以后换个外部高速晶振都得来改下这个值。。。惊掉下巴!!!

狗啃模拟 发表于 2022-1-26 23:14

在使用华大MCU的串口时还要注意波特率与系统主频的匹配,在他们的用户手册里有“Mode1/Mode3波特率设置示例”需要跑更高的波特率时,主频速率也要跟上。

狗啃模拟 发表于 2022-1-26 23:17

这里备注个“双波特率”,根据华大提供的公式理解,就是将(主频*2),具体功能未查到,也未细研究,如有知道的大佬欢迎留言解惑。

azrm 发表于 2022-1-26 23:52

本帖最后由 azrm 于 2022-1-27 00:09 编辑

没遇到过,我直接使用的官方例子里面的,时钟频率和窗串口都是正常的,串口分频设置为16,就可以满足9600到115200之前的波特率了。我用的f460,没遇到过你说的情况,f005我也用过,用的外部8m晶振,9600波特率,暂时还没啥问题。

azrm 发表于 2022-1-27 00:02

哦,对了,我用的是f460,可能和你使用的型号不一样

azrm 发表于 2022-1-27 00:11

没遇到过,我直接使用的官方例子里面的,时钟频率和窗串口都是正常的,串口分频设置为16,就可以满足9600到115200之前的波特率了。我用的f460,没遇到过你说的情况,f005我也用过,用的外部8m晶振,9600波特率,暂时还没啥问题。

martinhu 发表于 2022-1-27 14:32

因为STK板用的是32M的外部晶振。
楼主有没有更好的办法让程序知道外部晶振的频率???

wubangmi 发表于 2022-1-27 16:34

这本不叫坑,只是需要手工改宏定义而已,从另一方面来说,楼主没有很好的熟悉华大的例程而已

七毛钱 发表于 2022-2-6 21:05

还以为真的是什么大坑了

tfqi 发表于 2022-2-7 10:29

如果真是这样的话 很难找问题

tfqi 发表于 2022-2-7 10:30

这样也能提高调试水平

nawu 发表于 2022-2-7 10:51

看来无论什么都要持怀疑态度啊

aoyi 发表于 2022-2-7 11:33

虽然能提高能力 但是真的不好找原因

zljiu 发表于 2022-2-7 11:52

对官方数据也要怀疑了

gwsan 发表于 2022-2-7 12:30

那还是自己从头写代码比较好

dzfansman 发表于 2022-2-13 14:13

串口有什么bug

modesty3jonah 发表于 2022-2-13 16:43

现在都是库函数配置了。
页: [1] 2
查看完整版本: 华大MCU填坑之USART