历史上的今天
今天是:2025年01月23日(星期四)
2021年01月23日 | 关于USART波特率、TIM的外设预分频值
2021-01-23 来源:eefocus
使用、参考STM32标准外设库,寄存器开发的朋友也需要注意一些细节问题。
1USART串口预分频
许多朋友用寄存器开发,就需要对寄存器中每一位十分熟悉才行。
但是在STM32中外设的寄存器很多,不像51这类单片机,就那么为数不多的寄存器,而且寄存器也能很容易理解。
有朋友其实已经发现,UART波特率设置太高,或太低就不能实现了。看下图波特率计算公式:

从上图可以看得出,波特率与fCK和USARTDIV。其中USARTDIV是一个无符号的定点数,这12位的值设置在USART_BRR寄存器。

结合上面图文,大家应该可以知道,波特率也是有一个范围的,而且波特率是存在误差的。
举一个例子:fCK = 36M, 波特率 = 100,那么计算出USARTDIV = 36M / 1600 = 22500.
然而,12位的数最大为4095,所以,越界了。
写这些其实希望不管你使用寄存器,还是库开发,其实都需要了解这些,避免入坑。
2TIM定时器预分频
前面有朋友问了我关于TIM定时器的问题,说自己参考STM32标准外设库,配置定时器,但是定时却不准确。
经过交谈,他把配置代码截图给我看了。我一看,就看出问题出在预分频值上。

而这位朋友是使用STM32F407,主频168M,他想让定时器每秒计数1000个,就是上面“SystemCoreClock / 1000”。
然而,他却没有考虑溢出问题:168M / 1000 = 168K,PrescalerValue最大值为65535.
另一个关于APB1、APB2时钟问题
有朋友发现自己配置的定时会相差一倍,其实原因也是在于预分频值不对造成的。
让大家看一下下图两个预分频宏定义:

原因在于:有的TIM定时器时钟是APB1,有的是APB2。这两个时钟一般默认配置是相差一倍,所以定时也就会相差一倍。
关于TIM使用的APB时钟差异,大家可以通过查看“参考手册”RCC章节,或结合STM32Cube工具理解。
定时器RCC时钟:

定时器Cbue时钟配置:

希望大家都了解这些配置,今天暂时就写到这里,希望对你有帮助!
史海拾趣
|
锁相环是指一种电路或者模块,它用于在通信的接收机中,其作用是对接收到的信号进行处理,并从其中提取某个时钟的相位信息。或者说,对于接收到的信号,仿制一个时钟信号,使得这两个信号从某种角度来看是同步的(或者说,相干的)。 由于锁定情 ...… 查看全部问答> |
|
该电路也适合于其它100管脚芯片LM3S1000、2000、8000系列。 相关芯片资料下载: LM3S615: SPX1117: CAT811: LM3S系列Protel元件库(rar): [ 本帖最后由 clark 于 2010-1-18 13:39 编辑 ]… 查看全部问答> |
|
现在给USB设备发送私有命令(当然固件也是有自己开发的),用BUS HOUND查看数据,发现发送一个私有命令后,报medium changed,不知道这个现象是为什么,希望高手解释一下!~~~~~~~~~~~~~~~~~~~~~~~~~… 查看全部问答> |
|
经过3个多月的努力,现在板子已经可以正常运行了。调试过程可谓坎坷,有硬件的也有软件的。现在SDRAM跑在136MHZ上,总的来说还算是比较稳定的。下面是该板子运行时的图片: &nb ...… 查看全部问答> |




