基于HAL库的stm32中定时器的使用--定时器中断每隔一秒进行led灯的闪烁以及定时器生成PWM

一:什么是定时器

        (1)stm32定时器,是存在于stm32单片机中的一个外设。stm32共有八个定时器,两个高级定时器(TIM1、TIM8),四个通用定时器(TIM2、TIM3、TIM4、TIM5)和两个基本定时器(TIM6、TIM7)

        (2)三种定时器都是16位定时器,都有向上、向下、向上/向下计数三种模式,都可以产生DMA请求。高级定时器和通用定时器具有捕获/比较通道,而基本定时器没有。高级定时器有互补输出,而通用定时器和基本定时器没有

二:使用stm32cubemx配置定时器以及LED灯对于的引脚

        (1)打开stm32cubemx

                

        (2)点击 选择MCU选择器选项

        (3)选择单片机型号

                 

        (4)配置调试接口

                

        (5) 时钟源选择外部晶振(如果没有外部晶振则不需要选择)

                

        (6) 修改时钟频率为最大72MHz

                

        (7) 选择TIM1定时器并对其进行配置

         配置定时时间为1s:原始时钟为72MHz,预分频设置为7200,则time时钟:72MHz/7200=10kHz。需要定时1s则计数值为1s/(1/10k) = 10000 

         (8)设置定时器中断

                

        (9) 选择led对应的引脚(根据开发板连接led灯的引脚进行选择),设置为推挽输出

         

        (10) 设置中断抢占优先级(根据实际情况设置)

         (11)设置工程名、工程存放路径、工程生成project的环境ide、ide版本,生成工程并打开

                

        

三:使用定时器中断实现每隔一秒led灯闪烁

        (1)打开keil工程,进行编译

        (2)烧录算法的一些设置

         

        (3)调用函数使能定时器中断和开启定时计数器

                

        (4)重载回调函数,并设置每进行一次中断时翻转led灯电平完成闪烁操作

        (5) 编译程序并进行烧写进入单片机,即可看到现象led灯每隔1s进行闪烁

四:定时器产生PWM的一些概念

        (1)什么是PWM:PWM简称脉冲宽度调制,即在一个周期内存在不同的电平极性

        (2)PWM频率:是指一秒钟内高电平到低电平时间,再从高电平跳到低电平的瞬间次数,也就是一秒钟内有多少个PWM的周期

        (3)PWM频率设置为20kHz:启用外部晶振时钟为72MHz,定时器预分频72则定时器时钟为72000000/72=100000  1us  -> 1/100000 s   

        (4)计数值 = t / 时钟 = 1/20000 / 1/1000000 = 1000000 / 20000 = 50

五:stm32cubemx配置stm32TIM1定时器生成PWM

        (1)打开stm32cubemx->选择mcu选择器选项->选择单片机型号->配置调试接口->使能外部晶振

               详细过程参考第二部分 

       (2)配置TIM1定时器生成PWM的相关设置

                1 :选择TIM1,使用内部时钟源,选择通道1生成PWM(对于PA8引脚)

        

                2:TIM1定时器设置,预分频72,向上计数,计数值为50,开启预载

        3:设置PWM的模式,占空比,使能输出比较预载

        4:完成定时器PWM设置,进行生成项目工程并打开操作

                

        5:keil工程进行编译,main函数内调用启用PWM生成函数,输入形参:句柄、生成的PWM通道

        

         

        6:编译,下载,用示波器可以验证查看脉冲 ,也可以将对应引脚连接无源蜂鸣器再进行烧录,验证是否响起

               

         

              

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

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

相关文章

docker 指定根目录 迁移根目录

docker 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题3.1.0、方法思路3.1.1、docker官网安装文档3.1.2、下载docker安装包3.1.3、安装doc…

贪吃蛇(下)游戏的实现

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.蛇和食物的打印二.游戏的运行逻辑三.结束游戏 (善后工作)四.游戏的测…

找出两个数的最小公倍数和最大公约数

1 问题 已知两个数,用代码写出程序,求两个数的最小公倍数和最大公约数? 2 方法 利用Python自定义函数解决 代码清单 1 #Made by Txd,Hsy,Lyhdef calculation(x,y):#自定义一个函数 common_multiplemin(x,y)#找出两个数最小的那个数 for i in rang…

【数据结构和算法】--RangeSet时间范围管理示例

目录 一、问题二、RangeSet实现原理2.1、RangeSet常用方法2.2、核心原理2.3、核心特性2.4、基本使用 三、具体应用 一、问题 最近项目要求对一批时间范围进行管理,要求不能交叉。RangeSet是专门用于高效处理范围集合。 二、RangeSet实现原理 RangeSet表示一组不重…

C语言中字符串输入的3种方式

Ⅰ gets() 函数 gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间 # include <stdio.h> int main(void) {char a[256] {0};gets(a);printf("%s",a);return 0; }Ⅱ getchar() # include <stdio.h> int mai…

工业光源环形系列一AOI光源特点

产品特点 ◆具有环形光源所有的特点&#xff1b; ◆采用不同角度多色光&#xff0c;使被照物体的成像更具立体特征&#xff1b; ◆每种颜色可独立控制。

