一·LED0脉冲宽度调制在TIM14_CHI,先将LED(PF9)代码配置为AF推挽输出模式,将PF9引脚连接到TIM14,
#include <stm32f4xx.h>
static GPIO_InitTypeDef GPIO_InitStruct;
void Led_init(void)
{
//打开端口F的硬件时钟,就是供电
//打开端口F的硬件时钟,就是供电
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
//打开端口E的硬件时钟,就是供电
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 ; //9 号引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //GPIO_Mode_AF;//输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;//高速,速度越高,响应越快,但是功耗会更高
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//不使能上下拉电阻
GPIO_Init(GPIOF,&GPIO_InitStruct);
//将PF9引脚连接到TIM14
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 ; //9 10号引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;//高速,速度越高,响应越快,但是功耗会更高
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//不使能上下拉电阻
GPIO_Init(GPIOF,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; //9 10号引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;//高速,速度越高,响应越快,但是功耗会更高
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//不使能上下拉电阻
GPIO_Init(GPIOE,&GPIO_InitStruct);
GPIO_WriteBit(GPIOF,GPIO_Pin_9,Bit_SET);
GPIO_WriteBit(GPIOF,GPIO_Pin_10,Bit_SET);
GPIO_WriteBit(GPIOE,GPIO_Pin_13,Bit_SET);
GPIO_WriteBit(GPIOE,GPIO_Pin_14,Bit_SET);
}
二·在配置TIM14定时器脉冲宽度
调动比较值1-100内,越小灯越亮
如果PWM信号的频率很高,比如大于80Hz,那么人眼就无法感知到灯的闪烁,而只能感知到灯的亮度。这时候,占空比越大,表示高电平的时间越长,灯就会越亮。文章来源:https://www.toymoban.com/news/detail-670699.html
如果PWM信号的频率很低,比如小于50Hz,那么人眼就能感知到灯的闪烁,而不是灯的亮度。这时候,占空比越大,表示高电平的时间越长,灯就会闪烁得更明显。文章来源地址https://www.toymoban.com/news/detail-670699.html
void TIM14_init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//使能TIM14的硬件时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
//配置TIM14的定时时间
TIM_TimeBaseStructure.TIM_Period = 100-1; //自动重载,输出频率为100Hz
TIM_TimeBaseStructure.TIM_Prescaler = 2100-1; //预分频值为8400 84000000/8400=10000(1S)
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //从0开始计数,然后计数到TIM_Period这个值就触发中断
TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1的工作模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//允许输出脉冲
TIM_OCInitStructure.TIM_Pulse = 20; //比较值80
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//有效状态为高电平
//配置TIM3的中断触发:时间更新
TIM_OC1Init(TIM14,&TIM_OCInitStructure);
//使能TIM14工作
TIM_Cmd(TIM14, ENABLE);
}
到了这里,关于STM32之17.PWM脉冲宽度调制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!