- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
USART1不能设定600BPS的波特率.PDF
USART1 不能设定600BPS 的波特率?
问题:
某客户工程师在某型号新产品的设计中,使用了 STM32 器件,型号为:STM32F103VDT6。据其工程师
讲述:为了实现产品的某项设计要求,他想要通过 USART1 以 600BPS 的波特率与另一颗器件进行通
信。通过编写程序测试发现,该通信接口未能工作在 600BPS 的波特率上,而是工作在一个较高的波
特率上,大约在 1600BPS。更改波特率设定,将波特率设定改为1200BPS 时,该接口能够工作在设定
的波特率上。
调研:
修改程序,使其通过 USART1 连续向外发送 0x55,然后用示波器检测 UASRT1 的 Tx 管脚上的波形,
测出每个比特的宽度为 636uS,换算成波特率为 1572BPS。
检查软件中对USART1 的初始化代码,未见错误。
检查 HSE 外接晶体,其标称频率为16MHz。
检查软件工程中的系统配置文件“stm32f10x_conf.h”,其中的 HSE_Value 设定与
外接晶体的频率一致。
检查软件中对 PLL 的设定,发现其设定为1 分频,4 倍频,由此可知系统时钟为 64MHz。检查软件
对外设总线 APB2 的时钟设定,发现其分频数为 1,可知 USART1 的工作时钟为 64MHz。通过芯片参
考手册中对波特率公式的公式:
可知,当波特率等600BPS 时,分频数应为 6666.6667,超过了硬件允许的最大分频数 4095.9375。
结论:
USART1 的工作时钟过高,导致其波特率发生器不能产生所要求的 600BPS 的波特率。
处理:
对 USART1 所在的 APB2 外设总线时钟做 2 分频设置,使其频率为系统时钟的一半,即32MHz。由于
USART1 的时钟来自 APB2,所以 USART1 的工作时钟也是 32MHz。根据公式计算,当分频数设为
3333.3334 波特率为 600BPS,该值在硬件允许的范围内。修改程序进行测试,发现按以上处理,
USART1 可以工作在 600BPS 的波特率上。
建议:
在 ST 提供的标准外设库中,对大多数的通信口(USART、I 2 C、SPI、CAN)的波特率的设定做了一
定的封装。这使得我们在设定这些通信口的波特率的时候,只需要给出所要的波特率数值,而由标准
外设库的函数为我们计算出每个相关的外设寄存器所需要的设定值。这一点大大的方便了软件的编写,
但也有其局限性。标准外设库在做波特率到外设寄存器取值的折算时候,没有对波特率取值的合理性
做严格的检查。一旦所给出的波特率的数值超出了合理的范围,会导致其计算结果出错。所以,在使
用标准外设库来做通信口的波特率的设定的时候,一定要自行审查所设定的波特率是否在硬件所能实
现的波特率的范围之内,否则会导致错误。另外,标准外设库在做波特率到外设寄存器取值的折算的
时候,需要用到一个重要的数据,即 HSE 的振荡频率。该参数的名字为:HSE_Value,在标准外设库
的配置文件中给出。通常,标准外设库的配置文件取名为 “stm32xxx_conf.h”,不同版本的库略有差
异。在软件设计中,要保证这一参数与实际硬件的真实频率相符,否则也会导致标准外设库在做波特
率到外设寄存器取值的折算的过程中,出现计算错误。STM32 为使用者提供了灵活的时钟树,在时钟
树的许多的环节中都可以进行时钟频率的调节。因此,当我们所需要的波特率不在硬件所能实现的波
特率范围之内的时候,可以尝试在时钟树的某个环节做出调整,从而改变硬件所能实现的波特率的范
围,最终实现我们所需要的波特率。
文档评论(0)