STM32定时器中断

来源:互联网 发布:价格走势软件 编辑:程序博客网 时间:2024/06/08 17:36

通过定时器中断控制LED灯的亮灭。

说明:本人所用软件为IAR,所用的为STM32固件库3.5,定时器每1秒产生一次中断。

led.h文件(相关头文件)

#ifndef __LED_H#define __LED_H#include "stm32f10x_gpio.h"#include "stm32f10x.h"#include "stm32f10x_rcc.h"#include "stm32f10x_tim.h"#endif


led.c文件

#include "led.h"void TIM3_IRQHandler(void)//定时器中断服务函数{    TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除溢出中断标志       if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0))//读GPIO_Pin_0电平,如果为1,置为0;如果为0,置为1;        GPIO_ResetBits(GPIOA,GPIO_Pin_0);    else        GPIO_SetBits(GPIOA,GPIO_Pin_0); }void TIM3_Config(void)//定时器中断配置{    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  //自定义结构体    GPIO_InitTypeDef GPIO_InitStructure;   //自定义结构体    NVIC_InitTypeDef NVIC_InitStructure;        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//打开相应时钟    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //打开时钟            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//LED   选择引脚0      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50MHz    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉电阻输出    GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA            NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置为1组        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //定时器3中断配置    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级1级    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级1级    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能    NVIC_Init(&NVIC_InitStructure); //初始化         TIM_TimeBaseStructure.TIM_Period = 10000-1;    //设置在下一个更新事件装入活动的自动重装载寄存器周期的值     TIM_TimeBaseStructure.TIM_Prescaler = 7200-1; //设置用来作为TIMx时钟频率除数的预分频值  10KHz  1秒产生10000个脉冲     TIM_TimeBaseStructure.TIM_ClockDivision = 0;  //设置时钟分割:TDTS = Tck_tim    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位       TIM_ITConfig(TIM3,TIM_IT_Update ,ENABLE);//TIM3中断使能    TIM_Cmd(TIM3,ENABLE);   //开启定时器3   }


主函数

#include "led.h"void TIM3_Config(void);//函数声明int main(){    TIM3_Config();//函数调用    while(1)    {    ;    }}