STM32通用定时器的应用实例(基于STM32F103)

news2024/11/24 22:35:37

目录

概述

1 STM32Cube配置项目

1.1 准备环境

1.2 配置项目参数

1.3 生成Project

2 HAL函数 

2.1 初始化函数:HAL_TIM_Base_Init

 2.2 中断模式启动定时器函数:HAL_TIM_Base_Start

2.3 定时器回调函数: HAL_TIM_PeriodElapsedCallback

3 应用实例 

3.1 功能描述

3.2 代码实现

3.3.1 初始化定时器

3.3.2 回调函数

4 验证

4.1 验证方法

4.2 测试代码实现

4.3 测试功能


概述

本文主要讲述STM32F103系列芯片通用定时器的使用方法,通用定时器仅仅只能实现定时功能,笔者使用STM32Cube工具,快速实现和定时器相关的功能代码,然后编写回调函数,以测试定时器功能的精确度。采用逻辑分析仪捕捉波形验证了其准确度。

1 STM32Cube配置项目

1.1 准备环境

软件名称版本信息
STM32CubeSTM32CubeMX 6.11
STM32 HALSTM32Cube_FW_F1_V1.8.5

1.2 配置项目参数

1)配置时钟参数

STM32F103系列芯片最高工作频率为72M Hz, 配置时钟频率时选择外部晶振,HCLK配置值最高工作频率(72M Hz),定时器的系统频率APB1也配置为72M Hz。

2) 配置定时器的相关参数

笔者选择通用定时器TIM7,具体参数配置如下:

参数名称参数值描述
Prescaler71系统频率为72M Hz,Prescaler=71,定时器的工作主频为1M Hz
Counter ModeUp选择增计数模式
Counter Period999定时器产生中断间隔为1ms
auto-reloadEnable使能计数周期重载

 3)使能中断项

1.3 生成Project

在完成项目配置后,进行项目相关的配置

点击GENERATE生成项目文件,打开工程后,可以看见如下内容:

2 HAL函数 

2.1 初始化函数:HAL_TIM_Base_Init

函数原型:

HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);

功能描述:

根据TIM_HandleTypeDef中指定的参数初始化TIM时间基单位,并初始化相关句柄

 2.2 中断模式启动定时器函数:HAL_TIM_Base_Start

函数原型:

HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);

功能描述:

启动TIM Base

2.3 定时器回调函数: HAL_TIM_PeriodElapsedCallback

函数原型:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

功能描述:

在非阻塞模式下经过的周期回调

3 应用实例 

3.1 功能描述

使用TIM7定时器实现1ms的定时,基于中断模式,产生定时中断后,在回调函数中实现USR功能。

3.2 代码实现

3.3.1 初始化定时器

这个函数的大部分代码是由STM32Cube自动生成的,user只需添加如下源码:

  /* USER CODE BEGIN TIM7_Init 2 */
  HAL_TIM_Base_Start_IT(&htim7);
  /* USER CODE END TIM7_Init 2 */

用于启动定时器,此时整个定时器的初始化和启动已经全部完成 

 3.3.2 回调函数

在STM32F103对应的HAL库中,回调函数HAL_TIM_PeriodElapsedCallback被定义为一个__weak类型的函数,程序员只需重写此函数实现相关的功能。

笔者重写该函数具体代码如下:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */
   static int count = 0;
    
  /* USER CODE END Callback 0 */
  if (htim->Instance == TIM6) {
    HAL_IncTick();
  }
  /* USER CODE BEGIN Callback 1 */
  if (htim->Instance == TIM7) {
      
  }
  /* USER CODE END Callback 1 */
}

4 验证

4.1 验证方法

为了便于测试定时器功能,笔者定义了一个IO,每当定时器中断发生时,这个IO的输出电平会发生翻转。然后使用逻辑分析仪捕捉该波形,就能测试定时器的频率。

4.2 测试代码实现

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */
   static int count = 0;
    

  /* USER CODE END Callback 0 */
  if (htim->Instance == TIM6) {
    HAL_IncTick();
    if( (count %1000) == 0)
    {
      HAL_GPIO_TogglePin( STATUS_LED_GPIO_Port, STATUS_LED_Pin);
    }
    count++;
  }
  /* USER CODE BEGIN Callback 1 */
  if (htim->Instance == TIM7) {
      HAL_GPIO_TogglePin( TEST_PIN_GPIO_Port, TEST_PIN_Pin);
  }
  /* USER CODE END Callback 1 */
}

4.3 测试功能

编译代码,然后下载到板卡中,测试波形,观察波形可得,中断周期为1 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1690741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息系统项目管理师0128:输出(8项目整合管理—8.6管理项目知识—8.6.3输出)

点击查看专栏目录 文章目录 8.6.3 输出 8.6.3 输出 经验教训登记册 经验教训登记册可以包含执行情况的类别和详细的描述,还可包括与执行情况相关的影响、建议和行动方案。经验教训登记册可以记录遇到的挑战、问题、意识到的风险和机会以及其他适用的内容。经验教训…

「云渲染课堂」3dmax地砖材质参数怎么让画面更加真实?

在3DMAX中,地砖材质的渲染需要细致的调整,因为不同材质的地砖在反射和折射参数上各不相同。为了使地砖材质更加逼真,以下简要说明了一些设置方法,希望对大家有所帮助! 3dmax地砖材质参数如何设置 1、打开材质编辑器&a…

C语言指针指针和数组笔试题(必看)

前言: 前面介绍了指针的大体内容,如果接下来能够把这些代码的含义搞得清清楚楚,那么你就是代码king! 一维数组: int a[] {1,2,3,4}; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a0)); pr…

推荐系统学习笔记(三)

