這部分是我改寫的,原作者寫的很亂
//蜂鳴器發出指定頻率的聲音
//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
}
}
|