一·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引脚连接到TIM14GPIO_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,那么人眼就无法感知到灯的闪烁,而只能感知到灯的亮度。这时候,占空比越大,表示高电平的时间越长,灯就会越亮。
如果PWM信号的频率很低,比如小于50Hz,那么人眼就能感知到灯的闪烁,而不是灯的亮度。这时候,占空比越大,表示高电平的时间越长,灯就会闪烁得更明显。
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; //自动重载,输出频率为100HzTIM_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; //比较值80TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//有效状态为高电平//配置TIM3的中断触发:时间更新TIM_OC1Init(TIM14,&TIM_OCInitStructure);//使能TIM14工作TIM_Cmd(TIM14, ENABLE);}