編譯運(yùn)行很好,接在擴(kuò)音機(jī)上,8000HZ的量化噪聲也沒(méi)有聽(tīng)到。
KEIL5下編譯,PA5口聲音輸出,可以用一根線連接在蜂鳴器口上。
源程序如下:
- #include "system.h"
- #include "SysTick.h"
- #include "led.h"
- #include "usart.h"
- #include "key.h"
- #include "dac.h"
- /*******************************************************************************
- * 函 數(shù) 名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- int main()
- {
- u8 i=0;
- u8 key;
- int dac_value=0;
- u16 dacval;
- float dac_vol;
-
- SysTick_Init(72);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優(yōu)先級(jí)分組 分2組
- LED_Init();
- USART1_Init(9600);
- KEY_Init();
- DAC1_Init();
- TIM4_Init(257,35-1); //72000000/257/35=8000
-
- while(1)
- {
- key=KEY_Scan(0);
- if(key==KEY_UP)
- {
- dac_value+=400;
- if(dac_value>=4000)
- {
- dac_value=4095;
- }
- DAC_SetChannel2Data(DAC_Align_12b_R,dac_value);
- }
- else if(key==KEY_DOWN)
- {
- dac_value-=400;
- if(dac_value<=0)
- {
- dac_value=0;
- }
- DAC_SetChannel2Data(DAC_Align_12b_R,dac_value);
- }
-
- i++;
- if(i%20==0)
- {
- led1=!led1;
- }
-
- if(i%50==0)
- {
- dacval=DAC_GetDataOutputValue(DAC_Channel_2);
- dac_vol=(float)dacval*(3.3/4096);
- printf("輸出DAC電壓值為%.2fV\r\n",dac_vol);
- }
- delay_ms(10);
- }
- }
復(fù)制代碼 完整代碼見(jiàn)附件:
stm32 DAC數(shù)模wav源碼.zip
(461.67 KB, 售價(jià): 1 E幣)
用呼吸燈例程改的WAV音頻文件播放,音量大的時(shí)候有破音,原因何在?
8000HZ采樣率8位音頻。
我設(shè)置定時(shí)器用(計(jì)數(shù)器自動(dòng)重裝值=125,分頻=72),也就是72000000/72/125=8000。
查資料,原來(lái)PWM沒(méi)有自己?jiǎn)为?dú)的時(shí)鐘,而是共用定時(shí)器時(shí)鐘,也就是72000000/72=1000000
這樣在每一秒鐘8000次的中斷中,每一次中斷只能得到125個(gè)時(shí)鐘,就是說(shuō)脈寬只用125個(gè)等級(jí),我們8位音頻有250個(gè)等級(jí),這就造成了消頂失真。
解決辦法是,減少分頻,保證定時(shí)器計(jì)數(shù)器自動(dòng)重裝值為256*8000,即是每次計(jì)時(shí)中斷有256個(gè)計(jì)數(shù)。
【必讀】版權(quán)免責(zé)聲明
1、本主題所有言論和內(nèi)容純屬會(huì)員個(gè)人意見(jiàn),與本論壇立場(chǎng)無(wú)關(guān)。2、本站對(duì)所發(fā)內(nèi)容真實(shí)性、客觀性、可用性不做任何保證也不負(fù)任何責(zé)任,網(wǎng)友之間僅出于學(xué)習(xí)目的進(jìn)行交流。3、對(duì)提供的數(shù)字內(nèi)容不擁有任何權(quán)利,其版權(quán)歸原著者擁有。請(qǐng)勿將該數(shù)字內(nèi)容進(jìn)行商業(yè)交易、轉(zhuǎn)載等行為,該內(nèi)容只為學(xué)習(xí)所提供,使用后發(fā)生的一切問(wèn)題與本站無(wú)關(guān)。 4、本網(wǎng)站不保證本站提供的下載資源的準(zhǔn)確性、安全性和完整性;同時(shí)本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來(lái),僅供學(xué)習(xí)用途使用,請(qǐng)務(wù)必下載后兩小時(shí)內(nèi)刪除,禁止商用。6、如有侵犯你版權(quán)的,請(qǐng)及時(shí)聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|