娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月29日(星期四)

2019年05月29日 | 使用STM32控制無源蜂鳴器發聲播放音樂(STM32_07)

發布者:草莓熊貓 來源: eefocus關鍵字:STM32控制  無源蜂鳴器  播放音樂 手機看文章 掃描二維碼
隨時隨地手機看文章

一、無源蜂鳴器有源蜂鳴器


有源蜂鳴器內含振蕩源,只要一通電就發聲,但發生頻率固定,音色單一;無源蜂鳴器內部不含振蕩源,內部結構相當于電磁場揚聲器,可以通過給他輸出一定頻率的信號才能發聲。


人耳能聽到的頻率范圍在20Hz--20kHz之間,通過STM32的GPIO引腳快速切換高低電平輸出就能實現無源蜂鳴器的發聲,切換的頻率不同,發出的音調就不一樣。


二、音樂播放的實現


一段音樂就是不同頻率的聲音按一定的時間節拍轉換發出。所以音樂包含音調和節拍信息。

如果要實現歌曲“紅塵情歌”,要準備相應的數據。


歌譜如下:



程序中首先準備音頻數據表:


//         低Si Do Re  Mi  Fa So  La  Si ?高Do?高Re?高Mi?高Fa?高So 無


uc16 tone[] ={247,262,294,330,349,392,440,294,523,  587,  659,  698,  784,  1000};


u8 music[]={  5,5,6,8,7,6,5,6,13,13,……};//音調


u8 time[] = {  2,4,2,2,2,2,2,8,4, 4, ……}; //節拍時間


依次從音調數組中取music[i],然后根據music[i]的值在tone數組中得到該音的發聲頻率(tone[music[i]]),調用sound函數控制蜂鳴器發聲,聲音的發聲時間有time數組控制。


三、項目創建與配置


1、創建項目文件夾(設為pMusic)


2、通過Keil5創建新項目,保存在所創建的文件夾中(設項目名為pMusic),選擇MCU芯片為"STM32F103ZE"(本程序使用的硬件為:STM32-PZ6806L開發板


3、在pMusic項目文件夾中新建"CMSIS"、"Device"、"Public"、"Startup"、"User"和"Lib"文件夾。


①  在"CMSIS"文件夾中復制"core_cm3.h"和"core_cm3.c"文件;


②  在" Device "文件夾中復制"stm32f10x.h"、"system_stm32f10x.h"和"system_stm32f10x.c"文件;


③  在" Startup "文件夾中復制"startup_stm32f10x_hd.s"文件;


④在"Lib"文件夾中新建"inc"和"src"兩個子文件夾,在"inc"文件夾中復制"misc.h"、"stm32f10x_gpio.h"和"stm32f10x_rcc.h"文件;在"src"文件夾中復制"misc.c"、"stm32f10x_gpio.c"和"stm32f10x_rcc.c"文件;


4、為項目添加"CMSIS"、"Device"、"Public"、"Startup"、"User"和"Lib"組,并將上述C程序文件和"startup_stm32f10x_hd.s"啟動文件加入到相應組中。展開項目樹如下:



5、打開“項目配置”對話框,在"Output"選項卡中選擇"Create HEX File",在"C/C++"選項卡中的"Include Paths"中添加如下包含路徑:".CMSIS;", ".Device;", ".Libinc;",".Public;"。


(以上步驟可以參看:使用STM32固件庫操作控制LED燈(CMSIS)   使用STM32固件庫函數操作控制LED燈


6、在"stm32f10x.h"中添加函數參數檢查宏


(參看:使用STM32固件庫函數操作控制LED燈)


#ifdef  USE_FULL_ASSERT


/**


  * @brief  這個assert_param宏用于函數參數檢查


  * @param  expr:如果expr是 false,就調用 assert_failed函數報告源文件名和


  *         失敗的行號,如果expr是 true ,就返回一個空值


  * @retval None


  */


  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))


/* Exported functions ------------------------------------------------------- */


  void assert_failed(uint8_t* file, uint32_t line);


#else


  #define assert_param(expr) ((void)0)


#endif /* USE_FULL_ASSERT */


7、新建一個文件(system.h),保存到"Public"文件夾中,內容為:


#ifndef __SYSTEM__H


#define __SYSTEM__H


#include "stm32f10x.h"


//定義位帶地址宏


#define BITBAND(addr,bitnum) ((addr&0xF0000000) + 0x02000000 + ((addr&0x000FFFFF)<<5) + (bitnum<<2))


#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))


#define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum))


//IO口地址映射


//數據輸出寄存器地址


#define GPIOA_ODR_Addr          (GPIOA_BASE + 12)


#define GPIOB_ODR_Addr (GPIOB_BASE + 12)


#define GPIOC_ODR_Addr (GPIOC_BASE + 12)


#define GPIOD_ODR_Addr          (GPIOD_BASE + 12)


#define GPIOE_ODR_Addr (GPIOE_BASE + 12)


#define GPIOF_ODR_Addr (GPIOF_BASE + 12)


