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

STM32基本定时功能

    1、定时器就是计数器。
    2、怎么计数?
    3、我们需要有一恒定频率的方波信号,再加上一个寄存器。
    4、比如每来一个上升沿信号,寄存器值加1,就可以完成计数。
    5、假设方波频率是100Hz,也就是1秒100个脉冲。那寄存器值到达100时,我们就知道时间过去了1秒钟。
好,好,好,非常好。

1、基本定时器

    1、对于STM32F103来说,使用外部晶振,基本定时器的最高频率可以达到72MHz。也就是1秒钟72*1 000 000次。
    2、计数器是一个16bit的数据。最大为65536。65536 ÷ 72 000 000 = 0.0009秒。即最多只能定时器0.0009秒,显示不太合适。所以:

1.1、预分频器

    1、预分频器就诞生了。它的作用是可以将定时器的频率进行分频。
    2、比如:预分频器(Prescaler)设置为1,则是二分频,36MHz。 Prescaler设置为2,则是三分频,24MHz。
    3、预分频器也是一个16bit的数据,最大设置为65535分频。

1.2、自动重装载值

    1、其作用是当计数器计到与自己相同值时,便将计数器的值重置为0。
    2、如果想定时m个脉冲 ,就需要设置自动重装载值为m-1(因为计数是从0开始的)。

2、普通计数使用

2.1、相关函数介绍

    一、关于计数器
        ①:获取计数器的值

__HAL_TIM_GET_COUNTER(&htim2);

        ②:设置计数器的值

__HAL_TIM_SET_COUNTER(&htim2);

    二、关于自动重装载值
        ①:获取自动重装载值

__HAL_TIM_GET_AUTORELOAD();

        ①:设置自动重装载值

__HAL_TIM_SET_AUTORELOAD();

    三、关于预分频器
        ①:设置预分频器值

__HAL_TIM_SET_PRESCALER();

    四、开启定时器

HAL_TIM_Base_Start();

2.2、配置

    1、这里配置定时器2,这里选择内部时钟,预分频器设置为7200-1,即7200分频,分频后频率为10000Hz,就是一秒计数10000次。
    2、自动重装载值设置为10000-1。即每计时1秒,计数器值就会达到10000-1,然后清0。
    3、cubeide配置如下:
在这里插入图片描述

2.3、代码

HAL_TIM_Base_Start(&htim2);
while (1)
{/* USER CODE END WHILE *//* USER CODE BEGIN 3 */counter = __HAL_TIM_GET_COUNTER(&htim2);sprintf(message,"counter %d\r\n",counter);HAL_UART_Transmit_IT(&huart1, (uint8_t *)message, strlen(message));HAL_Delay(99);
}

2.4、效果

在这里插入图片描述

    每隔100ms,计数器加1000。

3、定时器更新中断使用

    1、实现定时器计数,每次到达自动重装之后触发中断,完成一些任务,然后继续计数。

3.1、配置

    2、接着上面的配置增加如下配置;
在这里插入图片描述

3.2、代码

//开启定时器中断
HAL_TIM_Base_Start_IT(&htim2);
//重写定时器中断函数`HAL_TIM_PeriodElapsedCallback`
char data[] = "^_^ ^_^ ^_^ ^_^";
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim == &htim2){HAL_UART_Transmit_DMA(&huart1, (uint8_t *)data, strlen(data));//串口发送数据HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);//led翻转}
}

3.3、效果

在这里插入图片描述

4、框图

    1、万变不离其宗,框图如下
在这里插入图片描述

http://www.lryc.cn/news/317031.html

相关文章:

  • Linux学习:权限
  • 汉诺塔问题代码写法的详细解析
  • Python爬虫入门
  • 【数据结构学习笔记】选择排序
  • 小资金适合做伦敦金的投资吗?
  • 自动化运维工具 ---------------Ansible
  • 富格林:有效做单安全盈利方法
  • 二分查找的理解及应用场景。
  • 共创时代,品牌如何做好UGC营销?
  • 华为三层交换机:ACL的基本实验
  • 基于springboot+vue的旅游管理系统
  • 4. git 添加版本标签
  • 2024 PhpStorm激活,分享几个PhpStorm激活的方案
  • 2419. prufer序列(prufer编码,模板题)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Text)
  • 开源大数据集群部署(十五)Zookeeper集群部署
  • 服务器镜像是什么
  • JWT原理
  • 操作系统:一款纯正的“管理”软件
  • Mac笔记本聚焦SpotLight占用内存太高的 解法
  • C++中.h和.hpp文件有什么区别?
  • MongoDB聚合运算符:$derivative
  • 面试官:如果你现在有20个Spring Boot微服务,如何监视所有这些Spring Boot微服务?
  • 冯诺依曼模型
  • 高低拖延个体的任务决策及执行差异
  • 数据分析Pandas专栏---第十三章<Pandas训练题(初)>
  • Delete `␍`eslint(prettier/prettier) 错误的解决方案
  • 第3周 Python字典、集合刷题
  • 文字校对的首选——爱校对:用户真实反馈汇编
  • Llama-3即将发布:Meta公布其庞大的AI算力集群