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.mzph.cn/news/733990.shtml

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

相关文章

ElasticSearch 模糊查询

前缀搜索 # 前缀搜索 注意: 前缀搜索匹配的是trem,而不是filed,倒排索引的分词 性能比较差,没有缓存 搜索时尽量把前缀词设置长一点 GET /product/_search {"query": {"prefix": {"name": {"value"…

【学习】DLA (Deep Layer Aggregation)

本研究是有由UC Berkeley的Trevor Darrell组发表于2018年CVPR。因为,工作中应用到CenterNet,文章中使用了DLA作为backbone,能够以较高的速度完成推理并维持较高的AP。 DLA文章:论文 DLA 在实际操作中,常常将高级特征…

机器学习-pytorch1(持续更新)

上一节我们学习了机器学习的线性模型和非线性模型的机器学习基础知识,这一节主要将公式变为代码。 代码编写网站:https://colab.research.google.com/drive 学习课程链接:ML 2022 Spring 1、Load Data(读取数据) 这…

比较字符串

给定程序函数fun的功能是&#xff1a;比较两个字符串&#xff0c;将长的那个字符串的首地址作为函数值返回。 #include <stdio.h> /**********found**********/ char* fun(char *s, char *t) {int s10, t10;char *ss, *tt;sss;ttt; while(*ss){s1;/**********found****…

学习Java的第六天

一、变量 1、变量的定义 在程序执行的过程中变量的值会发生变化&#xff0c;直白来说就是用来存储可变化的数据。从本质上讲&#xff0c;变量其实指的是内存中的一小块存储空间&#xff0c;空间位置是确定的&#xff0c;但是里面放置的值不确定。比如屋子里有多个鞋柜&#x…

启发式算法:禁忌搜索 Tabu Search

文章目录 Tabu searchTabu search算法算例-旅行商TSP问题Tabu search 从一个初始可行解出发,选择一系列的特定搜索方向(移动)作为试探,选择实现让特定的目标函数值变化最多的移动。 为了避免陷入局部最优解,TS搜索中采用了一种灵活的“记忆”技术,对已经进行的优化过程进…

2024年目标检测研究进展

YOLOv9 图片来源网络 YOLO相关的研究&#xff1a;https://blog.csdn.net/yunxinan/article/details/103431338

网络安全: Kali Linux 进行 SSH 渗透与防御

目录 一、实验 1.环境 2.nmap扫描目标主机 3.Kali Linux 进行 SSH 渗透 3.Kali Linux 进行 SSH 防御 二、问题 1.SSH有哪些安全配置 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本IP备注Kali Linux2022.4 192.168.204.154&#xff08;动态&…

【软考】单元测试

目录 1. 概念2. 测试内容2.1 说明2.2 模块接口2.3 局部数据结构2.4 重要的执行路径 3. 测试过程2.1 说明2.2 单元测试环境图2.3 驱动模块2.4 桩模块 4. 模块接口测试与局部数据结构测试的区别 1. 概念 1.单元测试也称为模块测试&#xff0c;在模块编写完成且无编译错误后就可以…

使用React Context和Hooks在React Native中共享蓝牙数据

使用React Context和Hooks在React Native中共享蓝牙数据 **背景****实现步骤****步骤 1: 创建并导出bleContext****步骤 2: 在App.tsx中使用bleContext.Provider提供数据****步骤 3: 在父组件和子组件中访问共享的数据** **结论** 在开发React Native应用时&#xff0c;跨组件共…

16.Git从入门到进阶

一.Git 初识 1. 概念&#xff1a; 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 2. 作用&#xff1a; 记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 3. 如何学&#xff1a; 个人本机使用&#xf…

SQL中的不加锁查询 with(nolock)

WITH(NOLOCK) 是一种 SQL Server 中的表提示&#xff08;table hint&#xff09;&#xff0c;可以用来告诉数据库引擎在查询数据时不要加锁&#xff0c;以避免因为锁等待导致查询性能下降。 当多个事务同时访问同一张表时&#xff0c;数据库引擎会对表进行锁定&#xff0c;以确…

数据库中 SQL Hint 是什么?

前言 最近在调研业界其他数据库中 SQL Hint 功能的设计和实现&#xff0c;整体上对 Oracle、Mysql、Postgresql、 Apache Calcite 中的 SQL Hint 的设计和功能都进行了解&#xff0c;这里整理一篇文章来对其进行梳理&#xff0c;一是帮助自己未来回顾&#xff0c;加深自己的思…

Python之Web开发中级教程----搭建Git环境三

Python之Web开发中级教程----搭建Git环境三 多人分布式使用仓库操作实例 场景&#xff1a;开发者A&#xff0c;开发者B在同一个项目协同开发&#xff0c;修改同一个代码文件。开发者A在Win10下&#xff0c;开发者B在Ubuntu下。 1、开发者A修改提交代码 从GitHub: Let’s bu…

44岁「台偶一哥」成现实版「王子变青蛙」,育一子一女成人生赢家

电影《周处除三害》近日热度极高&#xff0c;男主角阮经天被大赞演技出色&#xff0c;最让人意想不到&#xff0c;因为该片在内地票房报捷&#xff0c;很多人走去恭喜另一位台湾男艺人明道&#xff0c;皆因二人出道时外貌神似&#xff0c;至今仍有不少人将两人搞混。 多年过去&…

11.Node.js入门

一.什么是 Node.js Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff0c;因为这个特点&#xff0c;它可以用来编写服务器后端的应用程序 Node.js 作用除了编写后端应用程序&#xff0c;也可以对前端代码进行压缩&#xff0c;转译&#xff0c;…

Linux最小系统安装无法查看IP地址

1&#xff0c;出现原因 服务器重启完成之后&#xff0c;我们可以通过linux的指令 ip addr 来查询Linux系统的IP地址&#xff0c;具体信息如下: 从图中我们可以看到&#xff0c;并没有获取到linux系统的IP地址&#xff0c;这是为什么呢&#xff1f;这是由于启动服务器时未加载网…

《探索虚拟与现实的边界:VR与AR谁更能引领未来?》

引言 在当今数字时代,虚拟现实(VR)和增强现实(AR)技术正以惊人的速度发展,并逐渐渗透到我们的日常生活中。它们正在重新定义人与技术、人与环境之间的关系,同时也为各行各业带来了全新的可能性。然而,究竟是VR还是AR更有潜力改变未来?本文将围绕这一问题展开深入探讨。…

【DevOps基础篇之k8s】如何应用Kubernetes中的Role Based Access Control(RBAC)

【DevOps基础篇之k8s】如何应用Kubernetes中的Role Based Access Control(RBAC) 目录 【DevOps基础篇之k8s】如何应用Kubernetes中的Role Based Access Control(RBAC)背景Kubernetes身份验证和授权基于角色的访问控制(RBAC)用户账户 vs. 服务账户角色 vs. 集群角色RoleBi…

ES6 中的 class 是什么?和函式构造函式差别是什么?

ES6 class JavaScript 在 ECMAScript 6 (ES6) 之前并没有 class 的语法,而是会透过函式构造函式建立物件,并再通过 new 关键字实例。 在 ES6 时引入了 class 的概念,JavaScript class 使用的语法 class 似于其他 OOP 程式语言中的 class,但 JavaScript 的 class 是一种语…