一、平台建立項目(以STM32H750VBxx系列為例)
二、配置
1、确認時鐘源
進入工程後打開 RCC 選項,選擇 Crystal/Ceramic Resonator,即使用外部晶振作為 HSE 的時鐘源。
2、配置系統時鐘
3、配置仿真和調試方式
4、DAC的配置
首先打開DAC OUT2通道,
觸發方式設定為TIM6事件觸發,
輸出緩沖Output Buffer建議關閉。DAC的輸出緩存可以用來減小輸出阻抗,無需外部運放即可直接驅動外部負載。但輸出不能達到0(會出現底部失真),不推薦開啟。具體參考官方手冊,緩沖器打開時低端的DAC輸出電壓大概0.2V(不同型号可能不同,暫未考證)
接着打開DAC的DMA,DMA的方式可以減輕CPU的負擔,配置如下,需要注意的是工作Mode配置為Circular(循環模式):
5、TIM6配置
觸發事件選擇為更新事件
由于TIM6是挂載在APB1LENR時鐘線上,在前邊步驟2系統時鐘的配置,是以TIM6我們設為了240M
計數周期為(38+1),觸發頻率為240M/39≈6153.8kHz。定時器的配置決定了輸出的正弦波的頻率。
三、代碼生成
1、工程項目的命名、選擇MDK-ARM編譯環境
2、生成代碼的配置
3、最後一步生成代碼
四、添加代碼
前邊我們定時器時鐘已經設為240M。
正弦波的頻率=主頻 /(TIM_Prescaler+1)/(TIM_Period+1)/ 點數
我們選80個點
f=240M/(0+1)/(38+1)/80≈76.9kHz.
打開我們的代碼工程
1、編寫一個正弦波生成函數,将一個周期的正弦波資料存儲在數組中,這裡一個周期為80個點。
uint16_t Dat[80];
void SineWave()
{
uint16_t i;
for( i=0;i<80;i++)
{
Dat[i]=(uint16_t)((2047*sin(i*2*3.14159/80))+2048);
}
}
2、在主函數中調用相關函數,産生周期的正弦波:
SineWave();//生成正弦資料
HAL_TIM_Base_Start(&htim6);//打開定時器6
HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_2,(uint32_t *)Dat,80,DAC_ALIGN_12B_R);//開啟DMA-DAC
添加完代碼,編譯通過後燒錄至闆子
3、用示波器觀察PA5
如下,頻率為76.9kHz的正弦波: