STM32
直播中

xiangwangzihui

11年用户 511经验值
擅长:模拟技术
私信 关注
[问答]

怎样通过编写TIM7定时中断去控制LED灯的亮灭呢

STM32f429中定时器有哪些?
怎样通过编写tiM7定时中断去控制LED灯的亮灭呢?

回帖(1)

许佳

2021-10-25 14:53:36
  stm32f429中基本定时器有两个,通用定时器有十个,高级定时器有两个。其中基本定时器为TIM6和TIM7。
  此处通过编写TIM7定时中断控制LED灯亮灭,TIM6与之类似。
  首先可以新建一个.c 和.h 文件,在.c文件中进行TIM7函数定义等,如下图所示:
  #include “bsp_tim_basic.h”
  static void BASIC_TIMx_Mode_Config()
  {
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);//开启时钟
  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//结构体申明
  TIM_TimeBaseInitStruct.TIM_Prescaler=8999;//设置时钟周期为10000hz psc 90M/(psc+1)
  TIM_TimeBaseInitStruct.TIM_Period=9999;//设置ARR 10000次
  TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);//使能更新
  TIM_TimeBaseInit(TIM7,&TIM_TimeBaseInitStruct);//定时器初始化
  TIM_Cmd(TIM7,ENABLE);//定时器使能
  }
  static void NVIC_TIMBasic_Config()
  {
  NVIC_InitTypeDef NVIC_InitStruct;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStruct.NVIC_IRQChannel=TIM7_IRQn;
  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
  NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
  NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStruct);
  }
  void TIMx_Basic_Config(void)
  {
  NVIC_TIMBasic_Config();
  BASIC_TIMx_Mode_Config();
  }
  由于前两个函数前有static修饰,所以写了最后一个函数以便于其他文件对前两个函数的调用。
  在.h文件中对所需的头文件以及可被外部调用的函数进行申明。
  #ifndef _BSP_TIM_BASIC_H
  #define _BSP_TIM_BASIC_H
  #include “stm32f4xx_tim.h”
  #include “stm32f4xx_rcc.h”
  #include “misc.h”
  extern void TIMx_Basic_Config(void);
  #endif
  这边编写完成后需要记得在stm32f4xx_it.c中进行中断函数的编写,其中控制LED灯亮灭便在此处被执行。
  void TIM7_IRQHandler(void)
  {
  if (TIM_GetITStatus(TIM7,TIM_IT_Update)!=RESET)
  {
  GPIO_WriteBit(GPIOC,GPIO_Pin_1,1-(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1)));
  }
  TIM_ClearITPendingBit(TIM7,TIM_IT_Update);
  }
  GPIO_WriteBit用于给LED灯置所想状态,在这里的最后一个参数通过GPIO_ReadOutputDataBit函数读当前的状态,通过1减去当前状态来获得相反的状态。
  在main函数中只要进行简单的调用即可。
  #include “stm32f4xx.h”
  #include “bsp_led.h”
  #include “bsp_tim_basic.h”
  #include “bsp_usart.h”
  int main(void)
  {
  usart1_init();
  LED_GPIO_Config();
  TIMx_Basic_Config();
  while(1)
  {
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分