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;

}

相关推荐
搬砖的小码农_Sky几秒前
FPGA:XILINX FPGA产品线以及器件选型建议
嵌入式硬件·fpga开发·硬件架构·硬件工程
道亦无名14 分钟前
STM32H743输出50%的占空比波形
stm32·单片机·嵌入式硬件
小智学长 | 嵌入式39 分钟前
单片机-STM32部分:10、串口UART
stm32·单片机·嵌入式硬件
猎板阿权1 小时前
出于PCB设计层面考虑,连排半孔需要注意哪些事项?
单片机·物联网·平面
#金毛1 小时前
如何使用C51的Timer0实现定时功能
单片机·嵌入式硬件
Flocx2 小时前
在 STM32 上使用 register 关键字
stm32·单片机·嵌入式硬件
GodKK老神灭2 小时前
STM32 __main
stm32·单片机
梁下轻语的秋缘2 小时前
STM32 ADC 模数转换器详解:原理、配置与应用
stm32·单片机·嵌入式硬件
欢乐熊嵌入式编程2 小时前
智能手表试产总结报告
嵌入式硬件·目标跟踪·规格说明书·智能手表
欢乐熊嵌入式编程2 小时前
智能手表整机装配作业指导书(SOP)
嵌入式硬件·物联网·目标跟踪·智能手表