STM32_定时器_PWM_笔记
来源:互联网 发布:dts hd mac 编辑:程序博客网 时间:2024/05/21 04:18
TIM6/TIM7无法输出PWM;
TIM1/TIM8为高级定时器,可输出7路PWM
TIM2/TIM3/TIM4/TIM5为普通定时器,可输出4路PWM
PWM配置案例:
#include "stm32f10x.h"void GPIO_TimPWM(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2 GPIOA_Pin_7输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //不解释}void TIM3_Configuration(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3 //假如我要产生50Hz占空比为50%的PWM波,方便控制舵机//设置方法://系统默认时钟为72MHz,预分频71+1次,得到TIM3计数时钟为1MHz//计数长度为19999+1=20000,可得PWM频率为1M/20000=50Hz//具体设置可参考上面的设置方法,简单明了! TIM_TimeBaseStructure.TIM_Prescaler = 72-1;//网上多数设置有误 TIM_TimeBaseStructure.TIM_Period = 20000-1; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割: TIM_CKD_DIV1 = 0,PWM波不延时(延时破坏占空比?待考证) TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ARRPreloadConfig(TIM3, DISABLE); //禁止ARR预装载缓冲器,也可以不用设置 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 //占空比设置方法: //占空比=(TIM_Pulse+1)/(TIM_Pulse+1)-(TIM_Period+1)=10000/20000=0.5=50% TIM_OCInitStructure.TIM_Pulse = 10000-1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR2上的预装载寄存器 //上面两句中的OC2确定了是channle几,要是OC3则是channel 3 TIM_CtrlPWMOutputs(TIM3,ENABLE); //设置TIM2的PWM输出为使能 TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设}int main(void){ GPIO_TimPWM(); TIM3_Configuration(); while(1) { } ;}
TIM_TimeBaseStructure.TIM_ClockDivision = 0;设置定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例的(与输入捕获相关),0表示滤波器的频率和定时器的频率是一样的。与PWM没关系。
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。TIM_Cmd(TIM3, ENABLE); //使能TIM3
PWM1和PWM2模式是由CCMR1的OC1M和OC2M来决定的:
110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
0 0
- STM32_定时器_PWM_笔记
- STM32_架构_笔记
- STM32_外部中断_笔记
- STM32_外部中断(寄存器版)_笔记
- stm32_时钟设置
- stm32_外部中断
- stm32_独立看门狗
- stm32_窗口看门狗
- STM32_外部中断
- STM32_入门程序LED
- STM32_按键中断
- STM32_简介、储存器映射、GPIO
- 单片机定时器笔记一则
- JavaScript 定时器笔记
- ok6410 定时器学习笔记
- QT笔记 ---定时器
- Linux内核定时器笔记
- js 笔记 定时器
- mybatis整合redis重写 生成key的方法
- 古堡算式
- java加密与签名
- Socket编程
- 企业管理的笑话,暗藏真理
- STM32_定时器_PWM_笔记
- IDEA Error:java: 未结束的字符串文字
- #define,const ,static 的使用总结
- ch6.正则表达式
- jqwidgets之jqxGrid后台分页排序过滤
- AppCompatActivity的出现
- Java自动内存管理偏爱二
- apache Nifi 概述
- 歪解Runtime