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;

}

相关推荐
FreakStudio9 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484915 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150015 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼15 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
牛根生同志15 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
wohoo_wangzi15 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
goldenrolan15 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
✎ ﹏梦醒͜ღ҉繁华落℘15 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展15 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件