我正在尝试使用 DAC 和 DMA 生成频率为 8kHz 的三角波。DAC 使用定时器触发,因此 DAC 速度将为 1 MSPS。我正在研究 stm32L476 发现板。我正在使用 stm32CUBEMX 进行代码初始化。我的配置如下:
在 stm32CUBEMX 中:
Clock configuration : system clock = 80MHz
APB1 and APB2 peripheral clocks = 20 MHz
APB1 and APB2 timer clocks = 40 MHz
PLL source mux : HSI
PLLM = /1
*N = x10
/R = /8
PLLCLK selected
Timer : Prescalar = 39
UP counter
Period = 1
So that output frequency is 1 MHz to trigger the DAC.
DAC :
Output buffer : Enable
Trigger : TIM7 Event out
DMA(option inside DAC configuration in cubeMX): DAC channel 2(PA5), Half word, circular mode, priority = very high, memory(ticked) in cubeMX
我正在使用 ac6SW4stm32(系统工作台)编写代码。我为三角波创建了一个这样的数组。
const uint16_t val[]={130,260,390,520,650,780,910,1040,
1170,1300,1430,1560,1690,1820,1950,2080,
2210,2340,2470,2600,2730,2860,2990,3120,
3250,3380,3510,3640,3770,3900,4030,4095,
4030,3900,3770,3640,3510,3380,3250,3120,
2990,2860,2730,2600,2470,2340,2210,2080,
1950,1820,1690,1560,1430,1300,1170,1040,
910,780,650,520,390,260,130,0};
我主要添加了以下三个语句。这些语句分别启动定时器、DAC 和 DMA。
HAL_TIM_Base_Start(&htim7);
HAL_DAC_Start(&hdac1,DAC_CHANNEL_2);
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, (uint32_t*)val, 64, DAC_ALIGN_12B_R);
在输出端,我没有得到正确的三角波。波的频率是正确的,但波不是完美的三角形。它具有不同的上升和下降斜率(不相等的边缘)。