在用pwm驱动蜂鸣器的开发中,pwm停止输出后一直处于低电位,这样蜂鸣器虽然不工作却仍然消耗70mah的电流。所以设置pwm结束后电平非常重要。我采用的办法和网上其它方法有所不同:
1.在pwm初始化时一定要设置gpio的状态。你设置的初始状态将决定pwm结束的状态。
GPIO_Init(GPIOD, GPIO_Pin_5 , GPIO_Mode_Out_OD_HiZ_Slow);//初始化 漏极开路,高阻抗电平,2兆赫
GPIO_WriteBit(GPIOD,GPIO_Pin_5,SET);//
gpio设定成开漏和推挽对电流影响不大
2.用 TIM1_CtrlPWMOutputs(DISABLE); 这个指令在其它控制PWM关断。
上源码:
void Time1_Init(void)//输出PD5 timer1初始化的库函数模式
{
// PD_DDR_DDR5 =0;//设置为输出
// PD_CR1_C15 =0;//推挽输出
GPIO_Init(GPIOD, GPIO_Pin_5 , GPIO_Mode_Out_OD_HiZ_Slow);//初始化 漏极开路,高阻抗电平,2兆赫
GPIO_WriteBit(GPIOD,GPIO_Pin_5,SET);//
CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,ENABLE);//开启TIM1时钟
TIM1_DeInit();
TIM1_TimeBaseInit(2,TIM1_CounterMode_Up,240,0); //分频1600,向上计数,TIM1_ARR=200,重复计数器为0
TIM1_OC3Init(TIM1_OCMode_PWM2,//PWM1模式2
TIM1_OutputState_Enable,//启用互补输出比较
TIM1_OutputNState_Disable,
50,//脉冲宽度初值是1000
TIM1_OCPolarity_Low,
TIM1_OCNPolarity_Low,
TIM1_OCIdleState_Set,
TIM1_OCNIdleState_Set);
TIM1_OC3PreloadConfig(ENABLE);
TIM1_Cmd(ENABLE); //定时器开始
TIM1_CtrlPWMOutputs(DISABLE); //用这个指令控制PWM关断
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』