您的位置:首页 > 其它

工作中遇到的问题

2015-11-20 09:23 344 查看
2015/11/20

1. STM32 的通用定时器

1. 1 确定定时器2~7的时钟源

从上图时钟树中,可以知道,定时器2~7的时钟来自于APB1,APB1最大为36MHZ;假设主频72MHZ, APB1使用主频二分频得到,那么APB1 = 36MHZ;APB1的分频因子为2;而定时器的时钟来源于APB1,但是,注意红色标注的位置有这句话: “如果APB1预分频系数=1,则频率不变,否则频率x2”;
此时APB1的分频系数不为 1,所以给到定时器2~7的时钟,等于APB1 * 2 = 36MHZ * 2 = 72MHZ;这只针对定时器2~7, 对于其他挂在APB1上的外设,时钟源还是36MHZ;

1.2 确定所用定时器的时钟



TIM_TimeBaseStructure.TIM_Period = period - 1;

TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1;

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(pTimerHandler->TIMER, &TIM_TimeBaseStructure);


以上用于配置定时器的基本信息,包括时钟分频,计数器,计数方式和 [b]TIM_ClockDivision[/b]

假设现在定时器2~7的时钟源为72MHZ

TIM_Prescaler
: 时钟分频因子;定时器的时钟 = 72MHZ / (TIM_Prescaler+ 1)

[b]TIM_Period: 定时器的计数值;[/b]

[b]TIM_CounterMode:定时其的计数方式,[b]TIM_CounterMode_Up 表示向上计数[/b][/b]

[b]重点说明[b]TIM_ClockDivision:这并不是对定时器源的时钟分频用的,根据数据手册上的解释,如下:[/b][/b]

[b][/b]

[b][b]这里并没有明确说明该变量作何用处,所以设置该位对于定时器的时钟没有任何影响,一般设置为[b]TIM_CKD_DIV1;也就是0;[/b][/b][/b]

[b][b]所以定时器每计数一次的时间 = ([b]TIM_Prescaler
/ 72000 000)s;
[/b][/b][/b]

每次计数TIM_Period次产生一次中断;也就是定时器的中断时间 = TIM_Period * ([b]TIM_Prescaler
/ 72000 000);
[/b]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: