微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > STM32定时器编程

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时钟
}
定时器中断初始化函数:

  1. void pwm_int_init(void)
  2. {
  3. //         NVIC_InitTypeDef* pwm_int;//使用指针指向结构体不行,不知道为什么?
  4. //         
  5. //         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  6. //         pwm_int->NVIC_IRQChannel = TIM2_IRQn ;
  7. //         pwm_int->NVIC_IRQChannelPreemptionPriority = 0;
  8. //         pwm_int->NVIC_IRQChannelSubPriority = 3;
  9. //         pwm_int->NVIC_IRQChannelCmd =ENABLE;
  10. //         NVIC_Init(pwm_int);
  11.         
  12.         NVIC_InitTypeDef pwm_int;
  13.         
  14.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  15.         pwm_int.NVIC_IRQChannel = TIM2_IRQn ;
  16.         pwm_int.NVIC_IRQChannelPreemptionPriority = 0;
  17.         pwm_int.NVIC_IRQChannelSubPriority = 3;
  18.         pwm_int.NVIC_IRQChannelCmd =ENABLE;
  19.         NVIC_Init(&pwm_int);
  20. }

复制代码

接下来就可以写自己的中断处理函数了。记得在主函数中要开启定时器2时钟使能啊。

  1. void TIM2_IRQHandler(void)
  2. {
  3. 。。
  4. }

复制代码

主要的问题,是不知道为什么用库函数的时候,不能用指针来指向那个结构体?。


不能用指针来指向那个结构体?
具体是指指向哪个结构体呢?
(小编的程序规范性还需多多注意啊)

NVIC_InitTypeDef* pwm_int;//使用指针指向结构体不行,不知道为什么?
NVIC_InitTypeDef pwm_int;这样才行,

如果你要那样用的话要这样改,不过了解一下就好,何必这么麻烦

如果用指针的话,是要多一步malloc分配空间吗?

否则你那个定义出来的指针是空的,会出问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top