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

【微处理器系统原理与应用设计第十二讲】通用定时器设计二之PWM波实现呼吸灯的功能

一、基础知识

1、寄存器的配置

(1)GPIOX_AFRL:GPIO复用功能低位寄存器

GPIOX_AFRH:GPIO复用功能高位寄存器

(2)配置PA5 GPIOA->MODER(端口模式寄存器),10为复用功能,是指除了普通输入/出,还有其他功能TIM等

(3)GPIO->OTYPER:0为推挽,1为开漏输出,推挽输出在示波器上看主要为方波形,而开漏在示波器显示为锯齿波。但要注意使PUPDR设置为上拉电阻状态。

(4)GPIOX_OSPEED(端口输出速度寄存器):低速 2MHz,中速 10~25MHz 高速 20~50MHz,具体的大小与对应连接的电压和电容相关。

(5)设置AFRL寄存器,AF0~15指GPIOX的16种模式(一般AF0~7可改,4~6仅限GPIOA,8~15保留),AFR[0]指GPIOX_AFRL寄存器,管理0~7个管脚;AFR[1]指GPIOX_AFRH寄存器,管理8~15个管脚。

(6)TIM_CCER:捕获使能寄存器,使能输入捕获必须设置CC1E = 1

(7)TIM_CCR1:捕获/比较寄存器1,用来存储捕获发生时TIMX_CNT值,通过了一次上升沿捕获与下降沿捕获差值可算出高电平脉冲宽度。

2、占空比的计算

占空比(Duty Cycle)是脉冲信号中高电平持续时间与整个周期时间的比率。它通常用于描述脉冲宽度调制(PWM)信号,其中信号在一定频率下在高电平和低电平之间切换。

设置寄存器ARR的值确定周期,设置CCRx值设置占空比,CNT小于CCR时输出为高,CNT大于CCR输出为低,占空比 = CCR/ARR = 高电平时间/周期

3、实现逻辑原理

(1)PWM波利用微处理器的数字输出来控制模拟电路

(2)STM32没有专门的PWM引脚,所以采用IO口的复用模式

(3)TIM1是STM32高级定时器,它的每个通道都有对应的互补通道来互补输出PWM

(4)STM32的定时器除了TIM6和TIM7,其他定时器都可用来产生PWM输出。

(5)面积等效原理:只要正弦波与t坐标轴围起来阴影面积相同,不管哪种电压波形效果大概相同

 

二、功能需求

开发呼吸灯功能,即LED灯一亮一灭,亮灭交替,周而复始。亮灭时长约为1s。

三、设计思路

将PA5配置为TIM2的CH1输出。采用定时器TIM2产生PWM波形,周期为2s且占空比为50%,即1s时长的低电平、1s时长的高电平。

四、软件流程图

五、程序设计 

1、PWM输出端口初始化

采用PwmOutInit函数实现PA5复用为TIM2的CH1输出。代码如下:

void PwmOutInit(void)
{RCC->AHB1ENR|=1<<0; //使能GPIOAGPIOA->MODER=(GPIOA->MODER&~(0x3<<10))|(0x2<<10); //设置PA5为AF复用、推挽输出、无上拉、无下拉、中速GPIOA->OTYPER&=~(1<<5); GPIOA->PUPDR&=~(0x3<<10);GPIOA->OSPEEDR=(GPIOA->OSPEEDR&~(0x3<<10))|(1<<10);GPIOA->AFR[0]=(GPIOA->AFR[0]&~(0xF<<20))|(1<<20); //设置AFRL寄存器,将PA5复用为TIM2的CH1输出
}

2、定时器初始化函数

采用TimerInit函数实现定时器2的参数配置。

时钟源TIMCLK的频率为16MHz,设计预分频系数N=2000,计数器分频系数M=16000,那么共320万个分频,定时时长为M*N/TIMCLK = 2s。因此预分频寄存器PSC的值为N-1 = 1999,自动重载寄存器ARR的值为M-1 = 15999.比较寄存器为计数器自动重载值的一半,即8000.具体代码如下:

