目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-11-19 gingko 初次建立

STM32CubeMX教程十一——DAC输出直流电压实验

1.在主界面选择File–>New Project或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各种查找方式,可以选择芯片内核,型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F429IGHx。 3.配置RCC,使用外部时钟源 4.配置调试引脚 5.将LED对应的3个引脚(PH14,PI3,PI4)设置为GPIO_Output 6.引脚模式配置 7.配置DAC引脚 8.时钟源设置,选择外部高速时钟源,配置为最大主频 9.工程文件的设置, 这里就是工程的各种配置,我们只用到有限几个,其他的默认即可。IDE我们使用的是 MDK V5.27。 10.点击Code Generator,进行进一步配置

11.然后点击GENERATE CODE 创建工程 创建成功,打开工程。



实验十一:DAC实验——输出直流电压

一、实验目的与意义

  1. 了解STM32 DAC结构
  2. 了解STM32 DAC特征
  3. 掌握DAC的使用方法
  4. 掌握STM32 HAL库中DAC属性的配置方法
  5. 掌握KEIL MDK 集成开发环境使用方法

二、实验设备及平台

三、实验原理

DAC简介

DAC参数指标

DAC的分类

1 电阻型

2 电容型

3 电流型

4 STM32F4 DAC主要特点介绍

选用DAC通道 对应引脚
DAC1_OUT PA4

四、实验程序

1.主函数

int main(void)
{
   HAL_Init();
   SystemClock_Config();
   MX_GPIO_Init();
   MX_DAC_Init();
   LED_GREEN_ON;                       //点亮绿灯
   HAL_DAC_Start(&hdac,DAC_CHANNEL_1); //开启DAC通道1
   dac1.set_voltage (2.0);             //输出2.0电压
   while (1)
   {
   }
}

2. DAC结构体定义

DAC_HandleTypeDef hdac;
typedef struct __DAC_HandleTypeDef   
{  
   DAC_TypeDef                      *Instance;       //DAC寄存器基地址
   __IO HAL_DAC_StateTypeDef   	    State;           //传输状态
   HAL_LockTypeDef                  Lock;            //锁定对象
   DMA_HandleTypeDef                *DMA_Handle1;    //DAC1的DMA句柄参数
   DMA_HandleTypeDef                *DMA_Handle2;    //DAC2的DMA句柄参数 
   __IO uint32_t                    ErrorCode;       //DAC错误代码
} DAC_HandleTypeDef;
typedef struct  
{
   uint32_t DAC_Trigger;            //DAC触发功能
   uint32_t DAC_OutputBuffer;       //DAC输出缓冲区
}DAC_ChannelConfTypeDef;

3.DAC相关函数

DAC配置通道

HAL_StatusTypeDef  HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel)

参数:

DAC设置目标电压值

HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)

参数:

DAC开启通道:

HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel)

参数:

DAC在DMA模式开启通道:

HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment)

参数:

4. DAC部分程序

DAC初始化

void HAL_DAC_MspInit(DAC_HandleTypeDef* dacHandle)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(dacHandle->Instance==DAC)
  {
   __HAL_RCC_DAC_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
   GPIO_InitStruct.Pin = GPIO_PIN_4;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;    //设置为模拟输入
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  }
}

DAC设置电压

#include "dac.h"
#include "dac1.h"
#include "stm32f4xx_hal.h"
static void set_voltage(double);
DAC_T dac1 = {
  .set_voltage = set_voltage
  };
void set_voltage(double voltage)
{  
unsigned short int temp;
temp = voltage * 4096 / 2.5;
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);
}

五、实验步骤

  1. 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连);
  2. 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电;
  3. 打开Keil MDK 开发环境,并打开本实验工程;
  4. 烧写程序到iCore3L上;
  5. 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。

六、实验现象

iCore3L 双核心板绿色LED灯点亮,用电压表测量PA4引脚发现有2.0V电压输出。