【STM32】利用定时器实现最基本的定时功能(HAL)

2023-05-16

定时器简介

STM32F429单片机有许多定时器Timer,主要分成三类,基本定时器;通用定时器和高级定时器。三种类型的定时器功能由少变多,高级定时器包含了低级定时器的功能。

  • 基本定时器:TIM6、TIM7
  • 通用定时器:TIM2、TIM3、TIM4、TIM5、TIM9~TIM14
  • 高级定时器:TIM1,TIM8
    在这里插入图片描述

注:图中的接口接口时钟就是总线时钟。

定时器最基本的功能就是定时,三种类型的定时器都包含定时功能,今天只讲述如何利用HAL库方法实现利用定时功能点亮LED灯。

定时功能主要有三种方式:

  • 递增计数:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件
  • 递减计数:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
  • 递增/减计数:计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

此处引用Z小旋的图片:

在这里插入图片描述

定时时间计算公式为:

在这里插入图片描述

arr为计数值,psc为定时器分频系数,Tclk一般设定为最大工作频率,其中psc和arr可以自己设定,tclk为定时器时钟,也就是第一个图的最后一列。

举个栗子:

以stm32f429为例,假如想利用TIM2定时500ms,TIM2位于APB2总线上,其定时器时钟为90Mhz,为了方便计算,psc一般设定为Tclk*100-1,也就是8999,这样arr的设定值为定时时间*10-1,也就是499,单位为ms。

假如使用103单片机,定时100ms,那么arr=999(1000-1),psc=7199(7200-1),tclk=72M。注意单位Tout为ms,tclk为Mhz

利用定时器点亮LED

  1. 打开stm32Cubemx,创建新工程,芯片型号选择STM32F429IG

  2. 配置RCC为外部高速时钟(HSE)。
    在这里插入图片描述

  3. 配置定时器TIM2,选择时钟源为内部时钟,配置计数方式,arr和psc以及是否重装载,并使能中断。

在这里插入图片描述

在这里插入图片描述

Clock Source:选择时钟源(Internal Source)

Prescaler:PSC定时器分频系数 (17999 )

Counter Mode:计数模式( UP:递增计数)

Counter Period:自动重装载值(4999)

auto-reload preload:是否开启重装载(Enable)

只需设置上述四个选项即可,其余设置和本程序无关,保持默认即可。

  1. 设置时钟树
    在这里插入图片描述

选择外部时钟HSE 8MHz
PLL锁相环倍频180倍
系统时钟来源选择为PLL
设置APB1分频器为 /2
这时候定时器的时钟频率为90Mhz

  1. 配置GPIO口
    我的板子LED连接的端口是PF6,找到PF6,并设置output模式
    在这里插入图片描述
    配置GPIO口的相关参数
    在这里插入图片描述

设置输出电平,参照自己板子的电路图,我的是低电平点亮
设置输出模式
设置上/下拉
设置输出速度
设置用户标签

  1. 生成程序
    在这里插入图片描述
    设置工程名称
    设置路径
    选择编译器
    设置库函数版本

在这里插入图片描述

其余设置保持默认
点击GENERATE CODE生成代码

  1. 开启TIM2中断

在这里插入图片描述
HAL_TIM_Base_Start函数在stm32f4xx_hal_tim.h文件中

  1. 在TIM.c中添加中断回调函数
 /* Includes ------------------------------------------------------------------*/
#include "tim.h"

/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim == (&htim2))
	HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_6);
}

/* USER CODE END 0 */

大功告成

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32】利用定时器实现最基本的定时功能(HAL) 的相关文章