MySQL为什么默认引擎是InnoDB?

因为InnoDB特别强大,其支持很多东西 1.支持事务: 意味着对于一个复杂的SQL语句要么全部执行成功,要么全部失败,因为其底层是原子性的 2.支持并发(行级并发) 意味着面对高并发,多个用户可以同时访问一个表的不同行,不同行之间上锁,而不是给一个表上锁,这样就提高了高并发的性能和…

在Linux中mknod命令有什么用

2024年5月5日&#xff0c;周日下午 mknod命令用于在Linux系统中创建设备节点文件。设备节点文件是Linux系统中与硬件设备通信的一种特殊文件类型。mknod命令允许用户手动创建这些设备节点文件&#xff0c;以便与系统中的硬件设备进行交互。 具体来说&#xff0c;mknod命令的语法…

CSS 选择器知识点总结

这篇文章的内容是 CSS 的选择器&#xff0c;这是写页面样式的第一步&#xff0c;知道 CSS 有哪些选择器是每个前端工程师必会的内容之一。 一、什么是 CSS 中的选择器&#xff1f; CSS 中的选择器用于选择要应用样式的 HTML 元素。选择器是 CSS 中的关键部分&#xff0c;允许…

论文辅助笔记:Tempo之modules/prompt.py

1 get_prompt_param_cls 2 get_prompt_value 3 Prompt 类 3.1 _init_weights 3.2 forward

Spring Security Oauth2 JWT 添加额外信息

目录 一、问题描述 二、实现步骤 1、自定义TokenEnhancer 2、配置授权服务器 3、自定义UserDetails的User类 三、参考文档 一、问题描述 Oauth2里默认生成的JWT信息并没有用户信息&#xff0c;在认证授权后一般会返回这一部分信息&#xff0c;我对此进行了改造。 Oauth…

CC工具箱使用指南:【按属性分割成SHP】

一、简介 Arcgis中有一个【按属性分割】的工具&#xff0c;可以将要素类按字段值分割成多个gdb要素类&#xff0c;也可以分割成多个SHP要素。 这个工具是在【按属性分割】工具的基础上做了一个强化&#xff0c;可以将分割出来的SHP要素分别放在独立的文件夹内。 实际工作中&…

Java | Leetcode Java题解之第70题爬楼梯

题目&#xff1a; 题解&#xff1a; public class Solution {public int climbStairs(int n) {double sqrt5 Math.sqrt(5);double fibn Math.pow((1 sqrt5) / 2, n 1) - Math.pow((1 - sqrt5) / 2, n 1);return (int) Math.round(fibn / sqrt5);} }

爬虫工具:避免复制文字收费,VIP。。

step ctrl shift i 打开开发者工具 点击...打开设置勾选禁用JavaScript Principle 事件处理&#xff1a;JavaScript 用于处理用户交互&#xff0c;例如点击、滚动、输入等禁用 JavaScript 后&#xff0c;页面上的所有 JavaScript 代码都将不会执行

go语言数据类型转换

go语言数据类型转换 golang不会对数据进行隐式的类型转换&#xff0c;只能手动去执行转换操作&#xff0c;表达式T(v)将值v转换为类型T T : 就是数据类型 V : 就是需要转换的变量一、数值类型转换 数值间转换的时候建议从小范围转换成大范围&#xff0c;比如int8转int16&…

深入理解Java泛型

Java泛型是在JDK 5中引入的一个强大的特性&#xff0c;它允许开发者在编译时提供类型安全的集合操作。泛型的本质是参数化类型&#xff0c;即在类或方法中使用一个或多个类型形参来定义&#xff0c;然后在创建类实例或调用方法时传入具体的类型参数。 泛型的基本使用 泛型的基…

学习网络安全 你必须要学会的20款工具

工欲善其事必先利其器&#xff0c;在新入门网络安全的小伙伴而言。这些工具你必须要有所了解。本文我们简单说说这些网络安全工具吧&#xff01; Web安全类 Web类工具主要是通过各种扫描工具&#xff0c;发现web站点存在的各种漏洞如sql注入、xss等。从而获取系统权限&#xf…

C# 中 有两种常见的类型转换方式:显式转换和 as 运算符

在 C# 中&#xff0c;有两种常见的类型转换方式&#xff1a;显式转换和as 运算符。它们用于在不同类型之间进行转换。以下是对这两种转换方式的详细解释和示例说明&#xff1a; 显式转换&#xff1a;显式转换是通过使用转换操作符&#xff08;如 (typeName)value&#xff09;将…

Pytorch实现扩散模型【DDPM代码解读篇1】

本篇内容属于对DDPM 原理-代码 项目的解读。 具体内容参考一篇推文&#xff0c;里面对DDPM讲解相对细致&#xff1a; 扩散模型的原理及实现&#xff08;Pytorch&#xff09; 下面主要是对其中源码的细致注解&#xff0c;帮助有需要的朋友更好理解代码。 目录 ConvNext块 正…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc&#xff1a;https://maven.proxy.ustclug.org/maven2/o…