STM32 LL库+STM32CubeMX--LED呼吸灯

一、前期准备

  1. 硬件:STM32F103C8T6开发板
  2. 调试工具:DAPLink(本次使用)或USB-TTL
  3. 开发环境:STM32CubeMX、Keil、Vscode(可选)
  4. LED:使用PA0(TIM2_CH1)输出PWM,LED的阴极接GND

二、使用定时器中断产生PWM

STM32F103C8T6在72MHz的计数时钟下,可实现最大59.65s的定时。

  •  STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
  • 时基单元:16位预分频器 + 16位计数器 + 16位自动重装载寄存器

计数模式:

1. 向上计数模式(常用):从0开始累加,到自动重装值触发中断。

2. 向下计数模式:从自动重装值递减,到0触发中断

3. 中央对齐计数模式:从0开始累加,到自动重装载值触发中断,然后递减,到0再次触发中断。常用于电机控制的SVPWM算法中。

TIM输出比较原理:

  • OC(Output Compare):输出比较,输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道OC1~4
  • CCR(Capture Compare):捕获比较寄存器

PWM(Pulse Width Modulation)脉冲宽度调制

  1. 频率 = 1 / TS,一般在 几kHz~几十kHz。
  2. 占空比 = TON / TS
  3. 分辨率 = 占空比变化步距,也就是占空比变化的精细程度。一般1%足够使用。

注:定时中断的频率就是PWM波的频率,只不过占空比的变化范围由自动重装载值ARR决定。

输出比较模式:常用PWM模式1

 

2.1 PWM参数计算

  • PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
  • PWM占空比: Duty = CCR / (ARR + 1),CCR值可以设置PWM的占空比,因此ARR常设为100-1
  • PWM分辨率: Reso = 1 / (ARR + 1),即PWM的步长

参数说明:

  • CK_PSC:时钟源频率,72MHz
  • PSC:预分频器寄存器的值
  • ARR:自动重装寄存器的值
  • CCR:捕获比较寄存器的值

案例1:假如驱动SG90舵机:PWM频率为50Hz,即周期20ms

  • PSC = 72-1
  • ARR = 20K-1

案例2:输出频率为10K的PWM

  1. 先确定ARR的值:ARR = 100-1
  2. 再设置PSC的值:PSC = 72-1

2.2 STM32F103C8T6通用定时器输出通道

  • 因为涉及到GPIO的复用功能,所以要使用定时器输出PWM时,GPIO的工作模式需要设置为复用推挽输出模式
序号主功能默认复用功能
1PA0TIM2_CH1
2PA1TIM2_CH2
3PA2TIM2_CH3
4PA3TIM2_CH4
5PA6TIM3_CH1
6PA7TIM3_CH2
7PB0TIM3_CH3
8PB1TIM3_CH4
9PB6TIM4_CH1
10PB7TIM4_CH2
11PB8TIM4_CH3
12PB9TIM4_CH4

三、STM32CubeMX配置

1.设置RCC:使用外部高速时钟HSE

 2.SYS配置:配置成 SWD协议下载和调试

3. 定时器配置

使用TIM2,输出PWM频率10K

  • 设置ARR = 100-1
  • 设置PSC = 72-1

TIM2时钟源配置、通道输出配置: GPIO的工作模式会自动被设置为复用推挽输出模式

工作参数设置:PWM模式1

  •  ARR:决定PWM的分辨率
  • CCR:PWM的占空比

4.时钟树配置:72MHz

 5.导出代码:之后步骤参考之前的就可以了

四、程序编写

// 在TIMX_CH1通道上输出占空比为CompareValue的PWM
__STATIC_INLINE void LL_TIM_OC_SetCompareCH1(TIM_TypeDef *TIMx, uint32_t CompareValue)
{WRITE_REG(TIMx->CCR1, CompareValue);
}
 /* USER CODE BEGIN WHILE */LL_TIM_EnableAllOutputs(TIM2);LL_TIM_EnableCounter(TIM2);                        // 使能计数LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH1); // 使能输出比较通道while (1){for (uint16_t i = 0; i <= 100; i++){LL_TIM_OC_SetCompareCH1(TIM2, i); // PA0(TIM2_CH1)输出占空比为i的PWMLL_mDelay(10);}for (uint16_t i = 0; i <= 100; i++){LL_TIM_OC_SetCompareCH1(TIM2, 100 - i);LL_mDelay(10);}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

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

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

相关文章

scope,deep穿透的实际应用

一.父组件代码 <template><div id"app"><h1 class"box"><pageName> </pageName></h1></div> </template><script> import pageName from "../src/components/pageName.vue"; export de…

Java中的==和equals():区别详解

大家好&#xff01;在 Java 编程中&#xff0c;比较对象的相等性是一个常见的任务。然而&#xff0c;你是否知道在 Java 中有两种不同的方法来比较对象的相等性&#xff1a; 操作符和 equals() 方法&#xff1f;本文将深入探讨这两种方法之间的区别以及何时使用它们。 操作符 …

arcgis pro3.0-3.0.1-3.0.2安装教程大全及安装包下载

一. 产品介绍&#xff1a; ArcGIS Pro 这一功能强大的单桌面 GIS 应用程序是一款功能丰富的软件&#xff0c;采用 ArcGIS Pro 用户社区提供的增强功能和创意进行开发。 ArcGIS Pro 支持 2D、3D 和 4D 模式下的数据可视化、高级分析和权威数据维护。 支持通过 Web GIS 在一系列 …

KafkaStream:基本使用

