你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32F407定时器中断周期不准的问题

[复制链接]
ousam 提问时间:2023-6-20 14:48 / 已解决

外置晶振是8M,使用最高的系统时钟168M,然后使用定时器TIM8作为定时器更新中断,程序的寄存器PLL_N = 336;PLL_P = 2;PLL_M = 8;要配置一个16KHz,也即是周期为62.5us的中断,但是实际测试出来就是查了一点,利用一进入中断置GPIO的方式测试,示波器实测63.2us,也试过用Uint64的计数器,测试13分钟,测试记录到的值和理论值相差7.9s左右,所以是排除了程序置GPIO所用的时间导致的,实在查不出那儿的问题,望大神们指教一下:

如果配置成125us,实测126us,总是达不到理论的周期。定时器的配置:

TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3; TIM_TimeBaseStructure.TIM_Period = 10500; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);

收藏 评论8 发布时间:2023-6-20 14:48

举报

8个回答
xmshao 最优答案 回答时间:2023-6-21 11:09:43

ousam 发表于 2023-6-21 09:54
感谢你的回答,我尝试过用内部晶振16Mhz作为pll输入,就准确了,也就是说明是我的外部晶振不准吗?因 ...

[md]我这边就两种方式都实测过。

基于外部8MHz晶振作为时钟源,利用定时器和GPIO翻转得到的输出非常准而稳。

基于内部16MHz HSI作为时钟源,利用定时器和GPIO翻转得到的输出也很准、稳,相比上面

稍微有点抖动,0 ~ 0.5us的样子。 我这边通过示波器测量和观察。

废鱼 回答时间:2023-6-20 16:09:37

10500这个修改为10500 - 1,试一下。

ousam 回答时间:2023-6-20 16:32:41

废鱼 发表于 2023-6-20 16:09
10500这个修改为10500 - 1,试一下。

试过了,没有多大用,起码改为10500-100才接近62.5us

butterflyspring 回答时间:2023-6-20 16:33:21
定时器的实质就是给数字分频器,只要输入时钟准确,分频后也都是准确的。

从配置上看:
Auto-reload register (TIMx_ARR) 这个寄存器的值,也就是 TIM_TimeBaseStructure.TIM_Period = 10500; 应该减1。  
xmshao 回答时间:2023-6-21 09:25:45
使用STM32F407芯片,主频设置168MHz,如果按照下面配置:
TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;

TIM_TimeBaseStructure.TIM_Period = 10500-1;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);

我这边测试非常准,你现在有问题。要么你时钟有问题,

要么你的测量有问题。
ousam 回答时间:2023-6-21 09:54:46

xmshao 发表于 2023-6-21 09:25
使用STM32F407芯片,主频设置168MHz,如果按照下面配置:
TIM_TimeBaseStructure.TIM_Prescaler = 0;

感谢你的回答,我尝试过用内部晶振16Mhz作为pll输入,就准确了,也就是说明是我的外部晶振不准吗?因为外部晶振频率很难用示波器测试,示波器夹上去就波形都是不稳定的。

ousam 回答时间:2023-6-21 11:49:16

xmshao 发表于 2023-6-21 11:09
我这边就两种方式都实测过。</p>
<p>基于外部8MHz晶振作为时钟源,利用定时器和GPIO翻转得到的输出非常准而 ...

[md]感谢回答,我把我的贴片晶振换成直插式那种晶振就好了,没想到差别这么大,贴片的晶振不准确啊.....

ousam 回答时间:2023-6-30 15:06:06

xmshao 发表于 2023-6-21 09:25
使用STM32F407芯片,主频设置168MHz,如果按照下面配置:
TIM_TimeBaseStructure.TIM_Prescaler = 0;

你好,还有个问题想请教一下的,就是我的TIM的周期值是10499,中心对齐模式,不分频,10500*84Mhz = 8Khz,,为什么我测试出来是16Khz呢? 代码是和上面的一样,谢谢

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版