微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记——利用通用定时器TIM2进行精确延时

STM32学习笔记——利用通用定时器TIM2进行精确延时

时间:11-28 来源:互联网 点击:

    • Aligned2

      TIM中央对齐模式2计数模式

      TIM_CounterMode_CenterAligned3

      TIM中央对齐模式3计数模式

      例:

      [cpp]view plaincopy

      1. TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
      2. TIM_TimeBaseStructure.TIM_Period=0xFFFF;
      3. TIM_TimeBaseStructure.TIM_Prescaler=0xF;
      4. TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
      5. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
      6. 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

      1. 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

      1. 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

      1. TIM_Cmd(TIM2,ENABLE);


      3例程程序

      本例程主要使用TIM2进行精准延时并亮灭LED灯,其中NVIC部分暂做了解,后面再继续深入。另外,需要注意3.0以后版本的固件库相比2.0版有所更改,如删除旧版NVIC部分函数,或移动至misc.c文件中,通道名TIM2_IRQChannel更改为TIM2_IRQn等。完整构架:

      完整代码:

      [cpp]view plaincopy

      1. #include"stm32f10x.h"
      2. voiddelay1ms(u32nTimer);
      3. voidGPIO_Configuration(void);
      4. voidTIM2_IRQHandler(void);
      5. voidTimer2_Configuration(void);
      6. voidNVIC_Configuration(void);

      [cpp]view plaincopy

      1. intmain(void)
      2. {
      3. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能GPIOC时钟
      4. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2时钟
      5. GPIO_Configuration();
      6. NVIC_Configuration();//配置中断
      7. Timer2_Configuration();//配置定时器
      8. while(1)
      9. {
      10. GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_6);
      11. GPIO_SetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8);
      12. delay1ms(1000);
      13. GPIO_ResetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8);
      14. GPIO_SetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_6);
      15. delay1ms(1000);
      16. GPIO_Write(GPIOC,0x0140);
      17. delay1ms(2000);
      18. GPIO_Write(GPIOC,0x0280);
      19. delay1ms(2000);
      20. }
      21. }
      22. voidGPIO_Configuration(void)
      23. {
      24. GPIO_InitTypeDefGPIO_InitStructure;
      25. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
      26. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      27. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
      28. GPIO_Init(GPIOC,&GPIO_InitStructure);
      29. }
      30. voidTimer2_Configuration(void)
      31. {
      32. TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
      33. TIM_DeInit(TIM2);//使用缺省值初始化TIM外设寄存器
      34. TIM_TimeBaseStructure.TIM_Period=1;//自动重装载寄存器值为1
      35. TIM_TimeBaseStructure.TIM_Prescaler=(36000-1);//时钟预分频数为36000
      36. TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_div1;//采样分频倍数1,未明该语句作用。
      37. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//上升模式
      38. TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
      39. TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除更新标志位
      40. TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中断
      41. TIM_Cmd(TIM2,ENABLE);//使能TIM2定时器
      42. }
      43. voidNVIC_Configuration(void)
      44. {
      45. NVIC_InitTypeDefNVIC_InitStructure;
      46. NVIC_SetPriorityGrouping(NVIC_PriorityGroup_0);
      47. NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//3.0版以后的函数库将各通道TIM2_IRQChanel改名TIM2_IRQn
      48. NVIC_InitStruct

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

网站地图

Top