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;

}

相关推荐
蓬荜生灰24 分钟前
永磁无刷电机旋转原理
单片机·嵌入式硬件
金色光环2 小时前
【Modbus学习笔记】stm32实现Modbus
笔记·stm32·学习
Ronin-Lotus5 小时前
嵌入式硬件与应用篇---寄存器GPIO控制
stm32·单片机·嵌入式硬件·微处理器原理与应用
星辰pid12 小时前
STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)
stm32·单片机·嵌入式硬件·机械臂
威桑14 小时前
STM32 专有名词缩写整合
stm32·单片机·嵌入式硬件
星源~14 小时前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
SKYDROID云卓小助手16 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理
所念皆星海91116 小时前
图灵完备之路(数电学习三分钟)----数据选择器与总线
嵌入式硬件·通信·数电
智者知已应修善业17 小时前
【51单片机节日彩灯控制器设计】2022-6-11
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
开-悟18 小时前
嵌入式编程-使用AI查找BUG的启发
c语言·人工智能·嵌入式硬件·bug