使用定时器实现:B5 E5的开关
添加相关的.h路径文件
添加相关的.c配置文件
led.h文件 用于声明LED函数
#ifndef __LED_H //没有定义__LED_H
#define __LED_H //就定义__LED_H
#define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define LED1_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define LED2_ON GPIO_ResetBits(GPIOE,GPIO_Pin_5)
#define LED2_OFF GPIO_SetBits(GPIOE,GPIO_Pin_5)
//里面放宏定义 函数申明
void LED_Lnit(void);
#endif
led.c文件 主要用于LED灯的配置
#include "stm32f10x.h"
#include "led.h"
void LED_Lnit(){
//定义结构体变量
GPIO_InitTypeDef GPIO_Initx;
//打开GPIOB 5的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
//给结构体变量的属性的属性的值
GPIO_Initx.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initx.GPIO_Pin = GPIO_Pin_5;
GPIO_Initx.GPIO_Speed = GPIO_Speed_50MHz;
//设置B5为推挽输出
GPIO_Init(GPIOB,&GPIO_Initx);
GPIO_Init(GPIOE,&GPIO_Initx);
}
tim.h文件 //用于声明定时器的函数
#ifndef __TIM_H
#define __TIM_H
#include "stm32f10x.h"
void Tim_init(u16 arr,u16 psc);
#endif
tim.c文件 用于配置定时器
#include "stm32f10x.h"
#include "led.h"
void Tim_init(u16 arr,u16 psc){
TIM_TimeBaseInitTypeDef Tim2;
NVIC_InitTypeDef NVIC_Initx;
//1、开启定时器2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //开启TIM2时钟
//2、定时器初始化
Tim2.TIM_Period = arr; //自动装载值 装载值10000-1
Tim2.TIM_CounterMode=TIM_CounterMode_Up; //计数模式 向上计数
Tim2.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割是输入捕获用的,故这里随便给
Tim2.TIM_Prescaler=psc; //预分频值 7200-1
TIM_TimeBaseInit(TIM2,&Tim2);
//3、打开更新中断
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //此处有中断
//4、优先级 有中断就有中断优先级
NVIC_Initx.NVIC_IRQChannel = TIM2_IRQn; //配置目标:中断线0
NVIC_Initx.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initx.NVIC_IRQChannelPreemptionPriority = 1; //设置抢占优先级
NVIC_Initx.NVIC_IRQChannelSubPriority = 2; //设置响应优先级
NVIC_Init(&NVIC_Initx);
//5、启动定时器
TIM_Cmd(TIM2,ENABLE);
}
//构建中断服务函数,在.s启动文件中找
void TIM2_IRQHandler()
{
//交替闪烁
//如果B5输出为1 则B5输出为0 E5输出1
if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))
{
LED1_ON;
LED2_OFF;
}
else //如果B5输出为0 则B5输出为1 E5输出0
{
LED2_ON;
LED1_OFF;
}
// 否则B5输出为1 E5输出为0
//清除中断标记位 如何已经触发过来,再次使用不清除就一直是触发过后的高电平
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
main.c文件
#include "stm32f10x.h"
#include "led.h"
#include "tim.h"
int main()
{
//中断分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
LED_Lnit(); //配置IO程序
Tim_init(9999,7199);
//编写程序功能
while(1){;
//当前程序没有其他功能
}
return 0;
}