|
这部分是我改写的,原作者写的很乱 //蜂鸣器发出指定频率的声音 //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 } } |
|
// 低音频率 #define L1 262 #define L2 294 #define L3 330 #define L4 349 #define L5 392 #define L6 440 #define L7 494 // 中音频率 #define M1 523 #define M2 587 #define M3 659 #define M4 698 #define M5 784 #define M6 880 #define M7 988 // 高音频率 #define H1 1047 #define H2 1175 #define H3 1319 #define H4 1397 #define H5 1568 #define H6 1760 #define H7 1976 |
|
主函数主要是初始化延时函数和初始化TIM3 int main(void) { delay_init();// TIM3_PWM_Init(14399,0); //TIM3预分频系数为0,72M/0+1=72M,不分频 while(1) { musicPlay(); // LED=!LED; delay_ms(50); } } |