void TimerInit(void)
{RCC->APB1ENR |=1<<0; //使能TIM2TIM2->CR1 =1<<7; //配置为自重载预载使能、边沿对齐、向上计数工作模式TIM2->PSC =1999; //16MHz/2000 = 8KHzTIM2->ARR =15999; //8KHz/16000=0.5Hz,PWM周期为2sTIM2-CCMR1 = (TIM2->CCMR1&~(0x00FF))|0x68; //配置CH1为PWM1输出模式TIM2->CCER |=1; //使能比较通道1作为输出TIM2->CCR1 8000; //占空比50%TIM->CR1 |=1; //开启TIM2
}

 

 

相关文章:

【微处理器系统原理与应用设计第十二讲】通用定时器设计二之PWM波实现呼吸灯的功能

一、基础知识 1、寄存器的配置 &#xff08;1&#xff09;GPIOX_AFRL&#xff1a;GPIO复用功能低位寄存器 GPIOX_AFRH&#xff1a;GPIO复用功能高位寄存器 &#xff08;2&#xff09;配置PA5 GPIOA->MODER&#xff08;端口模式寄存器&#xff09;&#xff0c;10为复用功…...

2025秋招NLP算法面试真题(十九)-大模型分布式训练题目

目录: 理论篇 1.1 训练大语言模型存在问题? 1.2 什么是点对点通信? 1.3 什么是集体通信? 1.4 什么是数据并行? 1.5 数据并行如何提升效率? 1.6 什么是流水线并行? 1.7 什么是张量并行 (intra-layer)? 1.8 数据并行 vs 张量并行 vs 流水线并行? 1.9 什么是3D并行? 1.1…...

线程池的应用

1.线程的执行机制 线程分为用户线程 和 内核线程 内核线程就是系统级别的线程&#xff0c;与cpu逻辑处理器数量对应的 用户线程就是使用java代码创建的Thread对象 用户线程必须与内核线程关联&#xff08;映射&#xff09;&#xff0c;才能执行任务 当用户线程多于内核线程时…...

OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 connectedComponents 函数计算布尔图像的连通组件标签图像。 该函数接受一个具有4或8连通性的二值图像&#xff0c;并返回 N&#xff0c;即标签…...

HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验

一、实验内容 1.需求/要求&#xff1a; 将两个单臂路由通过两台交换机连接起来&#xff0c;成为双臂路由&#xff0c;并探讨这么做的原因。实现全网通&#xff0c;让任何一台主机之间都可以通信。 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.给PC配置ip地址…...

AIStarter市场指南:项目分享与框架优化【AI绘画、写作、对话、办公、设计】

随着人工智能技术的飞速发展&#xff0c;越来越多的开发者和爱好者希望能够将自己的创意和项目分享给更多人。AIStarter作为一个专注于AI领域的平台&#xff0c;正致力于打造一个开放的应用市场&#xff0c;让创作者能够轻松分享他们的项目&#xff0c;同时也方便其他用户下载和…...

机器学习第8章 集成学习

目录 个体与集成BoostingBagging与随机森林Bagging随机森林 结合策略平均法投票法学习法 个体与集成 定义&#xff1a;集成学习&#xff0c;也叫多分类器系统、基于委员会的学习等&#xff0c;它是一种通过结合多个学习器来构建一个更强大的学习器的技术。如下图所示 在这里&a…...

京东鸿蒙上线前瞻——使用 Taro 打造高性能原生应用

背景 2024 年 1 月&#xff0c;京东正式启动鸿蒙原生应用开发&#xff0c;基于 HarmonyOS NEXT 的全场景、原生智能、原生安全等优势特性&#xff0c;为消费者打造更流畅、更智能、更安全的购物体验。同年 6 月&#xff0c;京东鸿蒙原生应用尝鲜版上架华为应用市场&#xff0c…...

day2 QT

作业 2> 在登录界面的登录取消按钮进行以下设置&#xff1a; 使用手动连接&#xff0c;将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断…...

JS_函数声明

