STM32CubeMX教程17 DAC - 输出三角波噪声波
1、準備材料
正點原子stm32f407探索者開發板V2.4
STM32CubeMX軟件(Version 6.10.0)
keil μVision5 IDE(MDK-Arm)
ST-LINK/V2驅動
野火DAP仿真器
XCOM V2.6串口助手
一臺示波器
2、實驗目標
使用STM32CubeMX軟件配置STM32F407開發板的DAC OUT1實現輸出三角波
3、實驗流程
3.0、前提知識
STM32F407的DAC輸出引腳除可以輸出 DACoutput = VREF+ * DOR / 4095 的模擬電壓之外,其DAC控制邏輯中還有兩個重要的波形生成器 Wave generation mode ,分別為三角波和噪聲波,本小節的實驗主要以生成三角波為例,只會在“3.0、前提知識”中簡單提到噪聲波相關內容,在實際生成過程中兩者的設置類似,且均簡單易理解
使用DAC輸出指定三角波/噪聲波需要先指定DAC的輸出觸發源 Trigger ,DAC輸出的觸發源一共有7個,包括Timer 2/4/5/6/7/8 Trigger Out event和Software trigger,一般使用定時器的溢出時間作為DAC輸出的觸發源,本實驗采用了TIM6的溢出更新事件作為DAC OUT1 三角波的觸發源,所有可選的觸發源如下圖所示
當DAC輸出三角波時需要設置參數 Maximum Triangle Amplitude ,當觸發源定時器每次產生溢出更新事件時,DAC的輸出值就會從基值增加1/減少1,因為TIM6基礎定時器只能向上計數,因此當TIM6每次溢出時,DAC的輸出會增加1,直到增加到設置的 Maximum Triangle Amplitude 參數值為止,然后逐漸減少直到基值,這個過程會反復執行從而生成三角波
上述過程如下圖所示 (注釋1)
當DAC輸出偽噪聲波時需要設置 Noise Amplitude 參數,其主要配置生成噪聲波使用的12位LFSR寄存器解鎖的位,如下圖所示為DAC使用LFSR寄存器生成偽噪聲的算法結構圖,這里具體不做深究 (注釋1)
3.1、CubeMX相關配置
3.1.0、工程基本配置
打開STM32CubeMX軟件,單擊ACCESS TO MCU SELECTOR選擇開發板MCU(選擇你使用開發板的主控MCU型號),選中MCU型號后單擊頁面右上角Start Project開始工程,具體如下圖所示
開始工程之后在配置主頁面System Core/RCC中配置HSE/LSE晶振,在System Core/SYS中配置Debug模式,具體如下圖所示
詳細工程建立內容讀者可以閱讀“STM32CubeMX教程1 工程建立”
3.1.1、時鐘樹配置
系統時鐘使用8MHz外部高速時鐘HSE,HCLK、PCLK1和PCLK2均設置為STM32F407能達到的最高時鐘頻率,具體如下圖所示
3.1.2、外設參數配置
在Pinout & Configuration頁面左邊功能分類欄目Analog中單擊其中DAC
在Mode中勾選OUT1 Configuration
將DAC OUT1的觸發源選擇為TIM6外部觸發,最大三角波幅值設置為4095
具體配置如下圖所示
在Pinout & Configuration頁面左邊功能分類欄目Timers中單擊其中TIM6
勾選Activated激活定時器,配置其計數器參數溢出時間為0.1ms,具體參數解釋請閱讀“STM32CubeMX教程5 TIM 定時器概述及基本定時器”
外部事件觸發選擇更新事件Updata Event,具體配置如下圖所示
3.1.3、外設中斷配置
此實驗無需開啟DAC的任何中斷
3.2、生成代碼
3.2.0、配置Project Manager頁面
單擊進入Project Manager頁面,在左邊Project分欄中修改工程名稱、工程目錄和工具鏈,然后在Code Generator中勾選“Gnerate peripheral initialization as a pair of 'c/h' files per peripheral”,最后單擊頁面右上角GENERATE CODE生成工程,具體如下圖所示
詳細Project Manager配置內容讀者可以閱讀”STM32CubeMX教程1 工程建立“實驗3.4.3小節
3.2.1、外設初始化調用流程
請閱讀“STM32CubeMX教程16 DAC - 輸出3.3V內任意電壓”實驗“3.2.1、外設初始化調用流程”小節
3.2.2、外設中斷調用流程
此實驗無需開啟DAC的任何中斷
3.2.3、添加其他必要代碼
在主函數中啟動DAC通道1輸出,默認基值設置為0即可,源代碼如下所示
/*啟動DAC輸出*/
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
/*設置DAC三角波輸出基值*/
int32_t DacValue=0;
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_L,DacValue);
/*啟動TIM6觸發源*/
HAL_TIM_Base_Start(&htim6);
printf("Reset\r\n");
4、常用函數
請閱讀“STM32CubeMX教程16 DAC - 輸出3.3V內任意電壓”實驗
5、燒錄驗證
燒錄程序,單片機上電后,將示波器的探頭掛鉤與DAC OUT1引腳PA4相連接,接地環與開發板上的GND引腳連接,將示波器每格電壓幅值調節為1.00V,將每格子采集時間調節為400ms,然后開啟示波器對DAC OU1輸出的波形采集
設置Maximum Triangle Amplitud最大三角波幅值設置為2047時由示波器采集到的三角波如下圖所示,其中三角波的幅值電壓為1.48V,大致為3.3V的一半,波形頻率為2.446Hz,計算的周期大約為408.8ms,定時器溢出時間為0.1ms,期待的周期為0.120482=409.6ms,與示波器采集結果大致一致
設置Maximum Triangle Amplitud最大三角波幅值設置為4095時由示波器采集到的三角波如下圖所示,其中三角波的幅值電壓為2.96V,波形頻率為1.207Hz,計算的周期大約為828.5ms,定時器溢出時間為0.1ms,期待的周期為0.140962=819.2ms,與示波器采集結果大致一致
6、注釋解析
注釋1:圖片來源STM32F4xx 中文參考手冊
參考資料
STM32Cube高效開發教程(基礎篇)
更多內容請瀏覽 STM32CubeMX+STM32F4系列教程文章匯總貼
總結
以上是生活随笔為你收集整理的STM32CubeMX教程17 DAC - 输出三角波噪声波的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根目录和家目录的区别
- 下一篇: 神经网络优化篇:详解RMSprop