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

STM32F103_LL库+寄存器学习笔记22 - 基础定时器TIM实现1ms周期回调

导言


在这里插入图片描述
如上所示,STM32F103有两个基本定时器TIM6与TIM7,所谓「基本定时器」,即功能最简单的定时器。

项目地址:
github:

  • LL库: https://github.com/q164129345/MCU_Develop/tree/main/stm32f103_ll_library22_Basic_Timer
  • 寄存器方式: https://github.com/q164129345/MCU_Develop/tree/main/stm32f103_reg_library22_Basic_Timer

gitee(国内):

  • LL库: https://gitee.com/wallace89/MCU_Develop/tree/main/stm32f103_ll_library22_Basic_Timer
  • 寄存器方式: https://gitee.com/wallace89/MCU_Develop/tree/main/stm32f103_reg_library22_Basic_Timer

一、LL库


1.1、CubeMX

在这里插入图片描述
如上所示,STM32F103 的定时器时钟频率均为 72 MHz。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2、tim.c

在这里插入图片描述
CubeMX 根据上述配置,自动生成了相应初始化代码。

1.3、main.c

在这里插入图片描述

1.4、stm32f1xx_it.c

在这里插入图片描述

1.5、编译、调试

在这里插入图片描述
在这里插入图片描述
如上所示,串口疯狂打印“Hello,World\n"。

二、寄存器方式


2.1、myTIM6Drive.c

在这里插入图片描述
在这里插入图片描述
如上所示,基于寄存器的实现代码简洁明了。

2.2、编译、调试

在这里插入图片描述
在这里插入图片描述
由此可见,两种实现方式在功能和效果上完全一致。

三、梳理寄存器


3.1、RCC_APB1ENR时钟使能寄存器

在这里插入图片描述

RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // 使能 TIM6 时钟

3.2、TIMx_PSC预分配寄存器

在这里插入图片描述

TIM6->PSC = 71;      /* PSC 寄存器:计数时钟 = PCLK1/(PSC+1) */

3.3、TIMx_ARR自动重载寄存器

在这里插入图片描述

TIM6->ARR = 999;     /* ARR 寄存器:计数到 ARR 后产生更新事件 */

3.4、TIMx_CR1控制寄存器1

在这里插入图片描述

TIM6->CR1 |= TIM_CR1_ARPE; /* 3. 使能 ARR 预装载 */TIM6->CR1 |= TIM_CR1_CEN;  /* 4. 启动定时器 */

3.5、TIMx_SR状态寄存器

在这里插入图片描述

TIM6->SR &= ~TIM_SR_UIF; /* 1. 清除更新中断标志 */

在中断回调函数中,遇到 UIF 更新中断时,需要及时将其标志位清零。
TIM_SR_UIF 定义为 0x0001(即 bit-0)。所以,~TIM_SR_UIF 等于 0xFFFE。把 UIF 位对应的位置为 0,其它位为 1。最终,SR &= 0xFFFE 就是“给 UIF 写 0,给其它位写 1”——符合“写 0 清”语义。

3.6、TIMx_DIER中断使能寄存器

在这里插入图片描述
如上所示,将 DIER 寄存器的 UIE 位置 1,可使能 TIMx 的更新中断(计数溢出)。

TIM6->DIER |= TIM_DIER_UIE; // 使能更新中断
http://www.lryc.cn/news/2380017.html

相关文章:

  • 5个yyds的.Net商城开源项目
  • C++:与7无关的数
  • [项目深挖]仿muduo库的并发服务器的解析与优化方案
  • c语言与python的异同之处
  • 国标GB28181视频平台EasyGBS校园监控方案:多场景应用筑牢安全防线,提升管理效能
  • 【视频】解决FFmpeg将RTSP转RTMP流时,出现的卡死、出错等问题
  • SHIMADZU岛津 R300RC300 Operation Manual
  • 使用 Docker 部署 React + Nginx 应用教程
  • 我创建了MariaDb数据库,但其他电脑访问不到?
  • API Gateway REST API 集成 S3 服务自定义 404 页面
  • 关于systemverilog中在task中使用force语句的注意事项
  • Python Day26 学习
  • 解决:npm install报错,reason: certificate has expired
  • 卸载云枢(MacOS 版)
  • 中科固源Wisdom平台发现NASA核心飞行控制系统(cFS)通信协议健壮性缺陷!
  • Linux内核深入学习(4)——内核常见的数据结构2——红黑树
  • 从单体架构到微服务:架构演进之路
  • 嵌入式学习笔记DAY23(树,哈希表)
  • leetcode239 滑动窗口最大值deque方式
  • 仓颉开发语言入门教程:搭建开发环境
  • Axure中继器高保真交互原型的核心元件
  • 【SpringBoot】✈️整合飞书群机器人发送消息
  • 第 1 章:数字 I/O 与串口通信(GPIO UART)
  • 【图像生成大模型】Wan2.1:下一代开源大规模视频生成模型
  • java配置webSocket、前端使用uniapp连接
  • interface接口和defer场景分析
  • 02、基础入门-Spring生态圈
  • 前后端交互中的绝对路径和相对路径
  • 从零开始学习three.js(18):一文详解three.js中的着色器Shader
  • 调用百度云API机器翻译