简介&#xff1a; kafkaStream&#xff1a;提供了对存储在kafka中的数据进行流式处理和分析的功能 特点&#xff1a; KafkasSream提供了一个非常简单轻量的Library&#xff0c;它可以非常方便的嵌入到java程序中&#xff0c;也可以任何方式打包部署 入门案例&#xff1a; 1、…

jenkins自动化部署Jenkinsfile文件配置

简介 使用jenkins部署时会读取项目中Jenkinsfile文件&#xff0c;文件配置不对会导致部署失败 文件内容 pipeline {agent anyparameters {string(name: project_name, defaultValue: xxx1, description: 项目jar名称)string(name: version, defaultValue: xxx2, description…

【Apollo】阿波罗自动驾驶:塑造自动驾驶技术的未来

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】

Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】 一、分布式系统遇到的问题1、服务挂掉的一些原因 二、解决方案三、Sentinel&#xff1a;分布式系统的流量防卫兵1、Sentinel是什么2、Sentinel和Hystrix对比3、Sentinel快速开发4、通过注解的方式来控流5、启动Sen…

DoIP学习笔记系列:(五)“安全认证”的.dll从何而来?

文章目录 1. “安全认证”的.dll从何而来?1.1 .dll文件base1.2 增加客户需求算法传送门 DoIP学习笔记系列:导航篇 1. “安全认证”的.dll从何而来? 无论是用CANoe还是VFlash,亦或是编辑cdd文件,都需要加载一个与$27服务相关的.dll(Windows的动态库文件),这个文件是从哪…

Go 流程控制

if语句使用 package mainimport "fmt"func main() {score : 700if score 700 {fmt.Println("清华")}//if支持一个初始化语句 初始化语句和条件判断用;分割if a : 700; a 700 {fmt.Println("清华")}}清华 清华if_else使用 package mainimpor…

机器学习深度学习——seq2seq实现机器翻译(数据集处理)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——从编码器-解码器架构到seq2seq&#xff08;机器翻译&#xff09; &#x1f4da;订阅专栏&#xff1a;机…

yolo源码注释1——文件结构

代码基于yolov5 v6.0 目录&#xff1a; yolo源码注释1——文件结构yolo源码注释2——数据集配置文件yolo源码注释3——模型配置文件yolo源码注释4——yolo-py datasets # 用于存放数据集的默认文件夹yolov5 data # 模型训练的超参数配置文件以及数据集配置文件 hyps # 存放超参…

C语言学习错题集(五)

1.最大公倍数的求法(gcd已知) 2.报数 3.字符串最后必须有’\0’!!! 4.例题 5.例题 6.例题 1.最大公倍数的求法(gcd已知) int lcmgcd*(a/gcd)*(b/gcd);2.报数 报数游戏是这样的&#xff1a;有n个人围成一圈&#xff0c;按顺序从1到n编好号。从第一个人开始报数&#xff0c;报到…

工程项目管理系统源码+功能清单+项目模块+spring cloud +spring boot em

​ 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

代码保护 code protection

为什么要做代码保护&#xff1f; 为了保护知识产权并让攻击者的利用更加困难&#xff0c;组织应该为其软件的逆向工程设置障碍(例如&#xff0c;反篡改、调试保护、反盗版特性、运行时完整性)&#xff0c;增加攻击者分析和利用你的软件所需的投入。代码保护对于广泛分布的代码…

Markdown使用笔记

Markdown使用笔记 一、段落与强调 important denotes the impossible thing to do Because your ugly appearance, you cannot have a happy ending. 使用*括起来的为斜体 使用**括起来的是粗体 使用~~括起来的是删除线 在句子后面添加<br>即可换行 二、标题 在…

常见期权策略类型有哪些?

这几天在做一个期权策略类型的整理分类&#xff0c;怎么解释期权策略&#xff0c;期权策略是现代金融市场中运用非常广泛、变化非常丰富、结构非常精妙的金融衍生产品&#xff1b;同时也是一种更为复杂也更为灵活的投资工具&#xff0c;下文介绍常见期权策略类型有哪些&#xf…

iptables安全技术和防火墙

通信五元素 源ip和目标ip 源端口和目标端口 协议 通信四元素 源ip和目标ip 源端口和目标端口 iptables表链结构 Netfilter Linux防火墙是由Netfilter组件提供的&#xff0c;Netfilter工作在内核空间&#xff0c;集成在linux内核中 Netfilter是Linux 2.4.x之后新一代的Li…

CI/CD流水线实战

不知道为什么&#xff0c;现在什么技术都想学&#xff0c;因为我觉得我遇到了技术的壁垒&#xff0c;大的项目接触不到&#xff0c;做的项目一个字辣*。所以&#xff0c;整个人心浮气躁&#xff0c;我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末&#xff0c;我再次宅在…

k8s问题汇总

作者前言 本文章为记录使用k8s遇到的问题和解决方法&#xff0c;文章持续更新中… 目录 作者前言正常配置ingress&#xff0c;但是访问错误添加工作节点报错安装k8s报错使用kubectl命令报错container没有运行安装会出现kubelet异常&#xff0c;无法识别删除k8s集群访问dashboa…

Docker安装RabbitMQ单机版

Docker安装RabbitMQ单机版 先安装Docker服务&#xff0c;可参考安装Docker及学习 编写rabbitmq-composefile.yml文件 这里以rabbitmq 3.11.16 版本为例 cat << \EOF > /opt/rabbitmq-composefile.yml version: 3 services:rabbitmq:image: rabbitmq:3.10.0-managem…