stm32 PWM
脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术
高级定时器可以同时产生多达7路的PWM输出
而通用定时器也能同时产生多达4路的PWM输出
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号
PWM边沿对齐模式
当TIMx_CNT小于TIMx_CCRx时PWM信号参考OCxREF为高,否则为低。如果TIMx_CCRx中的比较值大于自动重装载值(TIMx_ARR),则OCxREF保持为’1’。如果比较值为0,则OCxREF保持为’0’。 下图为TIMx_ARR=8时边沿对齐的PWM波形实例
3.PWM配置步骤
1.使能定时器时钟
2.使能GPIO外设时钟,并设置引脚复用
3.使能AFIO时钟,并设置引脚复用重映射
3.初始化定时器参数,预分频器的值、自动重装载的值等设定
4.初始化PWM输出参数,输出模式、输出极性等
5.开启定时器
6.使能捕获/比较模式寄存器(TIMx_CCMRx)
7.使能自动重装载寄存器(TIMx_ARR)
8.配置捕获/比较寄存器,修改占空比(TIMx_CCRx)
举例
typedef struct
{
uint16_t TIM_OCMode; //输出比较模式
uint16_t TIM_OutputState; //输入/捕获输出使能
uint16_t TIM_OutputNState; //比较互补输出使能
uint16_t TIM_Pulse; //配置捕获/比较寄存器值
uint16_t TIM_OCPolarity; //输入/捕获输出极性
uint16_t TIM_OCNPolarity; //互补比较输出极性
uint16_t TIM_OCIdleState; //空闲状态下比较输出状态
uint16_t TIM_OCNIdleState; //空闲状态下比较输出状态
} TIM_OCInitTypeDef;
void TIM3_PWM_init(u16 prescaler, u16 period)
{
TIM_TimeBaseInitTypeDef tim_tb = {0};
TIM_OCInitTypeDef tim_oc = {0};
GPIO_InitTypeDef gpio =
{
GPIO_Pin_6, //PC6
GPIO_Speed_50MHz,
GPIO_Mode_AF_PP //复用推挽输出
};
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器时钟
GPIO_Init(GPIOC, &gpio); //使能GPIO外设时钟,并设置引脚复用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能AFIO时钟
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //设置引脚复用重映射
tim_tb.TIM_Prescaler = prescaler;
tim_tb.TIM_CounterMode = TIM_CounterMode_Up;
tim_tb.TIM_Period = period;
tim_tb.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3, &tim_tb); //初始化定时器参数
tim_oc.TIM_OCMode = TIM_OCMode_PWM1; //PWM模式1
tim_oc.TIM_OCPolarity = TIM_OCPolarity_Low; //低电平有效
tim_oc.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM3, &tim_oc); //初始化PWM输出参数
TIM_Cmd(TIM3, ENABLE); //开启定时器
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能捕获/比较模式寄存器
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能自动重装载寄存器
}
int main(void)
{
u16 i = 0;
u8 flag = 0;
TIM3_PWM_init(500, 72 - 1); //2k
while(1)
{
if(flag == 0)
{
i++;
if(i == 300)
{
flag = 1;
}
}
else
{
i--;
if(i == 0)
{
flag = 0;
}
}
TIM_SetCompare1(TIM3, i); //配置捕获/比较寄存器,修改占空比
delay_ms(10);
}
}
stm32 PWM的更多相关文章
- STM32 PWM的输出与Keil软件仿真
导读:PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值). PWM控制技术在逆变电路中应用最广,应用 ...
- STM32 PWM波
利用STM32产生占空比可以调节的PWM波 科普:pwm(Pulse Width Modulation)脉宽调制 关于pwm波的产生:1.首先来看一下代码: pwm波模式的相关配置(利用的是定时器TI ...
- stm32 pwm 电调 电机
先上代码 python 树莓派版本,通俗表现原理.stm32 C语言版本在后面 import RPi.GPIO as GPIO import time mode=2 IN1=11 def setup( ...
- STM32 PWM输出(映射)
STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通用定时器也能同时产生多达 4 ...
- stm32 PWM输出学习
STM32 的定时器除了 TIM6 和 7,其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.通用定时器也能同时产生多达 4路 ...
- WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)
一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一) 小理论 WS2812B是一种智能控制LED光源,将控制电路 ...
- STM32 PWM功能在关闭时GPIO电平不确定的情况
刚开始接触STM32,遇到一个项目中出现在产品调试中出现在关闭PWM输出时,GPIO电平有不确定的情况.在网上查阅资料发现大神们是这样解释的:PWM在一个脉冲没有结束时关闭输出,会导致GPIO电平不确 ...
- STM32——PWM基本知识及配置过程
将通用定时器分为四个部分: 1,选择时钟 2,时基电路 3,输入捕获 4,输出比较 本节定时器PWM输出主要涉及到定时器框图右下方部分,即输出比较部分 和上一讲相同,时基时钟来源于内部默认时钟 对此有 ...
- STM32 PWM注意事项
频率: f = 时钟周期 / Prescaler / Period: 占空比 = ( Pulse / Period )* 100 %: 需要注意的是,Pulse 不能大于 Period
随机推荐
- Qt编写控件属性设计器4-加载属性
一.前言 控件能加载拖曳拉伸了,这些都是基本的前提工作,接下来的重点就是要动态加载选中控件的属性了,Qt的属性机制那是异常的强大,只能用强大到爆来形容,Qt中编写自定义控件,如果属性都用Q_PROPE ...
- iOS-模态视图动画
ios视图切换的动画效果 方法1.把下面的这段代码加到viewController或者view出现的时候就OK self.view.transform=CGAffineTransformMakeSca ...
- 欧姆龙 EntherNet/IP(CIP报文格式)
Enthip/IP_ CIP报文格式 测试Demo在文章末尾 注册请求帧: 0x65 0x00 注册请求命令 2byte 0x04,0x00 header长度2byte < 封装头& ...
- vue+element项目中过滤输入框特殊字符小结
可以在main.js中写入方法 Vue.prototype.validSe = function (value, number = 255) { value = value.replace(/[`-* ...
- 【计算机视觉】Selective Search for Object Recognition论文阅读1
Selective Search for Object Recognition 作者: J. R. R. Uijlings, K. E. A. van de Sande, T. Gevers, A. ...
- 向量空间模型(Vector Space Model)
搜索结果排序是搜索引擎最核心的构成部分,很大程度上决定了搜索引擎的质量好坏.虽然搜索引擎在实际结果排序时考虑了上百个相关因子,但最重要的因素还是用户查询与网页内容的相关性.(ps:百度最臭名朝著的“竞 ...
- windows服务器入门 php的安装
下载PHP安装包(下载地址: http://windows.php.net/download/ ),本文档以5.3版本为例,选择如下图对应的安装包: 下载完成后进行安装PHP,需要选择Web服务时,选 ...
- PHP解析xml的方法
PHP解析xml的方法<pre><?php /** XML 文件分析类 * Date: 2013-02-01 * Author: fdipzone * Ver: 1.0 * * fu ...
- 《ucore lab1 exercise2》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:使用qemu执行并调试lab1中的软件 为了熟悉使用qemu和gdb进行的调试工作,我们进行如下的小练习: 从CPU加电后执行的第一条指令 ...
- vue+element-ui动态生成多级表头,并且将有相同字段下不同子元素合并为同一个
element表头要多层生成,下一级表头数据源必须是当前表头的子一级,这样一层一层嵌套可以生成多层表头: 要把数据处理成这种类型的数据 var arr = []; for (var key in ob ...