熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-3-27 17:03
正文摘要:先上一下STM32的流程圖,幾個(gè)名詞了解一下,CNT:計(jì)時(shí)器,系統(tǒng)時(shí)鐘分頻而來72M,ARR寄存器:A(重裝載寄存器),CCR(比較/捕獲計(jì)時(shí)器)N,圖上標(biāo)錯(cuò)了,設(shè)置TIMx相關(guān)參數(shù)(主要就是N的值,為了保證50%占空比,所以A ... |
這部分是我改寫的,原作者寫的很亂 //蜂鳴器發(fā)出指定頻率的聲音 //usFreq是發(fā)聲頻率,取值 (人耳可聽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 //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM3 CH2的PWM脈沖波形 GPIOB.5 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO ulVal=7200000/usFreq;//聲音頻率 //主頻是72M不分頻,原作者是8M TIM3->ARR =2*ulVal ; //設(shè)置自動(dòng)重裝載寄存器 A 的值 ,原作者是 ulVal //ulVal TIM_SetCompare2(TIM3,ulVal);//TIM3比較/捕獲寄存器 N 重設(shè)置為 //原作者是ulVal /2,保證50%占空比 ->A=2N TIM_Cmd(TIM3, ENABLE); //啟動(dòng)TIM3 //IO輸出 為 周期 T = (N+1)*系統(tǒng)時(shí)鐘分頻 {即倒數(shù)為輸入聲波的方波} 的方波。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 |
主函數(shù)主要是初始化延時(shí)函數(shù)和初始化TIM3 int main(void) { delay_init();// TIM3_PWM_Init(14399,0); //TIM3預(yù)分頻系數(shù)為0,72M/0+1=72M,不分頻 while(1) { musicPlay(); // LED=!LED; delay_ms(50); } } |
Powered by 單片機(jī)教程網(wǎng)