JS中的方法,多称为函数,函数的声明语法和JAVA中有较大区别 函数说明 函数没有权限控制符不用声明函数的返回值类型,需要返回在函数体中直接return即可,也无需void关键字参数列表中,无需数据类型调用函数时,实参和形参的个数可以不一致声明函数时需要用function关键字函数没有…...

快速排序+归并排序代码回顾

快速排序与归并排序简介&#xff1a; quick_sort为快速排序&#xff0c;merge_sort为归并排序&#xff0c;两者基于分治的思想&#xff1b; 快速排序&#xff0c;简称快排&#xff0c;它以原来数组中的一个值&#xff08;我们记为x&#xff09;作为界限&#xff0c;将比它小…...

DBC中一种特殊的特殊的Signal—多路复用Signal

前言&#xff1a; DBC设计中一般设计Signal时其实存在三种类型&#xff0c;如下图所示&#xff1a; **1&#xff09;步骤1&#xff0c;鼠标单击展开Message&#xff0c;选中底下的Signal **2&#xff09;步骤2&#xff0c;弹出dialog中选择 map signal **3&#xff09;得到…...

前端基础面试题·第三篇——JavaScript(其三)

1.字符串 (1) 常用方法 1.charAt(index) 返回指定位置的字符,若没找到&#xff0c;则返回空2.charCodeAt(index) 返回指定位置的unicode字符编码,若没找到&#xff0c;则返回空 3.String.concat(str1,str2) 连接多个字符串&#xff0c;并返回新字符串4.String.fromCharCode(co…...

MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏

MacBook从来都是高端的代名词&#xff0c;超强的性能搭配顶尖的系统&#xff0c;不光处理大型文件时举重若轻&#xff0c;长期使用也不会有明显卡顿。但很多人在需要MacBook一流的生产力同时&#xff0c;也希望能在空闲时体验游戏的乐趣。在大多人的印象里&#xff0c;Mac电脑对…...

安卓逆向(之)真机root(红米手机)

概览&#xff1a; 1, 手机解锁 2, 下载官方系统包&#xff0c;推荐线刷包,取出镜像文件 3, magisk工具修补 官方系统包 4, adb&#xff1a;命令对手机刷 root 5, 完成 6, 小米手机解锁 点击 小米手机解锁OEM官方教程 记得数据线连接手机电脑 工具下载 点击 下载adb(电脑操作…...

关于转行网络安全的一些建议

在当前就业形势下&#xff0c;不少朋友面临转行的困境。网络安全作为一个热门领域&#xff0c;自然也吸引了许多人的目光。本文将就转行网络安全这一话题&#xff0c;提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。该…...

(六十五)第 10 章 内部排序(希尔排序)

示例代码 shellSort.h // // 希尔排序实现头文件#ifndef SHELL_SORT_H #define SHELL_SORT_H#include "errorRecord.h"#define NUM 10 #define MAX_SIZE 20#define EQUAL(a, b) ((a) == (b)) #define LESS_THAN(a, b) ((a) < (b)) #define LESS_OR_EQUAL(a, b) ((…...

802.11 中 scrambler的matlab仿真

802.11a和802.11n中的scrambler仿真不可以直接用matlab中的comm.Scrambler函数。因为这个函数实现的是multiplicative scrambling&#xff0c;而802.11a和802.11n中的scrambler使用的是additive scrambling。additive scrambling使用异或操作进行扰码&#xff0c;multiplicativ…...

centos 服务器 多网卡 ip 地址 设置

centos 服务器 多网卡 ip 地址 设置 https://blog.csdn.net/xh_w20/article/details/141574357 cd /etc/sysconfig/network-scripts/ sudo systemctl status network ● network.service - LSB: Bring up/down networkingLoaded: loaded (/etc/rc.d/init.d/network; bad; v…...

什么是大数据、有什么用以及学习内容

目录 1.什么是大数据&#xff1f; 2.大数据有什么用&#xff1f; 2.1商业与营销&#xff1a; 2.2医疗与健康&#xff1a; 2.3金融服务&#xff1a; 2.4政府与公共服务&#xff1a; 2.5交通与物流&#xff1a; 2.6教育与个性化学习&#xff1a; 3.学习大数据需要学习哪…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...