#define GPIOG_ODR_Addr          (GPIOG_BASE + 12)


//數據輸入寄存器地址


#define GPIOA_IDR_Addr  (GPIOA_BASE + 12)


#define GPIOB_IDR_Addr  (GPIOB_BASE + 12)


#define GPIOC_IDR_Addr  (GPIOC_BASE + 12)


#define GPIOD_IDR_Addr  (GPIOD_BASE + 12)


#define GPIOE_IDR_Addr   (GPIOE_BASE + 12)


#define GPIOF_IDR_Addr   (GPIOF_BASE + 12)


#define GPIOG_IDR_Addr  (GPIOG_BASE + 12)


#endif


該文件定義了GPIO端口位帶操作的宏。


(位帶操作請參看:通過位帶地址操作GPIO在數碼管顯示數字)


8、新建文件"SysTick.h",保存到"Public"文件夾中,內容為:


#ifndef __SysTick__H


#define __SysTick__H


#include "stm32f10x.h"


void SysTick_Init(u8 SYSCLK);


void delay_us(u32 nus);


void delay_ms(u16 nms);


#endif


新建文件"SysTick.c",保存到"Public"文件夾中,內容為:


#include "SysTick.h"


#include "misc.h"


u8 fac_us = 0;


u16 fac_ms = 0;


void SysTick_Init(u8 SYSCLK)


{


         SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);


         fac_us = SYSCLK / 8;


         fac_ms = (u16)fac_us*1000;


}


 


void delay_us(u32 nus)


{


         u32 temp;


         SysTick->LOAD = nus * fac_us;


         SysTick->VAL = 0;


         SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;


         do{


                   temp = SysTick->CTRL;


         }while((temp&0x01)&&(!(temp&(1<<16))));


         SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;


         SysTick->VAL = 0;


}


void delay_ms(u16 nms)


{


         u32 temp;


         SysTick->LOAD = nms * fac_ms;


         SysTick->VAL = 0;


         SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;


         do{


                   temp = SysTick->CTRL;


         }while((temp&0x01)&&(!(temp&(1<<16))));


         SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;


         SysTick->VAL = 0;


}


這兩個文件實現了通過SysTick精準延時的函數,提供給后續的音頻頻率產生程序使用。


(關于SysTick,請參看:在STM32項目中使用SysTick實現延時)


將"SysTick.c"文件添加到項目的"Public"組中。


9、實現發聲


①開發板無源蜂鳴器的電路連接如下:


從電路連接可以看出通過MCU的PB5(GPIOB_5)控制蜂鳴器的發聲。


②在項目文件夾的"User"文件夾下新建"Beep"文件夾,在項目中新建"beep.h"文件,保存在"User/Beep"文件夾中,文件內容為:


#ifndef __BEEP__H


#define __BEEP__H


#include "system.h"


#include "stm32f10x_gpio.h"


#include "stm32f10x_rcc.h"


//定義GPIOB的位地址變量宏


#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n)


#define PBeep PBout(5)


#define BEEP_PORT   GPIOB


#define BEEP_PIN      GPIO_Pin_5


#define BEEP_PORT_RCC RCC_APB2Periph_GPIOB


void BEEP_Init(void);


void Sound(u16 frq);


void play(void);


#endif


③在項目中新建"beep.c"文件,保存在"User/Beep"文件夾中,文件內容為:


#include "beep.h"


#include "systick.h"


void BEEP_Init(void)


{


         GPIO_InitTypeDef GPIO_mode;


         RCC_APB2PeriphClockCmd( BEEP_PORT_RCC, ENABLE );         //使能GPIOB時鐘


         GPIO_mode.GPIO_Pin = BEEP_PIN;


         GPIO_mode.GPIO_Speed = GPIO_Speed_50MHz;


         GPIO_mode.GPIO_Mode = GPIO_Mode_Out_PP;


         GPIO_Init(BEEP_PORT, &GPIO_mode);      //設置GPIOB_5為推挽輸出,50MHz速度


}


 


void Sound(u16 frq)


{


         u32 n;


         if(frq != 1000) //如果頻率不為1000則按頻率輸出,否則只延時


         {


                   n = 500000/((u32)frq);


                   PBeep = 0;


                   delay_us(n);


                   PBeep = 1;


                   delay_us(n);


         }else


                   delay_us(1000);


}


 


void play(void)


