STM32CubeMX學(xué)習(xí)筆記(19)——DAC接口使用(輸出三角波)

一、DAC簡(jiǎn)介

DAC(Digital-to-Analog Converter),即數(shù)字/模擬轉(zhuǎn)換模塊没卸,故名思議,它的作用就是把輸入的數(shù)字編碼秒旋,轉(zhuǎn)換成對(duì)應(yīng)的模擬電壓輸出办悟,它的功能與 ADC 相反。在常見的數(shù)字信號(hào)系統(tǒng)中滩褥,大部分傳感器信號(hào)被化成電壓信號(hào)病蛉,而 ADC 把電壓模擬信號(hào)轉(zhuǎn)換成易于計(jì)算機(jī)存儲(chǔ)、處理的數(shù)字編碼瑰煎,由計(jì)算機(jī)處理完成后铺然,再由 DAC 輸出電壓模擬信號(hào),該電壓模擬信號(hào)常用來(lái)驅(qū)動(dòng)某些執(zhí)行器件酒甸,使人類易于感知魄健。如音頻信號(hào)的采集及還原就是這樣一個(gè)過(guò)程。

STM32 具有片上 DAC 外設(shè)插勤,它的分辨率可配置為 8 位或 12 位的數(shù)字輸入信號(hào)沽瘦,具有兩個(gè) DAC 輸出通道革骨,這兩個(gè)通道互不影響,每個(gè)通道都可以使用 DMA 功能析恋,都具有出錯(cuò)檢測(cè)能力良哲,可外部觸發(fā)。

二助隧、DAC通道選擇

在 STM32 中具有 2 個(gè)這樣的 DAC 部件筑凫,每個(gè) DAC 有 1 個(gè)對(duì)應(yīng)的輸出通道連接到特定的引腳,即:PA4-通道 1并村,PA5-通道 2巍实,為避免干擾,使用 DAC 功能時(shí)哩牍,DAC 通道引腳需要被配置成模擬輸入功能(AIN)棚潦。

三、新建工程

1. 打開 STM32CubeMX 軟件膝昆,點(diǎn)擊“新建工程”

2. 選擇 MCU 和封裝

3. 配置時(shí)鐘
RCC 設(shè)置瓦盛,選擇 HSE(外部高速時(shí)鐘) 為 Crystal/Ceramic Resonator(晶振/陶瓷諧振器)


選擇 Clock Configuration,配置系統(tǒng)時(shí)鐘 SYSCLK 為 72MHz
修改 HCLK 的值為 72 后外潜,輸入回車,軟件會(huì)自動(dòng)修改所有配置

4. 配置調(diào)試模式
非常重要的一步挠唆,否則會(huì)造成第一次燒錄程序后續(xù)無(wú)法識(shí)別調(diào)試器
SYS 設(shè)置处窥,選擇 Debug 為 Serial Wire

四、DAC1

4.1 參數(shù)配置

Analog 中選擇 DAC 設(shè)置玄组,并選擇 OUT1 Configuration 通道1


或者在右邊圖找到 PA4 引腳滔驾,選擇 DAC_OUT1

具體配置參數(shù)如下。

  • OUT1/2 Configuration
    對(duì)應(yīng)兩個(gè)輸出通道俄讹。
  • External Trigger
    外部中斷EXTI9 觸發(fā) 就是使用外部中斷來(lái)觸發(fā)DAC哆致。
  • Output Buffer
    使能DAC輸出緩存。

DAC 集成了 2 個(gè)輸出緩存患膛,可以用來(lái)減少輸出阻抗摊阀,無(wú)需外部運(yùn)放即可直接驅(qū)動(dòng)外部負(fù)載。每個(gè) DAC 通道輸出緩存可以通過(guò)設(shè)置 DAC_CR 寄存器的 BOFFx 位來(lái)使能或者關(guān)閉踪蹬。如果帶載能力還不行胞此,后面就接一個(gè)電壓跟隨器,選擇運(yùn)放一定要選擇電流大的型號(hào)跃捣。
使能輸出緩沖后漱牵,DAC 輸出的最小電壓為 0.2V,最大電壓為 VREF+-0.2疚漆,而未使能輸出緩沖則輸出可達(dá)到0V酣胀。

  • Trigger
    選擇DAC的觸發(fā)方式
    Timer 2/4/5/6/7/8 Trigger Out event 定時(shí)器觸發(fā)刁赦,利用這種方式可以輸出特定的波形。在這里我們選擇定時(shí)器2闻镶。
    Software trigger 軟件觸發(fā)甚脉,在本模式下,向 DAC_SWTRIGR 寄存器寫入配置即可觸發(fā)信號(hào)進(jìn)行轉(zhuǎn)換儒溉。
  • Wave generation mode
    • Triangle wave generation:輸出三角波宦焦。
    • Noise wave generation:輸出噪聲。
  • Maximum Triangle Amplitude:最大三角波幅顿涣,設(shè)三角波幅值為3.3V波闹,即4095。

五涛碑、TIM2通用定時(shí)器

5.1 參數(shù)配置

Timers 中選擇 TIM2 設(shè)置精堕,時(shí)鐘源 Clock Source 選擇內(nèi)部時(shí)鐘 Internal Clock

