STM32——07-STM32定时器Timer

定时器介绍
软件定时
缺点:不精确、占用 CPU 资源
void Delay500ms () //@11.0592MHz
{
unsigned char i , j , k ;
_nop_ ();
i = 4 ;
j = 129 ;
k = 119 ;
do
{
do
{
while ( -- k );
} while ( -- j );
} while ( -- i );
}
定时器工作原理:
使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器。
定时器分类:
基本定时器( TIM6~TIM7
通用定时器( TIM2~TIM5
高级定时器( TIM1 和TIM8)

STM32F103C8T6定时器资源:

通用定时器介绍:  

 1) 16 位向上、向下、向上/向下自动装载计数器(

TIMx_CNT )。
2 ) 16 位可编程 ( 可以实时修改 ) 预分频器 ( TIMx_PSC ) ,计数器时钟频率的分频系数为 1 65535 之间的
任意数值。
3 4 个独立通道(
TIMx_CH1 ~ 4 ),这些通道可以用来作为:
A .输入捕获
B .输出比较
C PWM 生成 ( 边缘或中间对齐模式 )
D .单脉冲模式输出
4 )可使用外部信号(
TIMx_ETR )控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)
的同步电路。
5 )如下事件发生时产生中断 / DMA
A .更新:计数器向上溢出 / 向下溢出,计数器初始化 ( 通过软件或者内部 / 外部触发 )
B .触发事件 ( 计数器启动、停止、初始化或者由内部 / 外部触发计数 )
C .输入捕获
D .输出比较
E .支持针对定位的增量 ( 正交 ) 编码器和霍尔传感器电路
F .触发输入作为外部时钟或者按周期的电流管理

 定时器计数模式:

定时器时钟源: 

定时器溢出时间计算公式:

例如,要定时500ms,则:PSC=7199ARR=4999Tclk=72M  

定时器中断实验
需求:使用定时器中断方法,每 500ms 翻转一次 LED1 灯状态。
1. RCC 配置
2. LED1 灯配置
3. 时钟数配置
4. TIM2 配置

 

