上海医疗网站备案,互展科技网站建设,网站需要多少钱,最新未来三天全国天气预报使用定时器实现#xff1a;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) #defi…使用定时器实现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_CounterModeTIM_CounterMode_Up; //计数模式 向上计数 Tim2.TIM_ClockDivisionTIM_CKD_DIV1; //时钟分割是输入捕获用的故这里随便给 Tim2.TIM_Prescalerpsc; //预分频值 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; }