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

STM32 DAC 播放wav 語音

發布者:EnchantedWish最新更新時間:2024-10-08 來源: cnblogs關鍵字:STM32  DAC  語音 手機看文章 掃描二維碼
隨時隨地手機看文章

#define BITS_PER_SAMPLE_8 8

#define WAVE_DUMMY_BYTE 0xA5

#define DAC_DHR8R1_Address                              0x40007410

#define BUFFER_SIZE                                                 1024


 __IO uint16_t TIM6ARRValue = 1088;


uint32_t WaveDataLength = 13144;

uint32_t ReadOffset;


uint8_t Wavebuffer[BUFFER_SIZE];

//uint8_t Wavebuffer2[512];



#define SAMPLE_RATE_8000 8000

#define SAMPLE_RATE_11025 11025

#define SAMPLE_RATE_16000                                     16000

#define SAMPLE_RATE_22050 22050

#define SAMPLE_RATE_44100 44100

#define SAMPLE_RATE_48000                                     48000


extern const unsigned char AnsiChar[];



u16 GetARRValue(u16 sample)

{

    u16 arrValue;

    //??OCA????.WAV?????

    switch (sample)

    {

                case SAMPLE_RATE_8000 :

                        arrValue = (u16)(72000000/8000);

                        break; // 8KHz = 2x36MHz / 9000

                case SAMPLE_RATE_11025:

                        arrValue = (u16)(72000000/11025);

                        break; // 11.025KHz = 2x36MHz / 6531

                case SAMPLE_RATE_16000:

                         arrValue = (u16)(7000000/16000);

                        break; // 16KHz = 2x36MHz / 4500

                case SAMPLE_RATE_22050:

                        arrValue = (u16)(72000000/22050);

                        break; // 22.05KHz = 2x36MHz / 2365

                case SAMPLE_RATE_44100:

                        arrValue = (u16)(72000000/44100);

                        break; // 44.1KHz = 2x36MHz / 1633

                case SAMPLE_RATE_48000:

                        arrValue = (u16)(72000000/48000);

                        break; // 48KHz = 2x36MHz / 1500

                default:

                        arrValue = 0;

                        break;

    }

    return arrValue;

}




void WavRCCConfiguration(void)

{

  //SystemInit();

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

}



void WavGPIOConfiguration(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_SetBits(GPIOA,GPIO_Pin_4);//PA.4 ???

}


void WavTimerConfiguration(void)

{

     TIM_DeInit(TIM6);

     TIM6ARRValue = GetARRValue(SAMPLE_RATE_8000);

   TIM_SetAutoreload(TIM6, TIM6ARRValue); //TIM6ARRValue???72000000/22050

   TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);

   //TIM_Cmd(TIM6, ENABLE);

     TIM_Cmd(TIM6, DISABLE);

    

//     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

//    

//     TIM_DeInit(TIM6);

// TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

// TIM_TimeBaseStructure.TIM_Period = GetARRValue(SAMPLE_RATE_8000);//72MHz ?CPU,??44.1KHz ???,?????1633

// TIM_TimeBaseStructure.TIM_Prescaler = 0;

// TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;

// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

// TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

// // TIM8 TRGO selection

// TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);

}


void WavDACConfiguration(void)

{

    DAC_InitTypeDef DAC_InitStructure;

    DAC_DeInit();

  DAC_StructInit(&DAC_InitStructure);

  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;

    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;//?¨??·??ú?÷????

  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;

  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //DAC_OutputBuffer_Enable(?ù???ó???à)

    

  DAC_Init(DAC_Channel_1, &DAC_InitStructure);

    

    DAC_SetChannel1Data(DAC_Align_8b_R, 0); //jon ??????

    

  DAC_Cmd(DAC_Channel_1, ENABLE);

  DAC_DMACmd(DAC_Channel_1, ENABLE);

}


void WavNVICConfiguration(void)

{

    

  NVIC_InitTypeDef NVIC_InitStructure;

     /* Enable the TIM6 Interrupt */

// NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;

// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

// NVIC_Init(&NVIC_InitStructure);

//    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

    

  /* Enable the DMA1_Channel3 Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel3_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}


void WavDMAConfiguration(void)

{

    DMA_InitTypeDef DMA_InitStructure;

    DMA_DeInit(DMA2_Channel3);

  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_Address;

  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&AnsiChar[44];//(uint32_t)&Wavebuffer; //

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

  DMA_InitStructure.DMA_BufferSize = (9550-44);//BUFFER_SIZE; //

    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;

    

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;


  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

  DMA_Init(DMA2_Channel3, &DMA_InitStructure);

  DMA_Cmd(DMA2_Channel3, ENABLE);

    DMA_ITConfig(DMA2_Channel3, DMA_IT_TC | DMA_IT_HT, ENABLE);

}


void waveplaydma(int len)

{

    DMA_InitTypeDef DMA_InitStructure;

    DMA_DeInit(DMA2_Channel3);

  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_Address;

  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&AnsiChar[44];//(uint32_t)&Wavebuffer; //

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

  DMA_InitStructure.DMA_BufferSize = len;//BUFFER_SIZE; //

    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;

    

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;


  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

  DMA_Init(DMA2_Channel3, &DMA_InitStructure);

  DMA_Cmd(DMA2_Channel3, ENABLE);

    DMA_ITConfig(DMA2_Channel3, DMA_IT_TC | DMA_IT_HT, ENABLE);

}



void WavePlayer_Init(void)

{

        WavRCCConfiguration();

     WavNVICConfiguration();

        WavGPIOConfiguration();

        WavDACConfiguration();

        WavDMAConfiguration();

        WavTimerConfiguration();

}


int PlayFlg=0;

int PlayPingPong=0;


void WavPlayerStop(void)

{

    //DMA_ITConfig(DMA2_Channel3, DMA_IT_TC | DMA_IT_HT, DISABLE);

    ReadOffset = 0;

    WaveDataLength = 0;

    PlayFlg = 0;

    

    TIM_ITConfig(TIM6, TIM_IT_Update, DISABLE);

    DMA_Cmd(DMA2_Channel3, DISABLE);

    TIM_Cmd(TIM6, DISABLE);

    

    TIM_ClearITPendingBit(TIM6, TIM_IT_Update);

    DMA_ClearITPendingBit(DMA2_IT_HT3|DMA2_IT_TC3);

    

}


void PlayReadBlock(int offset)

{

        int i=0;

     int EndByte=WaveDataLength-ReadOffset;

    

     if(EndByte<512) //?á??

        {

                WavPlayerStop();

            

//            WaveDataLength = 0;

//            ReadOffset = 0;

  //            WavePlayer_Start(1);

[1] [2]
關鍵字:STM32  DAC  語音 引用地址:STM32 DAC 播放wav 語音

上一篇:STM32開啟USB CDC實現VCP功能
下一篇:stm32 PWM產生

推薦閱讀最新更新時間:2025-06-07 23:45

STM32實現DAC輸出的相關設置
STM32 DAC簡介 大容量的STM32F103具有內部DAC,戰艦STM32選擇的是STM32F103ZET6屬于大容量產品,所以是帶有DAC模塊的。 STM32的DAC模塊(數字/模擬轉換模塊)是12位數字輸入,電壓輸出型的DAC。DAC可以配置為8位或12位模式,也可以與DMA控制器配合使用。DAC工作在12位模式時,數據可以設置成左對齊或右對齊。DAC模塊有2個輸出通道,每個通道都有單獨的轉換器。在雙DAC模式下,2個通道可以獨立地進行轉換,也可以同時進行轉換并同步地更新2個通道的輸出。DAC可以通過引腳輸入參考電壓VREF+以獲得更精確的轉換結果。 STM32的DAC模塊主要特點有: ① 2個DAC轉換器:每個
[單片機]
STM32系列第20篇--DAC
特點: 2個DAC轉換器:每個轉換器對應1個輸出通道 (對應PA4和PA5) 8位或者12位單調輸出 12位模式下數據左對齊或者右對齊 同步更新功能 噪聲波形生成 三角波形生成 雙DAC通道同時或者分別轉換 每個通道都有DMA功能 DAC輸出電壓: 數字輸入經過DAC被線性地轉換為模擬電壓輸出,其范圍為0到Vref+。任一DAC通道引腳上的輸出電壓滿足下面的關系: DAC輸出 = Vref * (DOR / 4095)。 CODE: //dac.c#include dac.h void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DA
[單片機]
DAC如何幫助激光打標系統提高精度
即使銷售了成百上千甚至上百萬個產品,許多公司也會在他們售出的每一個產品上單獨刻印自己的商標。商標的打標和商標的蝕刻是由激光打標機來完成的,這個過程需要非常高的精度。隨著技術的進步,為了進行更精細的打標,這些系統的設計者面臨著使激光打標機更加精確的壓力。 使用高強度、低功率激光的激光打標機(圖1)能在手機、手工工具、印刷電路板(PCB)等任何東西上蝕刻出非常精確的設計。為了達到所需的輸出,需要借助一個精確的數模轉換器(DAC)非常小心地引導激光器。 圖1:激光切割機 那么DAC是如何控制激光的呢?DAC負責提供非常精確的輸出電壓,該電壓將被用作電機的模擬輸入。DAC的每個特定模擬輸入代碼都與特定的電機位置有關。此電機負責移動
[嵌入式]
<font color='red'>DAC</font>如何幫助激光打標系統提高精度
嵌入式學習⑩——STM的PWM和DAC
一、STM32F103輸出PWM 本部分參考自博客:(stm32f103學習總結)—stm32 PMW輸出實驗 PWM 是 Pulse Width Modulation 的縮寫,中文意思就是脈沖寬度調制,簡稱脈寬調制。它是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,其控制簡單、靈活和動態響應好等優點而成為電力電子技術最廣泛應用的控制方式。 其實我們也可以這樣理解,PWM是一種對模擬信號電平進行數字編碼的方法。通過高分辨率計數器的使用,方波的占空比被調制用來對一個具體模擬信號的電平進行編碼。 1.STM32F1 PWM介紹 STM32F1除了基本定時器TIM6和TIM7,其他定時器都可以產生PWM輸出
[單片機]
嵌入式學習⑩——STM的PWM和<font color='red'>DAC</font>
高響度警音發生器/電子仿聲驅鼠器/語音錄放電路設計
高響度警音發生器 本警音發生器電路簡單,工作性能穩定可靠,工作電壓 6V-12V,適合在汽車、摩托車上作警笛使用。 一、電路工作原理 電路原理如圖 27 所示。 本電路主要由發聲集成電路KD~9561和開關集成電路TWH8778組成,工作時,由KD-9561輸出警音信號,經TWH8778大電流開關集成電路處理放大后,推動揚聲器發出洪亮的報警聲。 二、元器件的選擇 IC用KD-9561發聲IC,也可以選用KD-9562發聲IC,按要求接線使之發出警音報警信號。IC2選用TWH8778開關電路,當電源電壓為12V時,喇叭BL應選擇89、3W以上的揚聲器或專用號筒式揚聲器,限流電阻R1的阻值3000~5109,D2 選用3V
[嵌入式]
高響度警音發生器/電子仿聲驅鼠器/<font color='red'>語音</font>錄放電路設計
WTK6900H語音識別芯片在電飯煲的應用
傳統的電飯煲大多數使用按鍵的方式進行操作,有部分廠家已經開始嘗試開發語音識別控制的電飯煲,利用聲控的方式進行與機器交互,智能語音控制的電飯煲,可以直接用語音操控,無需聯網,無需下載APP您就可以通過語音與電飯煲進行互動。 實現這一智能語音控制的核心元件是應用了離線語音識別芯片;與傳統的語音芯片相比,語音識別芯片最大的特點就是能夠語音識別,它能讓機器聽懂人類的語音,并且可以根據命令執行各種動作。 如何選擇語音識別控制芯片很重要,深圳唯創知音電子有限公司推出一款低成本、低功耗、高識別率的語音識別芯片方案,WTK6900H-24SS,他具有識別率高,工業級性能、簡單易用,更新詞條方便等優勢。擁有60條可定制詞條,支持中/英/日/
[嵌入式]
WTK6900H<font color='red'>語音</font>識別芯片在電飯煲的應用
WTK6900G語音識別芯片在空調遙控器的應用
如今現在的天氣逐漸炎熱,空調成為了我們的夏日伴侶,當然有的時候因為找不到空調遙控器而煩惱,別家的空調已經開始使用聲控的方式了,你還在為找不到遙控器而煩惱? 隨著智能化的科技逐漸興起,現在的電器設備都走向了智能化,空調也不例外,生產廠家為了提升用戶的使用體驗,會嵌入由深圳唯創知音電子有限公司,研發的一款低成本的離線語音識別芯片方案,實現多樣化的功能(聲控定時、開關、功能切換 等),加入WTK6900H-24SS語音識別芯片,躺在床上對著空調喊話,就可以對空調進行控制。 空調聲控方案,優先選擇深圳唯創知音電子,低成本,低功耗:WTK6900G語音識別方案,3~5米識別率可達90%以上,支持定制80條不同命令詞。 WTK69
[嵌入式]
炬芯科技推出ATB1113無電池光能量收集藍牙語音遙控器解決方案
隨著全球氣候變化問題日益凸顯,碳達峰、碳中和成為全球范圍內的熱門議題。在這一背景下,為應對全球氣候變化,推動經濟及社會綠色低碳發展,聚焦電池產業,歐盟2022年12月達成電池新法規臨時協議,該協議旨在使投放到歐盟市場的所有電池更具可持續性、循環性和安全性,解決與所有類型電池相關的社會、經濟和環境問題。‘’ 新電池法規將涵蓋從設計到報廢的整個電池生命周期,并適用于在歐盟銷售的所有類型的電池。據相關調查數據顯示,在全球范圍內每年大約產生數百億塊廢電池,其中,相當一部分廢電池來自全球大多數電視和機頂盒的遙控器。 無電池光能量收集藍牙語音遙控器,可以充分利用環境中的光能資源,無需外部電源或電池,從而避免了電池的損耗、充電和更換的問
[嵌入式]
炬芯科技推出ATB1113無電池光能量收集藍牙<font color='red'>語音</font>遙控器解決方案
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 工布江达县| 无极县| 琼结县| 阿克陶县| 山西省| 大同县| 如东县| 图木舒克市| 盘山县| 广安市| 白玉县| 合川市| 天水市| 盐山县| 定边县| 文水县| 开鲁县| 辽阳县| 柞水县| 岢岚县| 福贡县| 凭祥市| 潜江市| 滨海县| 南靖县| 福安市| 卢湾区| 嵩明县| 扎囊县| 南江县| 镇平县| 休宁县| 定安县| 安康市| 临汾市| 忻城县| 宜昌市| 昭通市| 丁青县| 泸州市| 麻城市|