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

使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)

说明:

本案例采用的定时器3(TIM3)实现,使用其他定时器是一样配置。

如何新建一个工程以及如何配置LED的端口,请查看前面文章:使用STM32CubeMX实现LED灯每秒闪烁一次(STM32G070CBT6单片机)-CSDN博客

1.配置SYS

2.配置RCC

3.配置系统时钟

此处配置系统时钟为64MHz。

注意!!!

此处系统时钟要采用HSI,如果采用HSE则将不能实现功能。

4.配置定时器TIM3

定时时间计算公式:

定时时间 = (Prescaler+1)× (Counter +1)/ 定时器时钟频率

例如,这里定时时间为 10ms,可设置Prescaler = 64-1;Counter = 10000 - 1;(TIM3时钟频率设置为64MHz)

(1)配置定时器

(2)配置定时器中断

5.点击生成文件。

6.添加代码实现功能

要想使用定时器3,那么需要先将其打开。采用如下函数打开。

HAL_TIM_Base_Start_IT(&htim3);    //开启定时器3

要实现LED闪烁,还需要增加定时器回调函数,在其中添加LED闪烁功能代码。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static unsigned char count = 0;if(htim->Instance == TIM3)    //处理TIM3间隔定时中断{count++;if(count >= 50)    //10ms*50=500ms{count = 0;HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);    //每500ms翻转一次,LED每秒闪烁一次}}
}

main.c文件中的代码:

//要增加的代码
//定时器回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static unsigned char count = 0;if(htim->Instance == TIM3)    //处理TIM3间隔定时中断{count++;if(count >= 50)    //10ms*50=500ms{count = 0;HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);    //每500ms翻转一次,LED每秒闪烁一次}}
}int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();HAL_TIM_Base_Start_IT(&htim3);    //要增加的代码,开启定时器3while (1){}}

7.实现现象

定时器实现LED每秒闪烁一次


http://www.mrgr.cn/news/94029.html

相关文章:

  • 制作自定义镜像
  • 【OpenGL】01-配置环境
  • react中字段响应式
  • 安装、配置和启动 ssh 服务,实现远程连接服务器
  • SVT-AV1源码分析函数 svt_av1_optimize_b
  • c++ constraints与concepts使用笔记
  • 如何用HTML5 Canvas实现电子签名功能✍️
  • 全网最详解答OSPF基础
  • 我与DeepSeek读《大型网站技术架构》(10)- 维基百科的高性能架构设计分析
  • C# Enumerable类 之 数据分组
  • 插入排序算法优化
  • 数字电路逻辑代数 | 运算 / 定律 / 公式 / 规则 / 例解
  • 【设计模式】《设计模式:可复用面向对象软件的基础》设计模式的分类与组织
  • 类和对象(下)
  • 大语言模型-语言模型发展历程
  • ⭐算法OJ⭐链表排序【归并排序】(C++/JavaScript 实现)
  • 基于Ollama平台部署的Qwen大模型实现聊天机器人
  • ⭐算法OJ⭐经典题目分类索引(持续更新)
  • NVSHMEM介绍、InfiniBand GPUDirect、和NVshmem使用案例说明
  • Application.OnTime如何引用带参数的过程