这部分是我改写的,原作者写的很乱
//蜂鸣器发出指定频率的声音
//usFreq是发声频率,取值 (人耳可听20Hz-20KHz)
void buzzerSound(unsigned short usFreq)
{
GPIO_InitTypeDef GPIO_InitStructure;
unsigned long ulVal;
if((usFreq<=20)||(usFreq>20000))//次音和超声过滤
{
buzzerQuiet();// 蜂鸣器静音
}
else
{
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
//设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
ulVal=7200000/usFreq;//声音频率 //主频是72M不分频,原作者是8M
TIM3->ARR =2*ulVal ; //设置自动重装载寄存器 A 的值 ,原作者是 ulVal //ulVal
TIM_SetCompare2(TIM3,ulVal);//TIM3比较/捕获寄存器 N 重设置为 //原作者是ulVal /2,保证50%占空比 ->A=2N
TIM_Cmd(TIM3, ENABLE); //启动TIM3
//IO输出 为 周期 T = (N+1)*系统时钟分频 {即倒数为输入声波的方波} 的方波。N=ulVal /2
}
}
|