STM32F103VCT6 內置兩路 12 位 DAC,轉換速度官方未明確給出,網上常引用 1 MHz(即 1 μs)作為參考。對比 ADC 在 56/72 MHz 下約 1 μs 轉換時間,DAC 時序特性與 ADC 存在對稱關係。本文以定電壓輸出為例,講解 DAC 配置要點。
兩者配置流程幾乎相同,定電壓輸出只需額外調用一個函數觸發更新:
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
此函數將數據寄存器的值實際搬運到輸出緩衝器,否則 DAC 保持舊值不變。
void DAC_VOLTAGE_Configuration(void)
{
DAC_InitTypeDef DAC_InitStructure;
DAC_DeInit(); // 復位 DAC 外設
DAC_InitStructure.DAC_Trigger = DAC_Trigger_None; // 軟件觸發
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; // 不產生波形
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; // 關閉輸出緩衝(可根據負載決定)
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_1, ENABLE);
// 關鍵:軟件觸發更新輸出
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
}
配置完成後,使用 DAC_SetChannel1Data(DAC_Align_12b_R, value) 寫入數據。每次修改數據必須雙重調用:
DAC_SetChannel1Data(DAC_Align_12b_R, 4000); // 寫入 12 位右對齊數據
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE); // 觸發更新
DAC 數據寄存器與輸出緩衝器分離,寫入數據寄存器後不會立即反映到輸出腳。由於未使用定時器/DMA 硬件觸發,必須手動調用軟件觸發命令將數據搬移到輸出緩衝器,完成實際電壓更新。
DAC_Align_12b_R 等枚舉值不包含外設基址,切勿嘗試按 ADC 配置方式計算絕對地址傳入。DAC_OutputBuffer_Enable),但會引入輸出電壓偏移;直連 ADC 或高阻輸入可關閉以獲得軌到軌輸出。DAC_WaveGeneration_Noise/Triangle 並設置 DAC_Trigger_Tx_TRGO 連接定時器,可產生噪聲/三角波。DAC_GetCalibrationValue() 讀取並應用於高精度場合。Linux 網卡 IP 地址配置四大方法:臨時、圖形、文件與命令行永久配置
Linux 服務管理速查表:CentOS (SysV) vs Fedora (systemd) 指令對照
Linux 開機啟動流程深度剖析:從 BIOS 到 systemd
RedHat/CentOS 系統 Telnet 服務部署與安全加固完整指南
Linux 環境下備份策略全景:磁帶裝置存取、tar/cpio/dump 工具鏈、完全/增量/差分備份模式、自動化腳本與驗證機制
Linux 命令行 SVN 操作全攻略:從 Checkout 到分支合併常用命令