woai32lala 发表于 2022-5-1 19:55

华大HC32F460避坑之串口通讯

本帖最后由 woai32lala 于 2022-5-1 19:55 编辑

华大HC32F460避坑之串口通讯      
#申请原创# #有奖活动#@21小跑堂

今天用华大的串口USART1做RS485通信,RS485电路如下图所示


一开始设置的通讯波特率为115200,串口发送数据正常,一开始以为是TVS管的结电容过大导致的发送频率上不去
然而,去掉TVS管D11之后,发送乱码问题依然没有解决。
然后再次考虑到是因为是因为控制接收和发送的PMOS管电平逻辑不对导致的,用示波器测得0-2.2V

SSP485芯片DE输入高电平为大于2V即可,因此不是发送引脚这边的电路问题。
我试着降低波特率,改为9600后,示波器直接测不出发送方波,这开始让我怀疑不是电路的问题,而是软件的问题。
我进行软件单步调试,运行了串口初始化函数USART_UART_Init
串口初始化这边返回OK
说明底层硬件外设是没有问题的,然后单步运行到下一步,设置波特率这一段,出现了问题,设置波特率返回error,测发送的波特率跟实际测得的每个周期长度也不一样,问题应该是出现在波特率设置了

看错误运行的断点,有这么一句话,找到了问题,波特率的整数部分不能超过255,小数部分不能小于0

而我设置的9600的波特率

选择的是内部时钟,分频PLCK1/1,
根据公式   DIV = ((float)C / ((float)B * 8.0f * (2.0f - (float)OVER8))) - 1.0f;
C = 1000000B= 9600 OVER8= 1
算出来的整数部分为1301,这不出错都不行。
我又将波特率设置为115200,

得到整数部分是107,设置波特率返回值也是OK
看公式得知,波特率越高,DIV的整数部分越小,就会在他的判断成功条件以内。
那现在该怎么解决呢,根据公式,我们可以改变时钟的频率,那么时钟频率为多少和合适呢
我们通常采用最低的波特率9600,我就根据9600的波特率来算,DIV设置为255
255 = (C/(9600 * 8 * 1) - 1;
得出C = 19,507,200
也就是说,要想得到4800的波特率,我们给波特率的时钟频率不能超过这数。
我们采用的是串口1,串口1的时钟来源选择的是PLCK1,我们的是中最高频率为100M

要想小于19,507,200这个频率,我们要分频,分频1,2,4,8,16,32,64这些可选择
那我们选择16分频,得出的时钟频率为6.25M

然后我们串口的波特率设置为9600,再次进行调试

时钟分频和波特率都设置正常,正常的波特率波形也出来了。
以上就是华大HC32F460避坑之串口通讯的总结,还是要多看看数据手册,祝大家五一快乐!






littlelida 发表于 2022-5-5 10:05

串口会有问题?

sjnh 发表于 2022-5-5 10:18

littlelida 发表于 2022-5-5 10:05
串口会有问题?

本人没发现问题,就是2个注意,一个是楼主说的设置波特率如果速率低了库函数有bug需要注意,另一个是460系列串口发送完中断标志是不可软件清除的,跟它自家的M0系列、其它家都不一样

azrm 发表于 2022-5-5 11:52

用了4个串口,暂时没有发现问题。遇到不清楚的看官方历程,自己再摸索摸索就行了。

caigang13 发表于 2022-5-5 21:27

哈哈,感谢分享避坑经验。

weifeng90 发表于 2022-5-6 07:53

哈哈,学到了。

woai32lala 发表于 2022-5-6 15:27

可能大家的底层库不一样,但目前我用过的是2.1的,我确实是遇到了这个问题,通过这么修改是解决了。

两只袜子 发表于 2022-5-6 16:21

非常感谢楼主分享的避坑经验,值得学习

小华单片机代理 发表于 2022-5-9 15:05

a15963254 发表于 2022-5-17 00:51

有BootLoader串口升级的例子吗付费购买

lvyunhua 发表于 2022-5-21 22:09

不错,学习了

tpgf 发表于 2022-6-1 12:56

这个经验非常不错 哈 可以避开很多问题

drer 发表于 2022-6-1 13:34

完美避过坑哈

qcliu 发表于 2022-6-1 13:54

这个高电平有点低哈

coshi 发表于 2022-6-1 14:06

介绍的太详细啦

kxsi 发表于 2022-6-1 14:16

有时候也可以发外包

wiba 发表于 2022-6-1 14:32

看来还是有很多细微的地方不同啊

carpsnow 发表于 2022-6-19 11:32

串口一直跑,看了这个帖子,又回去看自己的代码了~~~

SUNKE9 发表于 2024-4-7 08:33

昨天要用31250这个MIDI的波特率发现不正常,于是改了几个波特率,发现正常的38400以上能用,以下就都不能用了,于是百度到这里了。

woai32lala 发表于 2024-4-7 12:43

SUNKE9 发表于 2024-4-7 08:33
昨天要用31250这个MIDI的波特率发现不正常,于是改了几个波特率,发现正常的38400以上能用,以下就都不能用 ...

所以呢,成功了么
页: [1] 2 3
查看完整版本: 华大HC32F460避坑之串口通讯