swing召回通道 Q:假如重合的用户是一个小圈子:在一个群里,毫无关联的笔记也会被同时交互 solve:降低小圈子权重--------------swing的主要目的------------给用户加权 相似度: a是人工参数,overlap降低小…

基于Python+KNN神经网络手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 手写数字识别是机器学习领域的一个基础问题,也是许多实际应用的基石,如邮政编码识别、银行表…

STM32F1之SPI通信·软件SPI代码编写

目录 1. 简介 2. 硬件电路 移位示意图 3. SPI时序基本单元 3.1 起始条件 3.2 终止条件 3.3 交换一个字节(模式0) 3.4 交换一个字节(模式1) 3.5 交换一个字节(模式2) 3.6 交换一个字节&a…

网络信息安全

目录 引言 网络信息安全的基本概念 定义 主要目标 网络信息安全的范围 主要威胁 恶意软件 黑客攻击 拒绝服务攻击 社交工程 内部威胁 常用技术和防护措施 加密技术 防火墙 入侵检测和防御系统 访问控制 多因素认证 安全审计和监控 安全培训和意识提升 未来发…

panic对defer语句的执行的影响

1.主线程中的panic会直接导致所有正在运行的go协程无法执行,还会导致声明在它之后的defer语句无法执行。 package mainimport ("fmt""time" )func main() {defer fmt.Println("defer1") //声明在panic之前的defer会执行go func() {defer fmt.Pri…

npm介绍、常用命令详解以及什么是全局目录

目录 npm介绍、常用命令详解以及什么是全局目录一、介绍npm的主要功能npm仓库npm的配置npm的版本控制 二、命令1. npm init: 初始化一个新的Node.js项目&#xff0c;创建package.json文件。package.json是一个描述项目信息和依赖关系的文件。2. npm install <package_name&g…

Java入门基础学习笔记42——常用API

API&#xff08;全称&#xff1a;Application Programming Interface&#xff1a;应用程序编程接口&#xff09; 就是Java自己写好的程序&#xff0c;给程序员调用&#xff0c;方便完成一些功能的。 为什么要学别人写好的程序&#xff1f; 不要重复造轮子。 开发效率高。 面…

MySQL主从复制(一):主备一致

MySQL主备的基本原理 如图所示就是基本的主备切换流程&#xff1a; 在状态1中&#xff0c; 客户端的读写都直接访问节点A&#xff0c; 而节点B是A的备库&#xff0c; 只是将A的更新都同步过来&#xff0c; 到本地执行。 这样可以保持节点B和A的数据是相同的。 当需要切换的时候…

基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 已经完成了登录界面和主界面&#xff0c;本篇将完善主界面的管理员录入和编辑功能&#xff0c;事实上管理员录入和编辑的设计套路适用于所有静态表的录入和编辑 首先还是介绍一下…

uniapp中使用mockjs模拟接口测试总结(swiper轮播图示例)

完整总结下在uni-app中如何使用Mock.js模拟接口测试&#xff0c;这在后台接口未就绪的情况下非常有用。同时也给出个首页swiper轮播图的mock接口使用。网上的文章都不太完整&#xff0c;这里总结下完整的使用示例&#xff0c;同时也支持h5和小程序平台&#xff0c;分享给需要的…

基于Arduino的电梯超载报警系统

企鹅&#xff1a;2583550535 项目和论文都有 第1章 绪论.............................................................................................................................. 1 1.1 项目背景及意义........................................................…

【教学类-56-03】数感训练——数字03(寻找自己的学号数字,15-20个)

背景需求&#xff1a; 在实际操作中&#xff0c;孩子们把数字当做了自己的学好&#xff0c;这个提示老师可以给每位孩子做一份“学号数感训练 【教学类-56-02】数感训练——数字02&#xff08;控制指定数字出现的数量&#xff09;-CSDN博客文章浏览阅读341次&#xff0c;点赞…

TypeScript(持续更新中...)

1.TypeScript是什么&#xff1f; TypeScript是javaScript的超集。 2.使用TypeScript 1&#xff09;全局安装nodejs 2&#xff09;安装TypeScript编译器 npm i -g typescript 3.编译ts文件 //注意&#xff1a;需要在ts文件同级目录执行此命令&#xff0c;否则会报找不到…

AI爆文写作:关注热点,提前埋伏好关键词,吃系统的热点推荐,吃搜索流量,让你的文章直接爆了!

做内容&#xff0c;要对热点敏感。 小米汽车的发布会时间&#xff0c;我们是不是提前就知道&#xff0c;发布会前&#xff0c;大家最关注的就是价格。 你看这个相关关键词搜索&#xff0c;10W太多了。 我看到有博主在发布会前&#xff0c;埋伏了一篇&#xff0c;公众号也有推…

FunSound: 基于FunASR-onnx 的高精度离线转写

​ 基于funasr的高精度离线语音转写网页 www.funsound.cn 精度和速度表现不错&#xff0c;提供给大家免费测试 ​

UniApp 2.0可视化开发工具:引领前端开发新纪元

一、引言 在移动互联网迅猛发展的今天&#xff0c;移动应用开发已经成为前端开发的重要方向之一。为了简化移动应用开发流程&#xff0c;提高开发效率&#xff0c;各大开发平台不断推出新的工具和框架。UniApp作为一款跨平台的移动应用开发框架&#xff0c;自诞生以来就备受开…

如何通过软件SPI读写W25Q64

STM32F1之SPI通信软件SPI代码编写-CSDN博客 目录 1. W25Qxx系列简介 2. W25Q64硬件电路 3. W25Q64框图 4. Flash操作注意事项 5. 代码编写 5.1 初始化 5.2 W25Q64读取ID号 5.3 W25Q64写使能 5.4 W25Q64等待忙 5.5 W25Q64页编程 5.6 W25Q64扇区擦除&#x…