STM32高级定时器-输出比较模式

一.输出比较原理

在这里插入图片描述

1.输出比较

通过定时器的外部引脚对外输出控制信号,将通道X(x=1,2,3,4)通常设置为PWM1、PWM2模式。

2.比较寄存器

当计数器CNT和比较寄存器CCR的值相等时,输出参考信号OCxREF的信号的极性发生改变,其中OCxREF=1(高电平)称为有效电平,OCxREF=0(低电平)称为无效电平,并且产生比较中断CCxI,相应的标志位CCxIF会置位。
OCxREF再经过一系列的控制之后成为真正的输出信号OCx/OCxN

3.输出引脚

输出比较的输出信号最终通过定时器的外部IO输出,分别为CH1/2/3/4,以及互补输出通道CH1/2/3N

二.PWM输出模式

1.PWM输出

对外输出脉宽(即占空比)可调的方波信号。

2.信号频率

自动重装载寄存器ARR的值决定,PWM频率 = TIM_CLK/{(PSC+1)(ARR+1)}

3.占空比

比较寄存器CCR的值决定,占空比=CCR/(ARR+1)

4.常用的值

TIM_CLK:72MHZ;ARR:自动装载寄存器的值 ;CCR: 比较寄存器; PSC:计数器时钟分频因子。

5.PWM边沿对齐模式

在这里插入图片描述
在递增计数模式下,计数器从0计数到自动装载寄存器的值(ARR),然后重新从0开始计数并生成计数器上溢事件。
上图中,ARR=8,CCR=4,CNT从0开始计数,使用递增模式。
CNT<CCR时,OCxREF为有效的高电平。
CCR=<CCR<=ARR时,OCxREF为无效的低电平。
之后,CNT从0开始计数并生成计数器上溢事件,以此循环往复。

二.输出比较初始化结构体

typedef struct {uint16_t TIM_OCMode; // 比较输出模式uint16_t TIM_OutputState; // 比较输出使能uint16_t TIM_OutputNState; // 比较互补输出使能uint32_t TIM_Pulse; // 脉冲宽度uint16_t TIM_OCPolarity; // 输出极性uint16_t TIM_OCNPolarity; // 互补输出极性uint16_t TIM_OCIdleState; // 空闲状态下比较输出状态uint16_t TIM_OCNIdleState; // 空闲状态下比较互补输出状态
} TIM_OCInitTypeDef;;

(1)IM_OCMode:比较输出模式选择,总共有八种,常用的为 PWM1/PWM2,即TIM_OCMode_PWM1/TIM_OCMode_PWM2。
(2)TIM_OutputState:比较输出使能,决定最终的输出比较信号 OCx 是否通过外部引脚输出,即TIM_OutputState_Enable。
(3)TIM_OutputNState: 比较互补输出使能,决定 OCx 的互补信号 OCxN 是否通过外部引脚输出。
(4)TIM_Pulse:比较输出脉冲宽度,实际设定比较寄存器 CCR的值,决定脉冲宽度。可设置范围为 0 至 65535。
(5)TIM_OCPolarity:比较输出极性,可选 OCx 为高电平有效或低电平有效,它决定着定时器通道有效电平。即:TIM_OCPolarity_High/TIM_OCPolarity_LOW
HIGH:CNT< CCR(比较寄存器) 时,定时器通道CH输出高电平;
LOW:CNT< CCR(比较寄存器) 时, 定时器通道CH输出低电平。
(6)TIM_OCNPolarity:比较互补输出极性,可选 OCxN 为高电平有效或低电平有效。
(7)TIM_OCIdleState:空闲状态时通道输出电平设置,可选输出 1 或输出 0。
(8)TIM_OCNIdleState:空闲状态时互补通道输出电平设置,可选输出 1 或输出 0

三.源代码

1.bsp_generalpwm.h

#ifndef BSP_GENERAL_PWM_H
#define BSP_GENERAL_PWM_H#include "stm32f10x.h"void INIT_GENERAL_GPIO_CONFIG();
void INIT_GENERAL_PWM_CONFIG();#endif

2.bsp_generalpwm.c

