STM32 定时器输出PWM的模式

发布者:DelightfulSmile最新更新时间:2019-01-30 来源: eefocus关键字:STM32  定时器  输出PWM 手机看文章 扫描二维码
随时随地手机看文章

数据手册上TIMx_CCMR1寄存器的6:4位决定了定时器输出PWM的几种模式:


000:冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT间的比较对OC1REF不起作用。即当计数器值与比较值相等时管脚上电平信号保持上一次的信号。


Eg:定时器设置:


TIM_TimeBaseStructure.TIM_Period = 1000; // 设置自动重载周期值

TIM_TimeBaseStructure.TIM_Prescaler = 47; // 设置预分频值48分频

TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIM向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 初始化TIM3


eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; // 输出比较模式设置为冻结模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间通道1管脚输出高电平(无效电平),到200后与比较值一致则锁定当前比较值,所以最终通道1管脚上电平为高电平。


001:匹 配 时 设 置 通 道 1 为 有 效 电 平 。当 计 数 器 TIMx_CNT 的 值 与 捕 获 / 比 较 寄 存 器1(TIMx_CCR1)相同时,强制OC1REF为高。


eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active; // 输出比较模式设置为冻结模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间管脚1输出高电平(无效电平),到200后与比较值一致则输出当前有效电平低电平,最终管脚1上电平为低电平。

010 : 匹 配 时 设 置 通 道 1 为 无 效 电 平 。 当 计 数 器 TIMx_CNT 的 值 与 捕 获 / 比 较 寄 存 器

1(TIMx_CCR1)相同时,强制OC1REF为低。



eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive; // 输出比较模式设置为冻结模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间管脚1输出高,到200后与比较值一致输出与设置极性相反的电平。设置有效电平为低,则实际输出高,所以最终通道1管脚一直输出高。

011:翻转。当TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平。


eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; // 输出比较模式设置为翻转模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间管脚1输出高,到200后与比较值一致输出与设置极性一样的电平。设置有效电平为低,则实际输出200高,800低。在中断中不断改变设置值则,可输出不同占空比的波形。

110: PWM模式1- 在向上计数时,一旦TIMx_CNT

无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否

则为有效电平(OC1REF=1)。


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 选择PWM模式2


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 比较输出使能

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性高

TIM_OC2Init(TIM3, &TIM_OCInitStructure);


TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); // 使能预装载寄存器


输出现象:计数器从0计数到199时通道输出低电平(无效电平)。到200时与比较值相同,输出有效电平高电平。使能了输出比较预装载值,所以可以稳定输出200脉冲的低800脉冲的高电平。


关键字:STM32  定时器  输出PWM 引用地址:STM32 定时器输出PWM的模式

上一篇:stm32-点亮led,流水灯
下一篇:STM32的位带操作分析

推荐阅读最新更新时间:2024-03-16 16:23

