当前位置: 首页 > news >正文

嵌入式STM32学习—— 定时器中断(应用-利用定时器中断实现LED亮一秒灭一秒)

利用定时器中断实现LED亮一秒灭一秒

time.h

#ifndef TIM_H_
#define TIM_H_void TIM_TimeBase_init(void);#endif

time.c

#include "stm32f10x.h"
#include "time.h"void TIM_TimeBase_init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBase_initstruct;NVIC_InitTypeDef NVIC_TIM_Initstruct;RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2,  ENABLE);        //时钟初始化//定时器初始化,定时一秒TIM_TimeBase_initstruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBase_initstruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBase_initstruct.TIM_Period = 7200;			//最大65535TIM_TimeBase_initstruct.TIM_Prescaler = 10000;TIM_TimeBase_initstruct.TIM_RepetitionCounter = 0;TIM_TimeBaseInit( TIM2, &TIM_TimeBase_initstruct);TIM_Cmd( TIM2,  ENABLE);	//定时器使能TIM_ITConfig(TIM2,  TIM_IT_Update, ENABLE  );		//定时器中断更新使能NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //中断分组
//中断初始化NVIC_TIM_Initstruct.NVIC_IRQChannel = TIM2_IRQn;NVIC_TIM_Initstruct.NVIC_IRQChannelCmd = ENABLE;NVIC_TIM_Initstruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_TIM_Initstruct.NVIC_IRQChannelSubPriority = 0;NVIC_Init(&NVIC_TIM_Initstruct);}

led.h

#ifndef LED_H_
#define LED_H_void LED_Init(void);#endif

led.c

#include "led.h"
#include "stm32f10x.h"//初始化LED灯的函数————函数的定义、声明、调用(led.c    led.h  main.c)
void LED_Init(void)
{//1.初始化led引脚GPIOA1GPIO_InitTypeDef  led_initstruct;  //定义GPIO的结构体//2.时钟初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//时钟的初始化led_initstruct.GPIO_Pin = GPIO_Pin_1;led_initstruct.GPIO_Speed = GPIO_Speed_2MHz;led_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&led_initstruct);  //初始化GPIO结构体}

main.c

#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
#include "usart.h"
#include "stdio.h"
#include "time.h"void delay(uint16_t time) 
{uint16_t i=0;while(time--){i =12000;while(i--);}}int  main() 
{Key_Init();my_usart_init();LED_Init();TIM_TimeBase_init();
//	My_Usart_Send_Byte( USART1,  'A');
//	My_Usart_Send_Byte( USART1,  'B');
//	My_Usart_Send_Byte( USART1,  'C');
//	My_Usart_Send_Sting( USART1,  "\r\n");
//	My_Usart_Send_Sting(USART1 , "fei \r\n");printf("Hello,shi \r\n");while(1){}		
}void TIM2_IRQHandler(void)
{if( TIM_GetITStatus( TIM2,TIM_IT_Update  ) != RESET){GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)));//对A1引脚进行电平取反//GPIO_ResetBits(GPIOA,GPIO_Pin_1);TIM_ClearITPendingBit(TIM2, TIM_IT_Update );}
}

本文介绍了使用STM32定时器中断实现LED每秒闪烁的方法。通过配置TIM2定时器(周期7200,预分频10000)产生1秒中断,在中断服务程序中翻转GPIOA1引脚电平。系统包含定时器初始化、LED驱动和主程序三部分:定时器模块设置时钟和中断,LED模块初始化GPIOA1为推挽输出,主程序启动各模块后进入循环。中断处理函数TIM2_IRQHandler检测更新事件并执行LED状态切换,实现精确的1秒亮灭周期控制。

http://www.xdnf.cn/news/635113.html

相关文章:

  • Q1:Go协程、Channel通道 被close后,读会带来什么问题?
  • ABP VNext + Webhook:订阅与异步回调
  • 6个跨境电商独立站平台
  • C++23 元编程工具新特性探索
  • 开发AR导航助手:ARKit+Unity+Mapbox全流程实战教程
  • 【Python 命名元祖】collections.namedtuple 学习指南
  • 反序列化之Wakeup方法绕过
  • Dify 本地源码安装教程
  • 【漫话机器学习系列】277.梯度裁剪(Gradient Clipping)
  • Redis数据安全分析
  • Java——优先级队列(堆)
  • 前沿探索之Kuikly框架
  • Java 虚拟机(JVM)原理与实战:打造高效稳定的运行环境
  • YOLOV8涨点技巧之空间通道协作注意力(SCCA)-应用于自动驾驶领域
  • 【公式】MathType公式右编号对齐
  • C/C++ 结构体:. 与 -> 的区别与用法及其STM32中的使用
  • 2025.5.25总结
  • Windows 11 [close recent file browsing history]
  • 对WireShark 中的UDP抓包数据进行解析
  • win11 禁用/恢复 内置笔记本键盘(保证管用)
  • 嵌入式软件--DAY8 IIC通讯下 硬件实现
  • 解决WPF短暂的白色闪烁(白色闪屏)
  • 从智能提效到产品赋能的架构实践
  • Pycharm and Flask 的学习心得(9)
  • PCB 通孔是电容性的,但不一定是电容器
  • CSS相关知识
  • 基于PyTorch的残差网络图像分类实现指南
  • 如何理解Pytorch中前向传播的计算过程
  • 小土堆pytorch--神经网络搭建小实战Sequential的使用
  • 高可用 Redis 服务架构分析与搭建