首页 > 其他分享 >Stm32H7系列定时中断设置HAL库

Stm32H7系列定时中断设置HAL库

时间:2024-05-30 12:29:30浏览次数:22  
标签:HAL 中断 Time6 Stm32H7 APB1 定时 时钟

Stm32定时中断配置,在我们的日常调试中,想要以一个固定的时钟频率对传感器定时周期采样时往往会直接在main.c函数的While(1)中进行,通过HAL_Delay()来控制采样频率,但是如果多传感器同时采样的话由于HAL_Delay()的方法时效性不是很准确往往会出现一系列的问题,而使用定时中断的话,只需要进入中断并执行该传感器采集数据函数(或其他你想要以固定频率去做一些事情),采集完成后退出中断,所以在这里我们就来学学如何使用【定时中断】。

在这里我使用的是STM32H7系列,打开STM32CubeMX,点击【Time6】将【Activated】打勾✔(这里定时器是在处理器的内部发生作用的所以不需要占用引脚)。

17c853d8d2aa4c35960422746cec36b2.png

然后点击【Clock Configuration】进入时钟配置界面。

31bb06acb8fc4b30820f840d9094e84a.png

这时我们查看手册,keil5中book里打开stm32H7的datasheet手册

6252196e90c141d8872ae12fb418b6c1.png

一直翻找我们可以看到一个概括的连接图,这里我知道了Time6和Time7基本定时器都接在了APB1上。

13ce2e9fb4d14ef090c48b2a68d93742.png

如图可见,基本定时器 Time6、Time7都接在了APB1中,打开STM32CubeMX的时钟界面

d14e27e04e8f46a9a84a6c743aa71caf.png

可见APB1中有两个时钟源。

上面的时钟源为APB1 Peripheral Clocks(MHz)为外设,下面的即为APB1时钟源为75Mhz,

下面就该填写Time6的parameter Setting了

8f5fe7c100e34561a4bd1e6741bda10e.png

如果我想将我的Time6分频为1MHz那么我的分频系数就填写74(这里有盆友会问为什么不是75,而要写74呢?其实是因为初始为0代表不分频,1代表二分频,所以在心里要默认加1位,所以74就代表75分频了)

Counter Period (AutoReload Register - 16 bits value ) 就与我们的定时中断时间关系很大了,这里为啥我要写999呢?

{

因为假设我想把定时中断的周期时间定位1毫秒(1/1000秒)

我的time6时钟周期为1s/1Mhz=(1/10^6)s

(Counter Period)*我的中断周期=我想要的中断周期

 

设:(Counter Period)为x

X*(1/10^6)= 1/1000

解得:    x=1000

又因为同上需要减个一,所以Counter Period的值为999.

}

这里设置好后,我们进入NVIC_Setting(设置定时器中断函数)

c1dbb5b33d294996bea8fd2a22d46481.png

将其勾选。

2cc11bee7e224187b155b401810f3004.png

进入【NVIC】设置中断的优先级,设置抢占优先级为2,响应优先级为0(数值越小优先级越高)。

设置完成后点击重新生成代码。

 

bc6eee47cd7e4250a738af23f74ba041.png

main.c代码中将其进行了初始化,那么如何去使用呢,只需要两部

  1. HAL_TIM_Base_Start_IT(&htim6)
  2. 在main.c函数中添加下面的函数

//Time6定时中断(1毫秒)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

  printf("我是测试定时中断的 \r\n ");

}

注意!!在嵌入式中中断只用在快速响应的事件中,不建议用于执行具体时间,推荐用于做状态同步跟随,比如GPIO的SET/RESET。

 

8d65c7603a0648328cbe93a9f698cc83.png

7e2024ea93c247099e5fab4c16feb0e2.png

 

标签:HAL,中断,Time6,Stm32H7,APB1,定时,时钟
From: https://blog.csdn.net/kirioo/article/details/139320736

相关文章

  • 微信定时群发:提升效率,优化用户体验
    在数字化营销日益重要的今天,微信作为国内最主流的社交工具之一,已成为企业与客户沟通的重要桥梁。微信定时群发功能,作为微信营销的重要工具,不仅能够帮助企业提升工作效率,还能优化用户体验,实现更精准的营销效果。本文将详细介绍微信定时群发的功能、优势及实施策略。一、微信定......
  • linux定时删除历史日志
    在Linux系统中,日志文件是记录系统、应用程序或服务的运行信息、错误消息和警告的重要工具。然而,随着时间的推移,这些日志文件会不断积累,占用大量的磁盘空间。如果不及时清理,可能会导致磁盘空间不足,从而影响系统的正常运行。因此,定时删除历史日志成为了Linux系统管理中不可或缺的......
  • 通过admin配置定时任务
    通过admin配置定时任务安装包pipinstalldjango-celery-beat#使用这个的前提是你已经安装了其他包了pipinstallDjangopipinstallcelerypipinstallredispipinstalleventlet去app中注册INSTALLED_APPS=[ #其他包"django_celery_beat",]屏蔽掉原来......
  • celery定时任务
    注意:不论是定时任务,还是普非定时任务,都需要启动worker,别忘记。(〃>目<)老方法#1配置文件celery.py中不是settings.py中!!!#时区app.conf.timezone='Asia/Shanghai'#是否使用UTCapp.conf.enable_utc=False#任务的定时配置fromdatetimeimporttimedeltafromcel......
  • Spark下的Work目录定时清理
     问题在跑spark任务的时候发现任务不能执行。在查看的时候发现sparkwork节点的/usr/local/spark/work/目录占用了很大空间,导致根目录/满了。原因使用sparkstandalone模式执行任务,没提交一次任务,在每个节点work目录下都会生成一个文件夹,命名规则app-20160614191730-0249。该文......
  • go语言之cron定时任务
    ####版本一定选对goget"github.com/robfig/cron/v3"代码如下:packagemainimport("fmt""github.com/robfig/cron/v3""os""runtime""time")//GetOS返回当前操作系统的字符串表示funcGetOS()......
  • HAL库使用教程——1_点亮LED灯并闪烁
    文章目录前言一、STM32CUBEMX工程配置1.新建工程2.选择单片机型号3.初始化配置--配置烧录程序端口--系统时钟配置--GPIO口配置--时钟树配置4.输出工程选项二、KEIL5代码编写1.LED闪烁总结前言HAL库是STM32系列单片机广泛应用的库函数,一般使用STM32CUBEM......
  • crontab 设置定时任务
    crontab设置定时任务crontab 是Unix和类Unix系统(如Linux)上用于设置定时任务的工具。通过 crontab,你可以定期执行特定的命令或脚本。下面是如何使用 crontab 设置定时任务的步骤:打开crontab编辑器在终端中输入以下命令:crontab -e如果你是第一次使用 cron......
  • 准备电赛——CCSMSP430F5529标准库——定时器定时多少秒以及定时中断的写法
    中断向量TIMERx_A0_VECTOR是CCR0的中断向量    (第一个引脚)TIMERx_A1_VECTOR是TAIV的中断向量#defineTIMER2_A1_VECTOR(43*1u)/*0xFFD6Timer2_A5CC1-4,TA*/#defineTIMER2_A0_VECTOR(44*1u)......
  • mysql定时备份数据库
    一、使用navicat进行自动备份1、选择自动运行;2、创建批处理作业;3、选中需要操作的数据库;4、保存;1、设置任务计划;2、新建触发器;3、选择执行时间;完成这些之后,就可以了。 mysqldump 命令使用mysqldump命令备份数据库mysqldump-uroot-p123456(需要备份的数据库)>E:/%da......