Download presentation
Presentation is loading. Please wait.
Published byPatience Paul Modified 5年之前
1
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 开源电子网 公众平台:“正点原子” 官方网站: 联系电话: ddddd ALIENTEK 淘宝店铺: 技术论坛:
2
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 PWM输出实验 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ddddd 淘宝店铺: 技术论坛:
3
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
PWM输出实验 参考资料: 探索者STM32F4开发板: 《STM32F4开发指南-库函数版本》-第14章 PWM实验 STM32F4xx官方资料: 《STM32F4xx中文参考手册》-第16章 通用定时器 淘宝店铺: 技术论坛:
4
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
目录 通用定时器PWM概述 1 常用寄存器和库函数配置 2 手把手写PWM输出实验 3 淘宝店铺: 技术论坛:
5
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 STM32 PWM工作过程 淘宝店铺: 技术论坛:
6
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 STM32 PWM工作过程 淘宝店铺: 技术论坛:
7
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 STM32 PWM工作过程(通道1为例) CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。 CCMR1: OC1M[2:0]位: 对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】 CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。 CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。 淘宝店铺: 技术论坛:
8
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 PWM模式1 & PWM模式2 寄存器TIMx_CCMR1的OC1M[2:0]位来分析: 淘宝店铺: 技术论坛:
9
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 STM32 PWM工作过程 淘宝店铺: 技术论坛:
10
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 STM32 PWM void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); 淘宝店铺: 技术论坛:
11
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 自动重载的预装载寄存器 void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); 简单的说,ARPE=1,ARR立即生效。。。APRE=0,ARR下个比较周期生效。 淘宝店铺: 技术论坛:
12
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
通用定时器PWM概述 STM32 定时器14输出通道引脚 这里需要纠正,通用定时器9-14,有的有2个通道,有的只有一个。 Datasheet中表格会有详细说明 淘宝店铺: 技术论坛:
13
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
PWM输出库函数概述 PWM输出库函数 void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); typedef struct { uint16_t TIM_OCMode; //PWM模式1或者模式2 uint16_t TIM_OutputState; //输出使能 OR失能 uint16_t TIM_OutputNState; uint16_t TIM_Pulse; //比较值,写CCRx uint16_t TIM_OCPolarity; //比较输出极性 uint16_t TIM_OCNPolarity; uint16_t TIM_OCIdleState; uint16_t TIM_OCNIdleState; } TIM_OCInitTypeDef; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure. TIM_Pulse=100; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2 淘宝店铺: 技术论坛:
14
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
PWM输出库函数概述 设置比较值函数: void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Comparex); 使能输出比较预装载: void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); 使能自动重装载的预装载寄存器允许位: void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); 淘宝店铺: 技术论坛:
15
手把手写PWM输出实验 要求: 使用定时器14的PWM功能,输出占空比可变的PWM波,用来驱动LED灯,从而达到LED【PF9]亮度由暗变亮,又从亮变暗,如此循环。
16
手把手写PWM输出实验 PWM输出配置步骤: 使能定时器14和相关IO口时钟。
使能定时器14时钟:RCC_APB1PeriphClockCmd(); 使能GPIOF时钟:RCC_AHB1PeriphClockCmd (); ② 初始化IO口为复用功能输出。函数:GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能 GPIOF9复用映射到定时器14 GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); ④ 初始化定时器:ARR,PSC等:TIM_TimeBaseInit(); ⑤ 初始化输出比较参数:TIM_OC1Init(); ⑥ 使能预装载寄存器: TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); 使能自动重装载的预装载寄存器允许位TIM_ARRPreloadConfig(TIM14,ENABLE); 使能定时器。 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare1();
17
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3. 手把手写代码 手把手写PWM输出实验 GO!! 淘宝店铺: 技术论坛:
18
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 淘宝店铺: 技术论坛:
Similar presentations