#include "bsp_generalpwm.h"//使用TIM3的 输出比较通道1,2,3,4 对应的GPIO初始化
void INIT_GENERAL_GPIO_CONFIG()
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PA6 PA7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//推免输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_Init(GPIOA,&GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PB0 PB1GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_Init(GPIOB,&GPIO_InitStructure);
}/* ----------------   PWM信号 周期和占空比的计算--------------- */
// ARR :自动重装载寄存器的值
// CLK_cnt:计数器的时钟,等于 Fck_int / (psc+1) = 72M/(psc+1)
// PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
// 占空比P=CCR/(ARR+1)void INIT_GENERAL_PWM_CONFIG()
{//初始化 TIM_TimeBaseInitTypeDef//开启定时器时钟,即内部时钟CK_INT=72MRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_Prescaler = 72-1;//72MHZ/((72-1)+1) = 1MHZ  分频因子TIM_TimeBaseInitStructure.TIM_Period = 9-1;//重载寄存器的值TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//占空比设置uint8_t OC1_VALUE = 8;uint8_t OC2_VALUE = 5;uint8_t OC3_VALUE = 4;uint8_t OC4_VALUE = 2;//初始化 TIM_OCInitTypeDefTIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//使用PWM1模式TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出通道电平极性 高电平有效;CNT<  CCR(比较寄存器) 时,定时器通道CH输出高电平;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能TIM_OCInitStructure.TIM_Pulse = OC1_VALUE;//占空比:TIM_Pulse/(Period +1)TIM_OC1Init(TIM3,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);TIM_OCInitStructure.TIM_Pulse = OC2_VALUE;TIM_OC2Init(TIM3,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);TIM_OCInitStructure.TIM_Pulse = OC3_VALUE;TIM_OC3Init(TIM3,&TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);TIM_OCInitStructure.TIM_Pulse = OC4_VALUE;TIM_OC3Init(TIM3,&TIM_OCInitStructure);TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能计数器TIM_Cmd(TIM3,ENABLE);
}

3.man.c

#include "bsp_generalpwm.h"int main(void)
{	INIT_GENERAL_GPIO_CONFIG();INIT_GENERAL_PWM_CONFIG();while(1){}
}

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

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

相关文章

深入理解Unity中的`.meta`文件:以纹理文件为例

在Unity开发中&#xff0c;.meta文件是一个经常被提及但又容易被忽视的组成部分。这些隐藏的元数据文件在项目的稳定性和一致性中扮演着重要角色&#xff0c;尤其是在处理纹理文件时。本文将深入探讨.meta文件的作用、内容、版本控制以及常见问题&#xff0c;帮助开发者更好地理…

【机器学习】3 Generative models for discrete data

本章目录 3 Generative models for discrete data 65 3.1 Introduction 65 3.2 Bayesian concept learning 65 3.2.1 Likelihood 67 3.2.2 Prior 67 3.2.3 Posterior 68 3.2.4 Posterior predictive distribution 71 3.2.5 A more complex prior 72 3.3 The beta-binomial mod…

Gemini CLI 与 MCP 服务器:释放本地工具的强大潜力

前言 Gemini CLI 是一款强大的命令行工具&#xff0c;它将 Google 的 Gemini 模型带入了您的终端。然而&#xff0c;其真正的潜力在于通过 模型上下文协议&#xff08;Model Context Protocol, MCP&#xff09; 与外部工具集成。本文将结合两篇关键文章&#xff0c;深入探讨什…

HTTP、HTTPS 与 WebSocket 详解

HTTP、HTTPS 与 WebSocket 详解 在网络通信中&#xff0c;HTTP、HTTPS 和 WebSocket 是三种常见的应用层协议&#xff0c;分别适用于不同的场景。以下从定义、特点、工作原理和适用场景等方面详细解析&#xff1a; 一、HTTP&#xff08;HyperText Transfer Protocol&#xff0c…

8月21日

#include "head.h"seq_p create_seq() {seq_p S(seq_p)malloc(sizeof(seq_list));if(SNULL){printf("malloc error");return NULL;}memset(S,0,sizeof(seq_list));return S; }//头插 void insert_head(seq_p S,int value,int len) {//判NULLif(SNULL){prin…

视频号存在争议了...

目前实测到&#xff1a;视频号里那套 争议信息提示加AI真相雷达&#xff0c;已经在不少视频下上线了&#xff08;这是一个非常火爆的趋势&#xff01;&#xff09;伙伴们都知道&#xff0c;短视频里的观点来得快、走得也快&#xff0c;很多人看完就转发。你想想看&#xff0c;要…

音视频处理工作室:实时通信的媒体层设计

在开发视频会议、语音聊天等实时通信应用时&#xff0c;媒体层&#xff08;Media Layer&#xff09; 是整个系统的核心。它就像是一个专业的"音视频处理工作室"&#xff0c;负责从采集声音画面到最终播放的全流程。本文将通过通俗易懂的比喻&#xff0c;解析媒体层中…

读《精益数据分析》:A/B测试与多变量测试

A/B测试与多变量测试&#xff1a;从入门到实战的完整指南 在数据驱动的时代&#xff0c;实验已经成为产品优化和商业决策的核心工具。而在众多实验方法中&#xff0c;A/B测试与多变量测试几乎是每一位产品经理、数据分析师、增长团队绕不开的关键词。 很多人第一次听到它们时&a…

中介者模式及优化

