USART1 串口波特率的问题. 请香水城看一下.

[复制链接]
18083|38
 楼主| jgphu 发表于 2011-12-2 10:12 | 显示全部楼层 |阅读模式
我的芯片用外部16M晶振.

调试发现USART1的发送波特率不是设置值. 而TIM1,TIM2, CAN通信的波特率都是对的.

我查询USART1的BRR寄存器的值,

FPCLK = 72M, 波特率为19200.  但固件库软件计算值为117(原来计算值为234).

这样的话波特率肯定会不对的,

我用的是3.5.0的固件库.  我觉得是这样的, 固件库在初始化的时候会去获取FPCLK的值.但设置的是72M,为什么它得到的值为36M呢, 所以会出现实际示波器测量的时候,波特率已经加倍了,
 楼主| jgphu 发表于 2011-12-7 13:53 | 显示全部楼层
找到问题的根源了,  原来固件库在计算波特率的时候会调用一个获到外设时钟的一个函数, 在这个获到外设时钟的函数里也是通过计算得到外设时钟值的..

原固件库 定义 #define HSE_VALUE    ((uint32_t)8000000), 如果你的外部晶振是8M或你用内部晶振时, 你的波特率用库里的函数计算就是正确的.

我用的外部晶振是16M的, 而 HSE_VALUE 又没有改, 波特率算出来也就减半了,

所以改 #define HSE_VALUE    ((uint32_t)16000000), 波特率就对了..

评分

参与人数 1威望 +1 收起 理由
Chaos_zc + 1

查看全部评分

香水城 发表于 2011-12-2 10:48 | 显示全部楼层
对不起,我没有研究过。

STM32技术手册的第27.3.4节有详细的计算方法和例子,还有一个列表,你可以看看。
 楼主| jgphu 发表于 2011-12-2 12:30 | 显示全部楼层
技术手册没问题, 我就是想问这个固件库针对这个串口波特率设定的算法是不是有问题. 还是别的.

我根据技术手册直接写寄存器肯定不会有问题啦.
haitao10086 发表于 2011-12-8 08:47 | 显示全部楼层
swfc_qinmm 发表于 2011-12-8 12:34 | 显示全部楼层
LZ研究的很仔细。
581200 发表于 2011-12-13 14:58 | 显示全部楼层
很好很精辟
alnjby 发表于 2011-12-16 15:36 | 显示全部楼层
研究的很仔细,很好很精辟




耳鼻喉医院
武警南京医院
panyichen 发表于 2011-12-18 09:44 | 显示全部楼层
不是很清楚
lpersist 发表于 2011-12-19 15:54 | 显示全部楼层
nice,以前也碰到过,也花了不少时间。。。
baidudz 发表于 2011-12-19 18:30 | 显示全部楼层
楼主解决问题的能力挺强的,我一般得花几天才能找到问题所在
秋天落叶 发表于 2011-12-19 18:35 | 显示全部楼层
研究一下STM32技术手册
sczhangyl 发表于 2011-12-29 10:07 | 显示全部楼层
这种问题一般手册上都有!仔细看手册!
zhuyjgh 发表于 2012-1-4 14:23 | 显示全部楼层
不用库,,没碰到过,,
程序匠人 发表于 2012-1-4 22:39 | 显示全部楼层
和所猜不差
wfbisheng 发表于 2012-1-5 12:27 | 显示全部楼层
这问题没遇到过
lwslws201 发表于 2012-1-5 20:30 | 显示全部楼层
14# zhuyjgh
不愧是匠人~~
lwslws201 发表于 2012-1-5 20:31 | 显示全部楼层
15# 程序匠人
不愧是匠人~~
lhx522729 发表于 2012-1-10 11:00 | 显示全部楼层
没研究过STM32
chhaich 发表于 2012-1-11 01:01 | 显示全部楼层
牛人呀,呵呵。。。
还没有深入去了解这个库。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

642

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部