写在前面——
《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.7 DAC电压输出实验,讲述DAC的STM32CubeMX配置和程序设计
官方例程下载:https://pan.baidu.com/s/1QC5BnDgY1m1me6-ihQ_OUQ?pwd=nqb1
提取码:nqb1
4.7 DAC电压输出实验
4.7.1. 实验任务
- 参看官方例程(HAL_12_DAC),实现电压信号输出。
- 拓展功能:无。
4.7.2. 硬件连接
由上图可以看出,开发板上在扩展接口处引出了DAC的引脚。查阅芯片的数据手册,可知,2路DAC输出引脚: PA4 --> DAC1_OUT1; PA5 --> DAC1_OUT2
4.7.3. 初始化配置(STM32CubeMX)
这里只配置了DAC1(PA4 引脚)。RCC、SYS、时钟树等配置,请参考前述章节。
4.7.4. 应用程序设计(KEIL5)
生成代码后,KEIL5打开工程,main.c自动调用DAC的初始化函数:
在库包stm32G4xx_hal_dac.c中给定了DAC库函数HAL_DAC_SetValue(),该函数将指定的数值从DAC引脚(PA4/5)输出其电压值(v)。
先编写电压输出函数Dac1_Set_Vol(float vol),在main.c用户代码区域填入:
/* USER CODE BEGIN 0 */
void Dac1_Set_Vol(float vol)
{
uint16_t temp;
temp = (4096*vol/3.3f);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);
}
/* USER CODE END 0 */
在main函数中编辑程序,调用电压输出函数Dac1_Set_Vol(float vol),如(官方例程HAL_12_DAC):
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DAC1_Init();
/* USER CODE BEGIN 2 */
LCD_Init();
LCD_Clear(Blue);
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line0, (uint8_t *)" ");
LCD_DisplayStringLine(Line1, (uint8_t *)" ");
LCD_DisplayStringLine(Line2, (uint8_t *)" DAC Test ");
LCD_DisplayStringLine(Line3, (uint8_t *)" ");
LCD_DisplayStringLine(Line4, (uint8_t *)" ");
LCD_SetBackColor(White);
LCD_SetTextColor(Blue);
LCD_DisplayStringLine(Line5, (uint8_t *)" ");
LCD_DisplayStringLine(Line6, (uint8_t *)" DA1 CH1 ");
LCD_DisplayStringLine(Line7, (uint8_t *)" ");
LCD_DisplayStringLine(Line8, (uint8_t *)" PA4: 2.55V ");
LCD_DisplayStringLine(Line9, (uint8_t *)" ");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
Dac1_Set_Vol(2.55);
/* USER CODE END 2 */
该程序将实现LCD中显示输出电压值:2.55v
可用万用表测试PA4的输出电压值,如下图所示:
注意,该图中测试电压值为2.32,是因为其程序中输出函数指定了数值2.3:Dac1_Set_Vol(2.3);
DAC功能很多。但是比赛赛题里很少出现,这里不过多赘述,大家掌握其基本使用方法即可。