STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
TIM1和TIM8是能够产生3对PWM互补输出的高级定时器,常用于三相电机的驱动,时钟由APB2的输出产生;TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
通用TIMx定时器特性包括:
●16位向上,向下,向上/向下自动装载计数器
● 16位可编程预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
●4个独立通道:(定时器通道是什么意思?在PWM一节中有提到...)
− 输入捕获
− 输出比较
− PWM生成(边缘或中间对齐模式)
− 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA:
− 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
− 触发事件(计数器启动,停止,初始化或者由内部/外部触发计数)
− 输入捕获
− 输出比较
定时器的RCC时钟部分:
APB1和APB2所连的外设如下:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
定时器中断的一般步骤:(以TIM2为例)
1.定时器时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
2.中断配置 定义结构体、清空定时器2的中断位、设置初始值、设置预分频、时钟分割、计数方式、使能、打开中断、打开定时器外设资源。
3.中断优先级配置 定义结构体、确定分组、设置IRQ通道、设置抢占优先级、设置从优先级、通道使能、使能。
4.中断服务程序
测试用例:(以TIM2为定时器控制LED发光状态)
1 #include "pbdata.h"
2 #include "misc.h"
3 #include "stm32f10x_exti.h"
4 #include "stm32f10x_tim.h"
5
6 void RCC_Configration(void)
7 {
8 SystemInit();
9 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
10 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //定时器时钟使能
11 }
12
13 void GPIO_Configration(void)
14 {
15 GPIO_InitTypeDef GPIO_InitStructure;
16 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
17 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
18 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
19 GPIO_Init(GPIO_LED,&GPIO_InitStructure);
20 }
21
22 /*
23 *中断配置*
24 */
25 void TIM_Configuration(void)
26 {
27 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
28 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清空定时器3的中断位
29
30 TIM_TimeBaseStructure.TIM_Period = 2000; //设置初始值,定时1s
31 TIM_TimeBaseStructure.TIM_Prescaler = 35999; //设置预分频
32 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割
33 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
34 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
35
36 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //打开中断
37 TIM_Cmd(TIM2,ENABLE); //定时器外设打开
38 }
39
40 void NVIC_Configuration(void) //设置优先级
41 {
42 NVIC_InitTypeDef NVIC_InitStructure;
43 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
44 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //使能指定的IRQ通道
45 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //指定成员NVIC_IRQChannel的抢占优先级
46 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //指定成员NVIC_IRQChannel的从优先级
47 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
48 NVIC_Init(&NVIC_InitStructure);//初始化外设NVIC寄存器
49 }
50
51 int main(void)
52 {
53 RCC_Configration();
54 GPIO_Configration();
55 TIM_Configuration();
56 NVIC_Configuration();
57 while(1);
58 }
上一篇:STM32 BOR/POR/PDR介绍
下一篇:PWM控制led渐变
推荐阅读
史海拾趣
2017年,随着区块链技术的兴起,Helium团队看到了新的机遇。他们意识到区块链的透明性和自确认性可以为物联网网络的建设带来革命性变化。于是,Helium决定将网络建设“去中心化”,并借助区块链技术重新定义激励机制。这一决策标志着Helium从单纯的物联网项目转变为融合区块链技术的创新企业。通过去中心化的方式,Helium降低了网络建设和维护的成本,加速了网络覆盖的速度,为物联网设备提供了更加便捷和经济的连接方案。
为了进一步提升公司的竞争力和市场份额,EQCOLOGIC公司决定实施国际化战略。公司积极参与国际电子展会和交流活动,与国际同行建立广泛的合作关系;同时,还加大在海外市场的投入力度,拓展销售渠道和市场份额。通过不断的努力和创新,EQCOLOGIC的产品逐渐打入国际市场,公司的国际化战略也取得了显著成效。
A/D Electronics Inc在创立初期,以其卓越的技术研发团队在模拟到数字转换器(ADC)领域取得了重大突破。公司研发出一款高精度、低噪声的ADC芯片,这一创新产品迅速在市场中获得认可,为公司的初步发展奠定了坚实基础。随着技术的不断迭代,A/D Electronics Inc陆续推出了一系列高性能的电子产品,满足了市场对于高效、稳定电子元件的日益增长需求。
DAICO公司深知品质的重要性,因此在生产过程中严格遵循国际标准和规范。公司不仅建立了完善的质量管理体系,还通过了多项国际认证,如ISO 9001等。这些认证证明了DAICO在产品质量和管理水平方面的实力,进一步提升了其在国际市场上的竞争力。
在快速发展的过程中,安信可通过收购与合作的方式,不断增强自身的综合实力。例如,在2016年,安信可被博安通投资收购,成为其旗下的一员。博安通作为一家专注于物联网领域的技术密集型高新技术企业,为安信可提供了更多的技术支持和市场资源。通过与博安通的合作,安信可进一步巩固了在物联网市场的地位。