随机推荐

  • C++开发精髓 阅读笔记

    第三章 pstack的使用 将C 43 43 类对象实例指针作为线程函数的参数 bind函数 span class token keyword auto span newCallable span class token operator
  • js逆向工具-油猴Tampermonkey脚本hook案例

    目录 一 油猴下载与安装二 油猴脚本免费使用网站三 油猴脚本编写介绍1 添加新脚本2 油猴脚本注释内容解释3 编写油猴脚本的基本步骤4 油猴脚本调试测试 四 hook之js逆向案例1 hook之window属性案例2 hook之cookie
  • js逆向案例-rus4逻辑学习

    目录 一 RS4特点二 网站请求流程特点三 网站加载js的顺序四 正式逻辑的研究1 cookie如何定位 xff1f 2 扣函数缺啥补啥注意事项 xff1f 3 如何获取 96 ts动态变量 96 值 xff1f 4 如何定位 96 MmE
  • js逆向案例-初学signature

    一 反爬点 案例网址 xff0c 向下滚动加载页面时的请求参数反爬signature xff0c 明显的特征 xff1a acrawler js以及window jsvmprt 34 二 反爬分析 参考文章1 xff0c 参考文章2 xff
  • Android逆向基础入门

    目录 一 基础App数据抓取1 App常用抓包工具2 fiddler抓包工具3 mitmdump抓包工具4 charles抓包工具5 uiautomatorviewer appium自动化工具6 Airtest自动化工具 二 js逆向与ap
  • 自动化测试工具-Airtest

    目录 一 Airtest介绍与安装二 Airtest基于图像识别自动控制手机App流程三 Airtest基于Poco的UI组件自动化控制App流程四 Airtest实现手机群控操作 一 Airtest介绍与安装 主要介绍区别 xff0c 以
  • Docker桌面版安装与使用(windows)

    目录 一 Docker概念二 下载安装三 docker镜像安装与操作四 制作自己的python镜像容器五 目录挂载六 多容器通信七 Docker Compose管理多个容器运行八 发布和部署九 备份数据迁移 一 Docker概念 1 Doc
  • Gradio 机器学习和数据科学开源 Python 库

    Gradio是一个开源的 Python 库 xff0c MIT的开源项目 xff0c 用于构建机器学习和数据科学演示和 Web 应用 Gradio的定位类似于Streamlit xff0c 但是更轻量 xff0c 因为它推荐的应用场景都是对
  • k8s安装

    目录 一 K8s概念二 minikube安装三 部署应用到集群中四 Service五 k8s部署爬虫1 意义 一 K8s概念 参考文章 xff0c 参考视频它是一个为 容器化 应用提供集群部署和管理的开源工具 xff0c 由 Google
  • 编程工具-GPT来AI编程代码

    一 安装介绍 1 https www cursor so 下载安装 xff0c 重要的说三遍 xff08 目前免费 xff01 免费 xff01 免费 xff01 xff09 xff0c 支持多平台 Mac Windows Linux xf
  • 某wipo专利_六宫格/cookie/css

    这里写目录标题 一 案例分析二 六宫格验证码三 列表页搜索式302四 详情页css链接cookie刷新 一 案例分析 案例网址 xff1a 案例网址 反爬点 xff1a 六宫格验证码 cookie反爬 时间强制等待 session数据强绑定
  • Python之urlencode()使用

    urlencode 传入参数类型 xff1a 字典功能 xff1a 将存入的字典参数编码为URL查询字符串 xff0c 即转换成以key1 61 value1 amp key2 61 value2的形式导入 xff1a from urlli
  • Python之Md5使用等加密

    目录 一 Python之md5使用二 Python之sha1使用三 Python之base64使用四 Python之rsa使用五 Python之aes des 一 Python之md5使用 功能 xff1a MD5签名是一个哈希函数 xff
  • Python之quote()使用

    quote 传入参数类型 xff1a 字符串功能 xff1a 将单个字符串编码转化为 xx 的形式导入 xff1a from urllib parse import quotePs xff1a url多个字符串编码用urlenocde 函数
  • ( 数组和矩阵) 645. 错误的集合 ——【Leetcode每日一题】

    645 错误的集合 难度 xff1a 简单 集合 s 包含从 1 到 n 的整数 不幸的是 xff0c 因为数据错误 xff0c 导致集合里面某一个数字复制了成了集合里面的另外一个数字的值 xff0c 导致集合 丢失了一个数字 并且 有一个
  • Kalman滤波(Part-1:信号模型基础)

    Kalman Filters Dynamical Signal Models 一阶高斯 马尔可夫过程 first order Gauss Markov process 描述采样点之间 xff08 相邻 xff09 的相关性 xff1a s
  • 【STM32】关于keil5中下载按钮灰色及出现#error “Please select first the target STM32F4xx devic....错误的解决方法

    解决首次运行报错问题 近期在网上购买了一个WIFI模组 xff0c 例程是使用HAL库编写的 xff0c 首次编译的时候出现USER stm32f4xx h 193 error 35 error directive 34 Please se
  • 【STM32】F429单片机的时钟系统浅析

    先把429的时钟树附上 xff1a 乍一看是不是很懵逼 xff0c 我也很懵逼 一堆乱七八糟的玩意 xff0c ST公司是真的狗 本文是基于库函数SetSysClock 展开的 xff0c 配合该函数使用时钟树效果更佳O O 讲解之间说一个
  • x-easypdf 基于pdfbox/fop 封装的框架

    x easypdf 是一个基于 pdfbox fop 二次封装的框架 xff0c 目前拥有两大模块 xff1a pdfbox 模块 与 fop 模块 pdfbox 模块 主打 pdf 编辑功能 xff0c 以组件化的形式进行 pdf 的构建
  • 【STM32】利用定时器实现最基本的定时功能(HAL)

    定时器简介 STM32F429单片机有许多定时器Timer xff0c 主要分成三类 xff0c 基本定时器 xff1b 通用定时器和高级定时器 三种类型的定时器功能由少变多 xff0c 高级定时器包含了低级定时器的功能 基本定时器 xff