5. 工程配置
6. 重写更新中断回调函数
void HAL_TIM_PeriodElapsedCallback ( TIM_HandleTypeDef * htim )
{
if ( htim -> Instance == TIM2 )
HAL_GPIO_TogglePin ( GPIOB , GPIO_PIN_8 );
}
7. 启动定时器
main.c 中,在定时器初始化命令之后加入以下代码:
HAL_TIM_Base_Start_IT ( & htim2 );
PWM 介绍
STM32F103C8T6 PWM 资源:
高级定时器( TIM1 ): 7
通用定时器( TIM2~TIM4 ):各 4
PWM 输出模式:
PWM 模式 1 :在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
PWM 模式 2 :在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
PWM 实验
需求:使用 PWM 点亮 LED1 实现呼吸灯效果。 LED 灯为什么可以越来越亮,越来越暗?
这是由不同的占空比决定的。
如何计算周期 / 频率?
假如频率为 2kHz ,则: PSC=71 ARR=499
LED1 连接到哪个定时器的哪一路?
学会看产品手册:
开始实战!
1. 设置时钟
2. 设置定时器
记得把极性设置为 Low ,因为 LED 灯是低电平才亮。
3. 配置工程
4. 业务代码
// 定义变量
uint16_t pwmVal=0; //调整PWM占空比
uint8_t dir=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小
// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
while (1)
{
HAL_Delay(1);
if (dir)
pwmVal++;
else
pwmVal--;
if (pwmVal > 500)
dir = 0;
if (pwmVal == 0)
dir =1;
//修改比较值,修改占空比
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/30356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot--关于自定义stater的yml无法提示

1.前言 在以前在搭建架构的时候就碰到了类似的情况&#xff0c;在使用EnableConfigurationProperties注解的时候&#xff0c;不管怎样&#xff0c;在项目中引入了该starter的情况下依然不发自动的提示properties里面的属性。 Data ConfigurationProperties(prefix "pro…

vite vs babel+webpack | 创建一个简单的vite项目打包运行

有babel、webpack这些优秀的框架&#xff0c;为什么使用vite? 因为vite编译快&#xff0c;启动快&#xff0c;使用简单&#xff0c;还自带一个热更新重启的服务器&#xff0c;vite能够自动的帮我打包所用到的依赖&#xff0c;有些依赖只有用到才会导入&#xff0c;不用到不会…

开放式耳机和封闭式耳机的区别?开放式耳机到底有哪些优缺点?

开放式耳机从字面意思可以理解为&#xff1a;开放耳朵&#xff0c;不需要入耳就可以听见声音的耳机&#xff0c;所以它和封闭式耳机的最大区别就是不入耳。这种耳机最大的优点就是不压迫不封闭耳道&#xff0c;而且在听耳机音的同时能够及时注意到周围环境的声音&#xff0c;从…

【图神经网络】5分钟快速了解Open Graph Benchmark

10分钟快速了解Open Graph Benchmark Open Graph Benchmark (OGB)安装OGB简单使用节点分类任务数据集链路预测任务数据集图属性预测任务数据集Large-Scale Graph ML Datasets 内容来源 Open Graph Benchmark (OGB) Open Graph Benchmark&#xff08;OGB&#xff09;是用于图机…

从一个线上 Android Bug 回看 Fragment 的基础知识

作者&#xff1a;Kotlin上海用户组 公司的项目在最近遇到了一个与 Fragment 有关的线上 crash&#xff0c;导致这个问题的根本原因比较复杂&#xff0c;导致修复方案的可选项非常有限&#xff0c;不过这个问题的背景、crash 点&#xff0c;以及修复过程都非常有趣&#xff0c;值…

【RabbitMQ教程】第四章 —— RabbitMQ - 交换机

&#x1f4a7; 【 R a b b i t M Q 教 程 】 第 四 章 — — R a b b i t M Q − 交 换 机 \color{#FF1493}{【RabbitMQ教程】第四章 —— RabbitMQ - 交换机} 【RabbitMQ教程】第四章——RabbitMQ−交换机&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是…

共创开源生态 | 小米肖翔荣获“2023中国开源优秀人物”奖

6月15-16日&#xff0c;以“开源创新 数字化转型 智能化重构”为主题的“第十八届开源中国&#xff65;开源世界高峰论坛”在北京成功召开。小米工程师肖翔凭借其在 Apache 基金会的开源贡献及在操作系统领域内的技术突破&#xff0c;荣获“2023中国开源优秀人物”奖。 Xiaomi …

使用VitePress创建个人网站并部署到GitHub

网站在线预览 参考文档&#xff1a; VitePress 创建 GitHub 远程仓库 克隆远程仓库到本地 git clone gitgithub.com:themusecatcher/front-end-notes.git进入 front-end-notes/ 目录&#xff0c;添加 README.md 并建立分支跟踪 echo "# front-end-notes" >>…

nand flash 介绍

flash名称由来 Flash的擦除操作是以block块为单位的&#xff0c;与此相对应的是其他很多存储设备&#xff0c;是以bit位为最小读取/写入的单位&#xff0c;Flash是一次性地擦除整个块&#xff1a;在发送一个擦除命令后&#xff0c;一次性地将一个block&#xff0c;常见的块的大…

FAQ页面在SaaS产品中的应用

随着云计算和软件即服务&#xff08;SaaS&#xff09;的快速发展&#xff0c;越来越多的企业选择将业务迁移到云端&#xff0c;以更好地管理和运营他们的业务。在这种背景下&#xff0c;SaaS产品的出现成为了企业管理和运营的新趋势。SaaS产品通过云端的方式&#xff0c;为企业…

Godot 4 源码分析 - 命令行参数

粗看Godot 4的源码&#xff0c;稍微调试一下&#xff0c;发现一大堆的命令行参数。在widechar_main中 Error err Main::setup(argv_utf8[0], argc - 1, &argv_utf8[1]); Main::setup中&#xff0c;各命令行参数加入到List<Stirng> args中&#xff0c;并通过OS::get…

腾讯云服务器地域有什么区别?怎么选比较好

腾讯云服务器地域有什么区别&#xff1f;云服务器地域怎么选择&#xff1f;地域是指云服务器所在机房的地理位置&#xff0c;用户距离地域越近网络延迟越低&#xff0c;速度越快&#xff0c;所以地域就近选择即可。广州上海北京等地域网站域名需要备案&#xff0c;中国香港或其…

基于三种机器学习模型的岩爆类型预测及Python实现

写在前面 由于代码较多&#xff0c;本文仅展示部分关键代码&#xff0c;需要代码文件和数据可以留言 然而&#xff0c;由于当时注释不及时&#xff0c;且时间久远&#xff0c;有些细节笔者也记不清了&#xff0c;代码仅供参考 0 引言 岩爆是深部岩土工程施工过程中常见的一种地…

实现Vue3和UE5.2进行通信(Pixel Streaming)

文章目录 1. 从UE5.2到前端页面的通信1.1 编写蓝图脚本1.2 编写前端的响应函数1.3 功能验证 2. 从Vue3到UE5.2的信息发送2.1 UE5.2蓝图的设计2.2 前端发送消息功能的实现2.3 功能验证 3. 参考资源 这篇文章简单讲解一下如何实现vue3和UE5进行数据的通信。 如果有同学还不清楚如…

微服务链路追踪SkyWalking的介绍和部署

skywalking和链路追踪 SkyWalking介绍 首先我们要明白一点&#xff0c;在微服务的架构中&#xff0c;为什么要做链路追踪&#xff1f;解决问题的痛点在哪里&#xff1f;其实无外乎是如下几个问题&#xff1a; 如何将整个调用链路串起来&#xff0c;并能够快速定位问题&#…

通过GPIO子系统编写LED驱动,应用程序控制LED灯亮灭

1、在内核设备树中添加设备信息&#xff1a; LED1的设备树编写需要参考内核的帮助文档&#xff1a; linux-5.10.61/Documentation/devicetree/bindings/gpio 在根节点内部添加led灯设备树节点 :~/linux-5.10.61/arch/arm/boot/dts $ vi stm32mp157a-fsmp1a.dts myled.c #in…

选择排序 - C语言实现

目录 &#x1f970;前言 ✅选择排序 &#x1f95d;基本思想 &#x1f95d;实现逻辑 &#x1f95d;动图演示 复杂度分析 &#x1f60d;代码实现 &#x1f6a9;优化改进-->二元选择排序 &#x1f60d; 改进代码 前言 &#x1f970;在学数据结构的第一节课就知道了数据结…

React 通过一个输入内容加入列表案例熟悉 Hook 基本使用

我们创建一个react项目 在src下创建components文件夹 在下面创建一个index.jsx index.jsx 参考代码如下 import React, { useState } from "react";const useInputValue (initialValue) > {const [value,setValue] useState(initialValue);return {value,onCha…

19-递归的理解、场景

一、递归 &#x1f32d;&#x1f32d;&#x1f32d;在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数 核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 一般来说&#xff0c;递归…

算法刷题-字符串-左旋转字符串

反转个字符串还有这么多用处&#xff1f; 题目&#xff1a;剑指Offer58-II.左旋转字符串 力扣题目链接 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如&#xff0c;输入字符串"abcdefg"和数字2…