STM32定时器编程
时间:10-02
整理:3721RD
点击:
今天搞了一段时间的定时器编程,主要是我自己需要用到PWM波形,所以,就学习了一点,发帖记录一下,主要的代码:
定时器初始化:
void pwm_init(void)
{
// TIM_TimeBaseInitTypeDef pwm;
// pwm_cnt = 0;
// RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2,ENABLE);//
// pwm->TIM_CounterMode = TIM_CounterMode_Up;
// pwm->TIM_Period = 1000;//1ms
// pwm->TIM_Prescaler = 71;//72M/(71+1)
// pwm->TIM_ClockDivision = TIM_CKD_div1 ;//
// TIM_TimeBaseInit (TIM2,pwm);
// TIM_ClearFlag (TIM2,TIM_FLAG_Update);//
// TIM_ITConfig (TIM2,TIM_IT_Update,ENABLE);//
// TIM_Cmd (TIM2,ENABLE);//
// RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2,DISABLE);//
TIM_TimeBaseInitTypeDef pwm;
pwm_cnt = 0;
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2,ENABLE);//
pwm.TIM_CounterMode = TIM_CounterMode_Up;
pwm.TIM_Period = 1000;//1ms,记数1000,触发中断
pwm.TIM_Prescaler = 71;//72M/(71+1)
pwm.TIM_ClockDivision = TIM_CKD_div1 ;//
TIM_TimeBaseInit (TIM2,&pwm);
TIM_ClearFlag (TIM2,TIM_FLAG_Update);//清楚中断,防止误触发
TIM_ITConfig (TIM2,TIM_IT_Update,ENABLE);//允许定时器2计数中断
TIM_Cmd (TIM2,ENABLE);//使能定时器2
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2,DISABLE);//暂时关闭定时器2时钟
}
定时器中断初始化函数:
- void pwm_int_init(void)
- {
- // NVIC_InitTypeDef* pwm_int;//使用指针指向结构体不行,不知道为什么?
- //
- // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- // pwm_int->NVIC_IRQChannel = TIM2_IRQn ;
- // pwm_int->NVIC_IRQChannelPreemptionPriority = 0;
- // pwm_int->NVIC_IRQChannelSubPriority = 3;
- // pwm_int->NVIC_IRQChannelCmd =ENABLE;
- // NVIC_Init(pwm_int);
-
- NVIC_InitTypeDef pwm_int;
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- pwm_int.NVIC_IRQChannel = TIM2_IRQn ;
- pwm_int.NVIC_IRQChannelPreemptionPriority = 0;
- pwm_int.NVIC_IRQChannelSubPriority = 3;
- pwm_int.NVIC_IRQChannelCmd =ENABLE;
- NVIC_Init(&pwm_int);
- }
- void TIM2_IRQHandler(void)
- {
- 。。
- }
好
不能用指针来指向那个结构体?
具体是指指向哪个结构体呢?
(小编的程序规范性还需多多注意啊)
NVIC_InitTypeDef* pwm_int;//使用指针指向结构体不行,不知道为什么?
NVIC_InitTypeDef pwm_int;这样才行,
如果你要那样用的话要这样改,不过了解一下就好,何必这么麻烦
如果用指针的话,是要多一步malloc分配空间吗?
否则你那个定义出来的指针是空的,会出问题