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

蓝桥杯嵌入式(STM32G431RBT6)入门第四天——系统嘀嗒定时器(SysTick)|CSDN创作打卡

和往常一样,先建立SysTick定时器练习文件夹,并在里面建立SysTick_test和SysTick两个子文件夹。

STM32的通用定时器是通过一个可编程预分频器Prescaler)驱动的16位自动重装主计数器(Counter Period)构成。可以对内部时钟或触发源以及外部时钟或触发源进行计数。

定时器发生中断时间的计算方法

查找资料可知:定时时间 = (Prescaler+ 1)x (Counter Period+ 1) x 1/定时器时钟频率

比如时钟信号1KHz,Prescaler为9,Counter Period为999,定时时间为10s。

蓝桥杯嵌入式比赛一般要把时钟信号设置为80MHz,下面我们就此频率实现三个功能:

1.利用TIM2实现间隔定时,每隔0.3秒将LED1的状态进行翻转。

2.利用TIM3实现间隔定时,每隔1秒将LED4的状态进行翻转。

3.修改TIM3的初始化代码,修改为每隔0.5秒将LED4的状态进行翻转。

下面打开STM32CubeMX进行配置,我们需要初始化的LED1和LED4,对应的IO口为PC8和PC11,以及LE对应的PD2。

首先将两个时钟都打开。

再去配置对应的GPIO口,将PC8、PC11和PD2设置为推挽输出,PC8、PC11初始化为高电平,这样上电LED不会亮,PD2初始化为低电平,这样上电不会对LED有任何的控制。

下面开始配置时钟树,按照下图中的数据进行修改,配置成80MHz。

下面开始配置TIM2和TIM3,根据给定的要求结合计算公式,TIM2的Prescaler需要设置为(8000-1)即7999,Counter Period需要设置为(3000-1)即2999。

TIM3的Prescaler需要设置为(8000-1)即7999,Counter Period需要设置为(10000-1)即9999。

下面在左侧Timers下拉,对TIM2和TIM3按照计算数据进行配置。

配置完成后不要忘记使能中断。

下面依旧是到了对工程的配置阶段,按照下图进行对应修改即可。

完成后即可生成代码。打开工程,首先把启动文件添加进工程,然后进行编译。

打开stm32g4xx_it.c找到下图框中的函数并按F12进入查看函数内部。

会跳转到stm32g4xx_hal_tim.c中void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)函数,继续向下翻找到第二张图①号框对应的回调函数HAL_TIM_PeriodElapsedCallback(htim);并按F12进入到函数内部,此函数是需要我们自行编写内部内容的(即需要完成的功能)。

跳转的内容如下,此函数是一个虚函数,如果检测到在别的地方用户定义了此函数则会执行用户定义的函数而不会执行下图中的虚函数,所以我将此函数复制到主函数进行编写 ,方便后面的代码编写。

编写代码的位置及内容如下:其中HAL_GPIO_TogglePin()函数的功能就是实现GPIO端口电平的翻转。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM2) { HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET); } if(htim->Instance == TIM3) { HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_11); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET); } }

下面需要在main函数中打开定时器,需要找到如下的函数:

在stmg4xx_hal_tim.h中找到 HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);

并在主函数的如下位置处打开TIM2和TIM3。

编译好代码,设置好下载器,将代码下载进入开发板即可实现现象。

下面继续打开tim.c,找到 void MX_TIM3_Init(void)函数,将里面的htim3.Init.Period值修改为4999即可实现0.5秒的LED4状态改变。

http://www.jsqmd.com/news/446826/

相关文章:

  • Web前端之Sass中的颜色函数、active按钮激活、disabled禁用、hover鼠标悬浮、Style循环、Css
  • 海康威视网络摄像头配置本地存储服务器进行录像和查看!(需要有老版本存储服务器软件和4200老版本搭配使用,官网没有了)
  • VisualStudioCode之各种配置介绍、终端不能运行yarn脚本、自动添加或补全双引号、文件头部的注释说明、保存时禁止格式化、重新加载窗口
  • 【KEIL】【JLINK】KEIL如何进行远程调试
  • 2026年商用咖啡机厂家深度测评:基于全链路能力与创新实效的四维战力解析 - 品牌推荐
  • 2026年商用咖啡机厂家权威榜单发布:五大品牌技术实力与服务网络深度排位赛 - 品牌推荐
  • 蓝桥杯嵌入式(STM32G431RBT6)入门第三天——使用按键(KEY)|CSDN创作打卡
  • ARM-MPU内存保护单元详解
  • 《计算机体系结构基础》课程速看(一)
  • 物联网之Arduino编程语言、条件语句、循环语句、变量、数组、函数
  • Web前端之页面可见性与元素重叠、懒加载、显示、隐藏、交叉、IntersectionObserver、visibilitychange
  • 怎么一步步实现小米智能家居之玄关篇
  • 探索PQ控制三相并网逆变器:从理论到仿真
  • 蓝桥杯嵌入式(STM32G431RBT6)入门第二天——建立自己的初始化文件|CSDN创作打卡
  • 服务端之NestJS中获取完整请求Host的四种封装方式及应用场景、Service与拦截器对比、工具函数、装饰器
  • SAP HANA SQLScript 性能定位的起手式:用支持性工具锁定主导语句与主导算子
  • Cadence
  • 蓝桥杯嵌入式(STM32G431RBT6)入门第一天——点亮LED|CSDN创作打卡
  • Web前端之监听元素的重叠度、设置所有元素的滚动条宽度都为0、节点布局的交叉状态、生成随机图片、阮一峰、标签、IntersectionObserver
  • 【解决】Ping 不是内部或外部命令,也不是可运行的程序或批处理文件
  • Python相关问题
  • 算法---LeetCode 剑指 Offer 26. 树的子结构
  • Web前端之上传文件夹、webkitdirectory
  • 通俗易懂解释知识图谱(Knowledge Graph)
  • Web前端之实现酷炫的仪表进度条、JavaScript动态设置Css属性值、标签元素属性选择器、hsl样式函数
  • 优先队列(priority_queue)总结
  • Web前端之实现累计功能、原生与UniApp版微信小程序两种方式实现、计算、累加、getElementById、innerHTML、Number
  • 在 SAP Kyma 上使用 Redis 服务
  • Web前端之鼠标悬浮,鼠标移入和鼠标移出、getElementById、onmouseover、onmouseout、mouseenter、mouseleave、hover
  • 读懂 Cost-Based Optimization:SAP HANA SQL 优化器如何用成本模型选出更快的执行计划