打印
[APM32F1]

APM32F103xE中使用16M晶振作为HSE时,USART波特率配置异常

[复制链接]
771|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

1 问题描述
在项目开发过程中,遇到了串口发送数据乱码,串口中配置的的波特率是115200,无意间把波特率设置为1152000.5倍即57600,发现数据是正常的。同时采集了通信过程中的波形,波特率确实降低了一半。
2 分析过程
重新检查硬件电路,分析驱动库中关于串口波特率的配置代码,总结如下:
2.1 硬件电路检查
1、项目中使用的是16MHz的晶振,并不是8MHz晶振
2.2 代码检查2.2.1 依据串口实际的时钟计算波特率
                              
2.2.2 依据串口挂接在哪个总线上、结合总线分频系数获取串口实际的频率
从系统框图来看,USART1是挂接在APB2总线上,其它的USART是挂接在APB1总线上,
因此可以和驱动库的代码对应上。

2.2.3 依据AHB总线时钟的频率及对APB1APB2的分频系数计算系统APB1APB2的频率数值

2.2.4 依据分配系数,计算AHB总线时钟的频率

2.2.5 依据时钟源中的宏定义数值、PLL倍频系数计算系统时钟的频率,
该项目使用了外部晶振作为时钟源,使用PLLCLK作为系统时钟。

由于项目使用的是16MHz的晶振,因此在此处修改晶振的宏定义数值可以正确的配置串口的波特率。

3 总结
虽然我们换了晶振,调整PLL倍频系数,可以正确的配置系统时钟,但是函数中获取系统时钟数值、串口驱动函数中计算波特率的方式是基于HSE的宏定义的数值来计算的,在更换晶振时,同时需要调整HSE的宏定义。

使用特权

评论回复
沙发
averyleigh| | 2022-7-8 09:31 | 只看该作者
是不是配置的波特率有问题呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:极海半导体
简介:珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。

29

主题

68

帖子

0

粉丝