{


         //             低7  1   2   3   4   5   6   7  高1 高2 高3 高4 高5 不發音


         uc16 tone[] = {247,262,294,330,349,392,440,294,523,587,659,698,784,1000};//音頻數據表


         //紅塵情歌


         u8 music[]={       5,5,6,8,7,6,5,6,13,13,//音調


                                                                           5,5,6,8,7,6,5,3,13,13,


                                                                   2,2,3,5,3,5,6,3,2,1,


                                                                           6,6,5,6,5,3,6,5,13,13,


 


                                                                           5,5,6,8,7,6,5,6,13,13,


                                                                           5,5,6,8,7,6,5,3,13,13,


                                                                   2,2,3,5,3,5,6,3,2,1,


                                                                           6,6,5,6,5,3,6,1,   

[1] [2]
關鍵字:STM32控制  無源蜂鳴器  播放音樂 引用地址:使用STM32控制無源蜂鳴器發聲播放音樂(STM32_07)

上一篇:S3C2440核心板原理圖設計:與SDRAM接線分析
下一篇:最后一頁

推薦閱讀

物流是鏈接供應端和消費者之間的重要紐帶,物流的發展改變了傳統的生活和消費方式。有數據顯示,我國的快遞業務量已經連續四年位居世界第一。隨著快遞業的高速增長,末端派送成本也不斷增加,尤其是物流末端消化能力的不足,等待時間長、派送時間沖突等,嚴重制約著整個物流行業效率的提升??焖佟⒅腔?、高效、互聯已經成為物流發展的主要目標,智能快遞柜...
IT之家5月28日消息 根據巴克萊分析師爆料稱,蘋果有計劃在2020年發布新款iPhone SE,搭載4.8英寸顯示屏?! Phone SE長期以來一直是蘋果的熱門產品,庫克幾年前指出,市場對這款小型設備的需求出人意料地強勁,甚至高于蘋果自己的內部預測。  iPhone SE填補了該公司iPhone產品線中的一個重要空白,它為用戶提供了一款價格實惠、功能先進、外形緊湊...
5月28日消息 據外媒sammobile報道,三星將從8月開始批量生產5nm Exynos芯片。三星7nm Exynos 990芯片此前因高功耗等問題備受爭議。后來,有消息稱三星正在對該芯片組進行改進,并計劃在今年下半年推出修訂版。  根據與ZDNet Korea交流的業內人士消息,三星已經完成了基于5nm EUV工藝的下一代Exynos SoC批量生產所需的所有準備工作。目前,...

史海拾趣

問答坊 | AI 解惑

基于DSP的自動對焦系統

基于DSP的自動對焦系統…

查看全部問答∨

數字電子技術專題復習資料

模擬信號——在時間上和數值上連續的信號。 數字信號——在時間上和數值上不連續的(即離散的)信號。 模擬電路——對模擬信號進行傳輸、處理的電子線路。 數字電路——對數字信號進行傳輸、處理的電子線路。 N進制數 十進制數:將N進制 ...…

查看全部問答∨

關于PXA270的PSSR寄存器求教

平臺PXA270+wince5.0 我在改一個touch驅動,其中需要判斷touch irq的狀態,即中斷引腳是高還是低,我的中斷信號連到了GPIO_40,所以我使用g_pGPIORegs->GPLR1 & 0x00000100來判斷high或者low,但是測試發現,不管touch有沒有點住,返回值都是h ...…

查看全部問答∨

找兼職windows mobile

找兼職   Win Mobile 開發人員      地點:上海   MSN:  bbbcow604610@hotmail.com …

查看全部問答∨

周鐵文-與您探討工業控制智能平臺

·直播時間:2007年11月23日上午10:00——11:30時 ·訪談嘉賓:周鐵文 張向東 ·嘉賓簡介:周鐵文-產品市場管理本部整機事業部總監                    張向東-紫金橋軟件石化領域 ...…

查看全部問答∨

也送個資料給大家

從別的地方蹌來的,初次上傳,東西不好的話,見諒了!…

查看全部問答∨

抓住機遇 LED模組市場前景不可限量

LED照明是繼白熾燈、熒光燈之后照明光源的第三次革命,它在節約能源方面優勢明顯。LED模組壽命長,發光效果更好,并且更節能,這些都是其發展極被看好的主要因素。LED(Light Emitting Diode),發光二極管,是一種固態的半導體器件,它可以直接把 ...…

查看全部問答∨

f28m35h52c好買嗎?

聽說這個片子很難買呀!…

查看全部問答∨

MSP430F1611系列的數據手冊或者例程

求助!使用MSP430F1611的,但是沒有講到MSP430F1611的IIC的寄存器,想下載又沒有,datasheet不全,有高手有datasheet關于MSP430F1611的寄存器的資料嗎,或者硬件iic的例程也可以,謝謝啊…

查看全部問答∨

STM32 3.0的固件庫

STM32 3.0的固件庫&nbsp; 里的MISC.C文件在工程中可以不要的嗎?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 桂阳县| 岑溪市| 霸州市| 罗源县| 乌鲁木齐市| 西青区| 新巴尔虎左旗| 伊宁市| 铜鼓县| 南昌县| 谢通门县| 松潘县| 柳州市| 孙吴县| 宣汉县| 濮阳县| 微山县| 天水市| 宁阳县| 玉屏| 浦县| 湖北省| 凉城县| 安远县| 台安县| 曲麻莱县| 蛟河市| 大渡口区| 三亚市| 衡山县| 平昌县| 长宁区| 凤城市| 广东省| 额尔古纳市| 和田县| 昌宁县| 泰州市| 兴宁市| 普陀区| 江北区|