STM32_USART输入输出讲解
今天总结STM32F103串口,以工程实例来讲述。 工程现象: 1.间断发送字符 2.接收中断(接收字符,并发送该字符) 软件工程下载地址(360云盘): https://yunpan.cn/cPEI3zyQ7UqJv 访问密码ee52 讲述分如下几点: 一、初始化始终 这里的“时钟配置”函数在bsp.c文件下面; 使能串口1(RCC_APB2Periph_USART1)时钟。 二、USART1引脚配置 这里的“USART1引脚配置”函数在usart.c文件下面; 初始化串口使用引脚, 包含端口引脚、频率、输出类型。 三、串口配置 这里的“串口配置”函数在usart.c文件下面; 详见
[单片机]
STM32_USART输入<font color='red'>输出</font>讲解
proteus与keil Cx51的单片机仿真(定时器方式2应用)
用定时器1方式二计数,每计满100次,将P1.0取反。 电路图: c源程序: #include reg51.h sbit P1_0=P1^0; void main() { TMOD=0X61; TL1=0X9C; TH1=0X9C; TR1=1; for( ; ; ) { do {}while(!TF1); P1_0=!P1_0;TF1=0; } }
[单片机]
STM32F107VCT6的通用定时器的输入捕获功能配置
将TIM4配置成输入捕获功能用于计算矩形波的周期。 #define NVIC_Priority_Timer4 1 void TIM4_Init_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; //输入捕获结构体 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //时基结构体 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABL
[单片机]
STM32:ADC采集数据实例(采用DMA模式)
SOC:STM32F103RCT6 软件平台:STM官方库V3.5.0 开发工具:Keil 1. 摘要 本文章将给出STM32F103RCT6控制AT24C02的代码。如有疑问和错误,欢迎留言告之。 2.硬件连接 AT24C02使用I2C进行数据访问,板子上使用STM32的I2C控制器2和AT24C02进行连接。 具体来说,PB10作为SCL和AT24C02相连,PB11作为SDL和AT24C02相连。 这里就不给出硬件连接图了,比较简单。 3. AT24C022C访问代码(轮询) I2C这里使用轮询方法,不是中断,请留意。 首先,给出I2C控制器的初始化代码,和读写代码,一共三个函数,对应三个功能。 注意
[单片机]
初探STM32 SPI2中断接受多组数据的处理方式
一、描述 两块STM32板子之间进行SPI通讯,都使用的是SPI2。主机连续发送多组数据(数据的格式为半字,即16位),从机采用SPI2中断方式接受主机发过来的多组数据。 针对从机中断接受方法我尝试了两种方案: 方案一:从机每接收主机发来的一组数据就进入中断一次,即主机发来几组数据从机就进入几次中断。 方案二:仅当主机发来第一组数据时,从机才触发一次中断,然后关闭中断,以循环接受的方式接受主机发过来的剩下几组数据,当所有数据接受完后,再打开从机的接受中断。 二、程序 因为两种方案的主机程序是一样的,如下: uint16_t ADC_ConvertedValueLocal ; uint8_
[单片机]
STM32串口初始化
串口初始化的一般步骤: 1.GPIO时钟使能RCC_AHB 2.USART时钟使能RCC_APB 3.USART端口配置(调用GPIO_Init) 4.USART对应引脚复用映射GPIO_PinAFConfig 以PA9、PA10复用USART1为例,具体过程见代码: //关于时钟使能RCC函数名称的含义: //AHBx、APBx是总线名称 //寻找相关GPIO口对应的时钟使能函数的技巧: //在stm32f4xx_rcc.h下查找该GPIO口 void usart_init() { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClo
[单片机]
STM32-基本定时器TIM6-TIM7基本定时功能
  1. STM32的Timer简介   STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 定时器 计数器分辨率 计数器类型 预分频系数 产生DMA请求 捕获/比较通道 互补输出 TIM1 TIM8 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 有 TIM2 TIM3 TIM4 TIM5 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 没有 TIM6 TIM7 16位 向上 1-6553
[单片机]
STM32-基本<font color='red'>定时器</font>TIM6-TIM7基本定时功能
基于语音识别的汽车空调控制系统
引言 现在汽车上使用的电器越来越多,驾驶员需要手动操作的电器开关也越来越多,不但增加了驾驶员的负担,还影响了行车安全。本文以STM32F103VET6(以下简称STM32)芯片为控制核心,采用高性能LD3320语音识别芯片,设计基于语音识别的汽车空调控制系统。该系统可以用语音有效控制汽车空调,减轻了驾驶员的操作负担,保证行车过程中的安全。 1 系统硬件设计 运用语音识别技术,结合各种传感器对车身内外的环境(如气温、阳光强度等)以及制冷压缩机的状态等多种参数进行实时检测,与设定参数相比较,微控制器经过运算处理做出判断,输出相应的调节和控制信号。执行机构经过实时调整和修正,实现对车厢内空气环境全方位、多功能的调节和控制。系统
[单片机]
基于语音识别的汽车空调控制系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved