OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14662|回复: 10

定时中断中的APB1预分频系数?

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-5-31
在线时间
0 小时
发表于 2015-6-5 02:29:56 | 显示全部楼层 |阅读模式
5金钱
在定时器中断中,
#include "timer.h" 
#include "led.h" 
//通用定时器 3 中断初始化 
//这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M 
//arr:自动重装值。 
//psc:时钟预分频数 
//这里使用的是定时器 3! 
void TIM3_Int_Init(u16 arr,u16 psc) 

        TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure; 
  NVIC_InitTypeDef NVIC_InitStructure; 
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //①时钟 TIM3 使能 
           
//定时器 TIM3 初始化 
  TIM_TimeBaseStructure.TIM_Period = arr;        //设置自动重装载寄存器周期的值     
  TIM_TimeBaseStructure.TIM_Prescaler =psc;    //设置时钟频率除数的预分频值 
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割 

上面这一句话,APB1最大频率是36Mhz,这个在初始化的时候就已经设置了的,如果用库函数默认就是36Mhz,在main函数运行前就设置了,一般可以不管。
默认是36MHZ,那么现在是
 APB1 的 2 倍,这个去哪里设置这个APB1预分频系数。

最佳答案

查看完整内容[请看2#楼]

回复【3楼】安安耶_: ---------------------------------  RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;       在SetSysClockTo72()  函数里
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7138
金钱
7138
注册时间
2015-1-23
在线时间
105 小时
发表于 2015-6-5 02:29:57 | 显示全部楼层
回复【3楼】安安耶_:
---------------------------------
 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;       在SetSysClockTo72()  函数里
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-6-5 11:08:48 | 显示全部楼层



设置系统时钟72M,2分频给PCLK1,36M,再2倍 给 定时器2~7,所以设置时钟初始化就确定了定时器频率 
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-5-31
在线时间
0 小时
 楼主| 发表于 2015-6-5 12:28:46 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
这个我知道,我现在APB1(*1/*2) -- CK_PSC(/n)--CK_INT ,我现在想知道前面APB1的预分频系统是哪里设置,哪个库函数,APB1预分频系数通过CFGR寄存器的PPRE1几个位来决定,但是原子代码没有只是一笔带过//这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M ,这个我想知道是在哪里设置
回复

使用道具 举报

16

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7138
金钱
7138
注册时间
2015-1-23
在线时间
105 小时
发表于 2015-6-5 18:18:48 | 显示全部楼层

就是在这里面
回复

使用道具 举报

15

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-5-14
在线时间
6 小时
发表于 2015-6-5 22:11:07 | 显示全部楼层
回复【3楼】安安耶_:
---------------------------------
通过库函数可以找到,AHB时钟设置成72MHz,然后设置APB1预分频系数为2,这样APB1时钟为36MHz,因为APB1预分频系数为2,不是1,所以给TIM2~7的时钟为APB1时钟的2倍,就是72MHz啦
回复

使用道具 举报

55

主题

151

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2018-3-12
在线时间
53 小时
发表于 2018-6-4 12:07:46 | 显示全部楼层

请问怎么设置APB1 的时钟分频数?怎么调用库函数
那个时钟分频因子TIM_ClockDivision 描述
TIM_CKD_DIV1 TDTS = Tck_tim
TIM_CKD_DIV2 TDTS = 2Tck_tim
TIM_CKD_DIV4 TDTS = 4Tck_tim
在配置  定时器    的时候如何做出选择?
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-26 16:00:21 | 显示全部楼层
时钟树了解一下
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2016-10-12
在线时间
33 小时
发表于 2018-10-10 21:20:40 | 显示全部楼层
皮皮logo 发表于 2015-6-5 22:11
回复【3楼】安安耶_:
---------------------------------
通过库函数可以找到,AHB时钟设置成72MHz,然后设 ...

一语道破!我也迷惑了半天,看资料头都看大了,哈哈
回复

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-9-2
在线时间
28 小时
发表于 2019-3-16 09:15:56 | 显示全部楼层
皮皮logo 发表于 2015-6-5 22:11
回复【3楼】安安耶_:
---------------------------------
通过库函数可以找到,AHB时钟设置成72MHz,然后设 ...

朋友你好,我也在迷惑这个问题,初始化里确实设置了APB1为2分频,但是我改成不分频时定时器的时钟也是72M,改成4分频时定时器时钟才是36M,不知道你试过没有呢?
回复

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-6-29
在线时间
73 小时
发表于 2019-3-16 09:55:02 来自手机 | 显示全部楼层
不分频 后面就不会在倍频了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 04:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表