|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aligned2
TIM中央对齐模式2计数模式 |
TIM_CounterMode_CenterAligned3 | TIM中央对齐模式3计数模式 |
例:
[cpp]view plaincopy
- TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
- TIM_TimeBaseStructure.TIM_Period=0xFFFF;
- TIM_TimeBaseStructure.TIM_Prescaler=0xF;
- TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
2.3函数TIM_ClearFlag
函数名 | TIM_ClearFlag |
函数原型 | voidTIM_ClearFlag(TIM_TypeDef*TIMx,u32TIM_FLAG) |
功能描述 | 清除TIMx的待处理标志位 |
输入参数1 | TIMx:x可以是2,3或者4,来选择TIM外设 |
输入参数2 | TIM_FLAG:待清除的TIM标志位 参阅Section:TIM_FLAG查阅更多该参数允许取值范围 |
TIM_FLAG值
TIM_FLAG | 描述 |
TIME_FLAG_Update | TIM更新标志位 |
…… | …… |
例:
[cpp]view plaincopy
- TIM_ClearFlag(TIM2,TIME_FLAG_Update);
2.4函数TIM_ITConfig
函数名 | TIM_ITConfig |
函数原型 | voidTIM_ITConfig(TIM_TypeDef*TIMx,u16TIM_IT,FunctionalState NewState) |
功能描述 | 使能或者失能指定的TIM中断 |
输入参数1 | TIMx:x可以是2,3或者4,来选择TIM外设 |
输入参数2 | TIM_IT:待使能或者失能的TIM中断源 参阅Section:TIM_IT查阅更多该参数允许取值范围 |
输入参数3 | NewState:TIMx中断的新状态 这个参数可以取:ENABLE或者DISABLE |
TIM_IT值
TIM_FLAG | 描述 |
TIME_FLAG_Update | TIM中断源 |
…… | …… |
例:
[cpp]view plaincopy
- TIM_ITConfig(TIM2,TIME_FLAG_Update,ENABLE);
2.5函数TIM_Cmd
函数名 | TIM_Cmd |
函数原型 | voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalStateNewState) |
功能描述 | 使能或者失能TIMx外设 |
输入参数1 | TIMx:x可以是2,3或者4,来选择TIM外设 |
输入参数2 | NewState:TIMx中断的新状态 这个参数可以取:ENABLE或者DISABLE |
例:
[cpp]view plaincopy
- TIM_Cmd(TIM2,ENABLE);
3例程程序
本例程主要使用TIM2进行精准延时并亮灭LED灯,其中NVIC部分暂做了解,后面再继续深入。另外,需要注意3.0以后版本的固件库相比2.0版有所更改,如删除旧版NVIC部分函数,或移动至misc.c文件中,通道名TIM2_IRQChannel更改为TIM2_IRQn等。完整构架:
完整代码:
[cpp]view plaincopy
- #include"stm32f10x.h"
- voiddelay1ms(u32nTimer);
- voidGPIO_Configuration(void);
- voidTIM2_IRQHandler(void);
- voidTimer2_Configuration(void);
- voidNVIC_Configuration(void);
[cpp]view plaincopy
- intmain(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能GPIOC时钟
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2时钟
- GPIO_Configuration();
- NVIC_Configuration();//配置中断
- Timer2_Configuration();//配置定时器
- while(1)
- {
- GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_6);
- GPIO_SetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8);
- delay1ms(1000);
- GPIO_ResetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8);
- GPIO_SetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_6);
- delay1ms(1000);
- GPIO_Write(GPIOC,0x0140);
- delay1ms(2000);
- GPIO_Write(GPIOC,0x0280);
- delay1ms(2000);
- }
- }
- voidGPIO_Configuration(void)
- {
- GPIO_InitTypeDefGPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
- }
- voidTimer2_Configuration(void)
- {
- TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
- TIM_DeInit(TIM2);//使用缺省值初始化TIM外设寄存器
- TIM_TimeBaseStructure.TIM_Period=1;//自动重装载寄存器值为1
- TIM_TimeBaseStructure.TIM_Prescaler=(36000-1);//时钟预分频数为36000
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_div1;//采样分频倍数1,未明该语句作用。
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//上升模式
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
- TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除更新标志位
- TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中断
- TIM_Cmd(TIM2,ENABLE);//使能TIM2定时器
- }
- voidNVIC_Configuration(void)
- {
- NVIC_InitTypeDefNVIC_InitStructure;
- NVIC_SetPriorityGrouping(NVIC_PriorityGroup_0);
- NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//3.0版以后的函数库将各通道TIM2_IRQChanel改名TIM2_IRQn
- NVIC_InitStruct