Parameter Settings 進(jìn)行具體參數(shù)配置。

定時(shí)器頻率:

TIM2的定時(shí)器頻率:f = Tclk/[(psc+1) * (cnt+1)] = 72MHz/[4*9] = 2MHz蒲障。

  • 定時(shí)器時(shí)鐘Tclk:72MHz
  • 預(yù)分頻器psc:3
  • 自動(dòng)重裝載值cnt:8
  • Prescaler(時(shí)鐘預(yù)分頻數(shù)):4-1 則驅(qū)動(dòng)計(jì)數(shù)器的時(shí)鐘 CK_CNT = CK_INT(即72MHz)/(3+1) = 18MHz
  • Counter Mode(計(jì)數(shù)模式):Up(向上計(jì)數(shù)模式)
  • Counter Period(自動(dòng)重裝載值):9-1
  • auto-reload-preload(自動(dòng)重裝載):Disable(不使能)
  • TRGO Parameters(觸發(fā)輸出):Update Event(更新事件) 在定時(shí)器的定時(shí)時(shí)間到達(dá)的時(shí)候輸出一個(gè)信號(hào)(如:定時(shí)器更新產(chǎn)生TRGO信號(hào)來(lái)觸發(fā)ADC的同步轉(zhuǎn)換)

5.2 生成代碼

輸入項(xiàng)目名和項(xiàng)目路徑


選擇應(yīng)用的 IDE 開發(fā)環(huán)境 MDK-ARM V5

每個(gè)外設(shè)生成獨(dú)立的 ’.c/.h’ 文件
不勾:所有初始化代碼都生成在 main.c
勾選:初始化代碼生成在對(duì)應(yīng)的外設(shè)文件歹篓。 如 GPIO 初始化代碼生成在 gpio.c 中。

點(diǎn)擊 GENERATE CODE 生成代碼

六揉阎、庫(kù)函數(shù)

/* IO operation functions *****************************************************/
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel);     //開啟DAC輸出
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel);   //關(guān)閉DAC輸出
HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment); //需要函數(shù)中不斷開啟   //開啟DAC的DMA輸出
HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel); //關(guān)閉DAC的DMA輸出
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);  //設(shè)置DAC輸出值
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel);  //獲取DAC輸出值
/**
  * @brief  Starts the TIM Base generation.
  * @param  htim TIM Base handle
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);

七庄撮、修改main函數(shù)

添加 HAL_TIM_Base_Start() 函數(shù),啟動(dòng)定時(shí)器毙籽。
添加 HAL_DAC_Start()函數(shù)洞斯,啟動(dòng) DAC 輸出。

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_DAC_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start(&htim2);
  HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

八坑赡、實(shí)驗(yàn)現(xiàn)象


設(shè)三角波幅值為3.3V烙如,即4095,所以三角波的頻率為:定時(shí)器頻率/(設(shè)定值x2) = 2000000Hz/(4095x2) ≈ 244.2Hz毅否,與示波器測(cè)量結(jié)果244.9Hz接近亚铁。


九、注意事項(xiàng)

用戶代碼要加在 USER CODE BEGIN NUSER CODE END N 之間螟加,否則下次使用 STM32CubeMX 重新生成代碼后徘溢,會(huì)被刪除。


? 由 Leung 寫于 2021 年 3 月 16 日

? 參考:STM32CubeMX系列教程8:數(shù)模轉(zhuǎn)換(DAC)
    【STM32】HAL庫(kù) STM32CubeMX教程十---DAC
    輸出結(jié)果 配置_STM32CubeMX軟件開發(fā)教程——DAC輸出三角波

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捆探,一起剝皮案震驚了整個(gè)濱河市甸昏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徐许,老刑警劉巖施蜜,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雌隅,居然都是意外死亡翻默,警方通過(guò)查閱死者的電腦和手機(jī)缸沃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)修械,“玉大人趾牧,你說(shuō)我怎么就攤上這事】衔郏” “怎么了翘单?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蹦渣。 經(jīng)常有香客問(wèn)我哄芜,道長(zhǎng),這世上最難降的妖魔是什么柬唯? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任认臊,我火速辦了婚禮,結(jié)果婚禮上锄奢,老公的妹妹穿的比我還像新娘失晴。我一直安慰自己,他們只是感情好拘央,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布涂屁。 她就那樣靜靜地躺著,像睡著了一般灰伟。 火紅的嫁衣襯著肌膚如雪拆又。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天袱箱,我揣著相機(jī)與錄音,去河邊找鬼义矛。 笑死发笔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凉翻。 我是一名探鬼主播了讨,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼制轰!你這毒婦竟也來(lái)了前计?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤垃杖,失蹤者是張志新(化名)和其女友劉穎男杈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體调俘,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伶棒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年旺垒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肤无。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡先蒋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宛渐,到底是詐尸還是另有隱情竞漾,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布窥翩,位于F島的核電站业岁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳍烁。R本人自食惡果不足惜叨襟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幔荒。 院中可真熱鬧糊闽,春花似錦、人聲如沸爹梁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姚垃。三九已至念链,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間积糯,已是汗流浹背掂墓。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留看成,地道東北人君编。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像川慌,于是被迫代替她去往敵國(guó)和親吃嘿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容