STM32F10x 定时器

使用定时器实现: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;

}

相关推荐
编程墨客8 小时前
STM32F103C8T6单片机内部执行原理及启动流程详解
stm32·单片机·嵌入式硬件
Wangshanjie_989 小时前
【STM32】-SPI通讯
stm32
qq_4112624210 小时前
整体无需占用任何硬件 UART,即可新增一条全双工软串口
单片机·嵌入式硬件
XINVRY-FPGA12 小时前
XCZU47DR-2FFVG1517I Xilinx FPGA AMD ZynqUltraScale+ RFSoC
人工智能·嵌入式硬件·fpga开发·信息与通信·信号处理·射频工程·fpga
Cyrus_柯12 小时前
单片机基础(STM32-DAY2(GPIO))
单片机·嵌入式硬件
吃货界的硬件攻城狮12 小时前
【STM32 学习笔记】SPI通信协议
笔记·stm32·学习
努力的小帅12 小时前
STM32单片机_3
stm32·单片机·嵌入式硬件·学习·stm32c8t6
逼子格13 小时前
开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记
嵌入式硬件·硬件工程·硬件工程师·开关电源·multisim电路仿真·稳压电源·线性电源
SKYDROID云卓小助手13 小时前
无人设备遥控器之无线电频率篇
服务器·网络·单片机·嵌入式硬件·算法
逼子格15 小时前
振荡电路Multisim电路仿真实验汇总——硬件工程师笔记
笔记·嵌入式硬件·硬件工程·硬件工程师·硬件工程师真题·multisim电路仿真·震荡电流