中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心思想是通过引入一个“中介者”对象&#xff0c;封装多个对象&#xff08;称为“同事对象”&#xff09;之间的复杂交互关系&#xff0c;使同事对象无需直接相互引用&#xff0c;而是…

卷积神经网络的基本概念

卷积神经网络 CNN&#xff0c;即卷积神经网络&#xff0c;是一种深度学习算法&#xff0c;在图像处理&#xff0c;视觉识别等任务中表现出色。 卷积神经网络的组成 CNN模型的组件包括卷积层&#xff0c;池化层&#xff0c;全连接层。 卷积层&#xff1a;提取图像中的局部特征池…

亚远景- 从算法到刹车片:ISO/PAS 8800如何量化自动驾驶的“安全冗余”?

ISO/PAS 8800作为全球首个针对道路车辆人工智能安全的权威标准&#xff0c;通过全生命周期管理框架与量化安全指标&#xff0c;为自动驾驶系统构建了从算法到硬件的“安全冗余”量化体系&#xff0c;其核心逻辑可拆解为以下四层结构&#xff1a;一、数据层&#xff1a;量化训练…

【QT/C++】实例理解类间的六大关系之实现关系(Realization)

【QT/C】实例理解类间的六大关系之实现关系&#xff08;Realization&#xff09; 在前面章节讲完了实例理解类间的六大关系之泛化关系&#xff0c;效果不错&#xff0c;获得粉丝的一致好评&#xff01;&#xff01;&#xff01; 接下来&#xff0c;本文我将继续尝试分享并总结…

Coze用户账号设置修改用户头像-后端源码

前言 本文将深入分析Coze Studio项目的用户头像修改功能后端实现&#xff0c;通过源码解读来理解整个头像上传和更新流程的架构设计和技术实现。用户头像修改作为用户个人信息管理系统的重要组成部分&#xff0c;主要负责处理图片文件上传、存储和用户信息更新&#xff0c;提升…

【Day 33】Linux-Mysql日志

一、数据库日志的核心作用故障恢复&#xff1a;当数据库因崩溃&#xff08;如断电、进程异常&#xff09;、误操作&#xff08;如删表&#xff09;导致数据丢失时&#xff0c;通过日志恢复数据至一致状态。数据一致性保障&#xff1a;确保事务的 ACID 特性&#xff08;尤其是原…

服务器支持IPv6吗?如何让服务器支持IPv6

服务器是否支持 IPv6 需要视具体的服务商、服务器配置和网络环境而定。以下是关于 服务器支持 IPv6 的相关知识、如何检查支持情况&#xff0c;以及如何配置服务器以支持 IPv6 的详细指南。 1. 什么是 IPv6&#xff1f; IPv6&#xff08;Internet Protocol Version 6&#xff…

37、需求预测与库存优化 (快消品) - /供应链管理组件/fmcg-inventory-optimization

76个工业组件库示例汇总 需求预测与库存优化 (快消品) - 自定义组件 概述 这是一个用于模拟和可视化快消品 (FMCG) 需求预测与库存优化流程的组件。用户可以选择不同的产品和区域&#xff0c;调整预测参数和库存策略&#xff0c;然后运行模拟以查看历史销售、预测需求以及基…

vuex如何在js文件中使用

文章目录前言代码实现1. 导出2. 使用总结前言 vue项目中比较常用的vuex&#xff0c;一般是在.vue文件中使用&#xff0c;那如何在.js文件中使用呢? 代码实现 1. 导出 vuex-store.js&#xff1a; export default {state: {isLogin: false,},mutations: {updateIsLogin(stat…

ESP32开发WSL_VSCODE环境搭建

系列文章目录 ESP32开发WSL_VSCODE环境搭建 文章目录 系列文章目录 前言 一、ESP32 WSL开发环境是啥子? 二、搭建步骤 1.启用WSL功能 2.安装Ubuntu系统 2.1 微软商店下载 2.2 下载发行版 2.3 安装完成后的密码设置 3. 环境配置 3.1 更新 apt工具 3.2 安装ESP-IDF相关应用 3.3…

分布式锁设计实战:多级缓存防御设计优化同步性能

JVM层的双重检查锁(Double-Checked Locking)是一种在多线程环境下优化同步性能的设计模式,主要用于减少锁竞争和提高缓存访问效率。其核心原理如下: ‌工作流程‌ 第一次检查:线程先无锁读取缓存,若命中则直接返回数据 加锁同步:若未命中,线程进入同步代码块 第二次检查…

C#自定义工具类-时间日期工具类

目录 时间日期工具类DateTimeHelper 功能说明 日期格式化 时间戳转换 时间间隔计算 日期边界与调整 时区转换 日期解析 时间相等性判断 时间范围与先后判断 日期合法性与特殊判断 截断时间到指定精度 完整代码 本篇文章分享一下时间日期工具类DateTimeHelper&…