keysking 【stm32】hal库学习笔记--定时器(超详细!)

这篇具有很好参考价值的文章主要介绍了keysking 【stm32】hal库学习笔记--定时器(超详细!)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

stm32hal库–定时器

任务一:串口发送计数器的值

一.Cube MX配置

1.打开串口2及其中断,用于发送数据stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记
2.将高速外部时钟源设置为晶振,提高定时精度
stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记

3.将HCLK改为72MHz
stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记
4.开启定时器
TIM4–勾选 Internal Clock(内部时钟)/
TIM2–将Clock Source选择为Internal Clock
5.设置预分频器
Prescaler–n(想要实现的分频)-1
Counter Period(自动重装载寄存器)m-1
[即每数到m次计数器清零)
stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记

二.代码部分

  • 定时器启动函数 HAL_TIM_Base_Start
    (接收tim4句柄的指针)
    1.启动定时器
    Base定时器基本用法 调用此函数后TIM4开始计时工作
    2.打印计数器的计数值
    定义counter存储计数器的值
    定义char数组message用以拼接字符串

  • 宏定义-获取计数器值函数__HAL_TIM_GET_COUNTER(参数为htim4的指针)
    tips:hal库中宏定义函数比较偏底层,倾向于直接对寄存器进行操作
    3.循环中
    (1) 使用counter变量接受获取到的计数器值
    (2) 使用sprintf进行字符串拼接
    (用于储存字符串的message变量,
    (3) 想用串口发出的字符串"counter:%d",counter);

  • 串口中断发送函数 HAL_UART_Transmit_IT
    (用来发送的串口的指针,要发送数据的指针,发送数据的长度)
    (4) 防止发送过快 HAL_Delay
    tips:HAL_Delay函数精确延时 每次延时都比填入数字多1ms
    (5)sprintf–头文件stdio
    strlen–头文件string
    stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记

/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */
...
 /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim4);
int counter=0;
char message[20];
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  counter=__HAL_TIM_GET_COUNTER(&htim4);
	  sprintf(message,"counter: %d",counter);
	  HAL_UART_Transmit_IT(&huart2,(uint8_t*)message,strlen(message));
	  HAL_Delay(99);
    /* USER CODE END WHILE */

三.实现效果

tips:开始时按KRST键(reset复位按钮)
从0开始计数 每100毫秒数1000个数
到10000个数(即9999)时计数器清零

函数补充

  • __HAL_TIM_GET_COUNTER 获取计数器的值
  • HAL_TIM_SET_COUNTER 用于设置计数器的值
  • HAL_TIM_GET_AUTORELOAD 获取重装载寄存器的值
  • HAL_TIM_SET_AUTIRELOAD 设置重装载寄存器的值
  • HAL_TIM_SET_PRESCALER 设置预分频器的值

任务二:定时

一.Cube MX配置

stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记

二.代码部分

1.启动定时器(+_IT 使其清零时触发更新中断)
stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记

  • HAL_TIM_Base_Start_IT
    2.重写中断回调函数
    1.找到中断回调函数stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记
  • HAL_TIM_PeriodElapsedCallback 中断回调函数
    stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记
/* USER CODE BEGIN 0 */
char data[]="😊😍😘😉";
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	if(htim==&htim4){
		HAL_UART_Transmit_IT(&huart2,(uint8_t*)data,strlen(data));
	}
}
/* USER CODE END 0 */

tips:Transmi_IT是非阻塞发送,若中断中的Transmi_IT和while循环中的Transmit_IT发送间隔太小,会导致上次的数据没发完就被下次发送的数据覆盖
所以这里要注释掉while循环中的发送

三.实现效果

stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记
每隔1ms发送数据

补充

  • 预分频器和重装载寄存器都存在影子寄存器,重装载寄存器的影子寄存器可手动调整是否开启

stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记
开启重装载寄存器的影子寄存器,使新设置的清零值等到下个周期生效,防止更改数值后错过
Core:定时器就是计数器
原理部分后续补充…
stm32 hal 定时器单次,stm32学习笔记,stm32,学习,笔记文章来源地址https://www.toymoban.com/news/detail-788565.html

到了这里,关于keysking 【stm32】hal库学习笔记--定时器(超详细!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 HAL库 Timer(定时器)+DMA输出PWM底层配置过程学习

    本文使用的芯片型号是STM32G030,写本文的目前是想记录学习下Timer借助DMA生成可变占空比PWM时的底层配置过程。 使用TIM1,配置就只改了图上的配置,系统时钟用的16M,分频选择15(16-1),自动重装载寄存器ARR选择999(1000-1),那么生成的就是1kHz的PWM,这里为什么要减1,因为这俩是

    2024年04月09日
    浏览(63)
  • STM32 HAL库 CubeMX配置 定时器学习 F103C8T6

    开发板: STM32F103C8T6最小系统板 编译环境: Keil5 MDK 辅助软件: STM32 CubeMX 课程教学: 基于正点原子HAL库学习教程 其余配件: 江科大STM32配件包 和 示波器一台 备注:  因为这块开发板没有基本定时器,所以本文也 没有基本定时器的内容             本文1.3和2.1部分的

    2024年04月26日
    浏览(44)
  • 【STM32】学习笔记(TIM定时器)

    定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发

    2024年02月09日
    浏览(43)
  • 基于STM32的定时器--定时中断(HAL库)

    本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时

    2024年02月14日
    浏览(58)
  • stm32学习笔记-6TIM定时器

    注:笔记主要参考B站 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。 注:工程及代码文件放在了本人的Github仓库。 定时器是STM32中功能最强大、结构最复杂的一个外设。定时器将包括四部分8小节: 第一部分主要讲定时器基本定时的功能,也就是指定一个时间,让

    2024年02月15日
    浏览(57)
  • STM32 HAL库-定时器中断

    关闭或开启所有中断;代码如下: STM32F407 有众多的定时器,其中包括 2 个基本定时器(TIM6 和 TIM7)、10 个通用定时 器(TIM2 ~ TIM5、TIM9 ~TIM14)、2 个高级控制定时器(TIM1 和 TIM8),这些定时器彼此完 全独立,不共享任何资源。 选择定时器,配置时钟源,设置预分频系数,计

    2024年01月25日
    浏览(65)
  • 正点原子--STM32基本定时器学习笔记(1)

    目录 1. 定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 定时器分类 1.4 定时器特性表 1.5 基本、通用、高级定时器的功能整体区别 2. 基本定时器简介 3. 基本定时器框图 时钟树分析 这部分是笔者对基本定时器的理论知识进行学习与总结!主要记录学习过程中遇到的重难点

    2024年02月19日
    浏览(58)
  • 【STM32】学习笔记(TIM定时器)-江科大

    定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发

    2024年02月10日
    浏览(53)
  • (四) timer+pit(定时器中断)+encoder(编码器)-逐飞TC264库学习(对比STM32 HAL库)

    PIT , 是programmable interval timer 可编程间隔定时器 DSC中的器件 的缩写,所以就是定时器中断,有点像32里的timer(TIMx) 目前看来一共能用通道的有四个 typedef enum // 枚举通道号 {     CCU60_CH0,     CCU60_CH1,     CCU61_CH0,     CCU61_CH1, }pit_index_enum; 因为涉及到中断,为方便设定中断优

    2024年03月15日
    浏览(83)
  • # HAL库STM32常用外设教程(四)—— 定时器 基本定时

    1、STM32F407ZGT6 2、STM32CubeMx软件 3、keil5 内容简述: 通篇文章将涉及以下内容,如有错误,欢迎指出 : 1、基础定时器特性 2、基础定时器的结构和功能 3、基础定时器HAL库驱动程序 (1)CubeMx配置 (2)TIM驱动程序   STM32F407有2个高级控制定时器(TIM1、TIM8)、8个通用定时器和

    2024年02月02日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包