华大HC32L13x 串口波特率设置为115200打印乱码问题

本文围绕华大低功耗MCU HC32L13x串口通信展开。设置串口波特率为115200时打印乱码,9600则正常。经分析,实测115200bps与配置差别大,原因是PCLK为4MHz。通过将SystemCLK改为RCH 24M,使PCLK升高,解决了乱码问题。

问题描述

华大低功耗MCU HC32L13x在设置串口波特率为115200时,串口打印乱码,而设置9600串口打印ok。官方例程也是9600bps,然而平常串口打印习惯性还是配置为115200-8-N-1(8bit数据位,无校验位,1停止位)

标准的115200bps的最小脉宽应该为8.68us,标准的9600bps的最小脉宽应该为104.17us

现象分析

配置115200打印乱码而不是没有打印说明有数据出来,但是不满足要求,软件在串口输出字符“123”,用逻辑分析仪抓取的乱码波形,关键,可以看到最小脉宽是7.99us,远小于8.68us,误差率7.95%

image-20201117215922561

对比9600抓取的可以正常打印的波形,最小脉宽103.83us,误差率不到0.33%

image-20201117215731250

如此对比,发现实测的115200bps和实际配置的差别太远

在HC32L13x用户手册上看到了相关说明,在PCLK=4MHz的条件下说明了各波特率的误差情况(注:PCLK字面意思也就是外设时钟)

image-20201117220557691

另外PCLK=24MHz条件下对各波特率误差就相对友好,居然还有0误差的。

image-20201117224607474

那么问题来了,当前工程配置的PCLK为多少呢,虽然根据表格明显应该是4MHz,查看时钟结构图如下

关注SYSCTRL0寄存器即可,BIT7:5是选择SystemCLK哪个时钟源,BIT10:8选择SystemCLK到HCLK的分频值,BIT12:11选择HCLK到PCLK的分频值

image-20201117221102730

进入Keil仿真,查看SYSCTRL寄存器组,其中SYSCTRL0为0x0000 0001 ,解释为选择内部高速时钟,SystemCLK到HCLK不分频,HCLK到PCLK也不分频,也就是PCLK = RCH。

image-20201117221700349

问题是RCH标称为4M-24M,RCH具体为多少呢,事实上RCH最多为24M也就决定了PCLK最多为24M,(也可选择PLL,可以把RCH倍频上去到48MHz,这样PCLK也可以得到48MHz)

调试-改SystemCLK为RCH 24M

查看main入口前的SystemInit函数

void SystemInit(void)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值