当前位置:首页 > 技术 > Cortex-M3 > 正文内容

STM32CubeMX系列教程8:数模转换(DAC)

Watrt9年前 (2017-12-16)Cortex-M327130
1.DAC单次转换
       本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。PA5管脚配置为DAC输出通道2。

DAC配置为默认配置不需修改。

生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_dac.h头文件中可以看到DAC的操作函数。

/** @addtogroup DAC_Exported_Functions_Group2
  * @{
  */
/* I/O operation functions ****************************************************/
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment);
HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel);
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel);
/**
  * @}
  */
 
/** @addtogroup DAC_Exported_Functions_Group3
  * @{
  */
/* Peripheral Control functions ***********************************************/
HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);


在main()函数中添加程序设置DAC输出的数据为12位右对齐,数值为2048.则实际输出的电压为

2048/4096x3.3V=1.65V,使能ADC通道2开始转换。

/* USER CODE BEGIN 2 */
  /*##-1- Set DAC channel1 DHR12RD register ################################################*/
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 2048);
   
  /*##-2- Enable DAC Channel1 ################################################*/
HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
/* USER CODE END 2 */


编译程序并下载到开发板。如果没有出错用万用表测PA5管脚的电压为1.65V

2.定时器控制DAC产生三角波

    复制刚才的工程,修改文件夹名DAC_SignalsGeneration。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。PA5管脚配置为DAC输出通道2。DAC配置触发(Trigger)为定时器2触发,波形生成模式(Wave generation mode)为三角波发生器(Triangle wave generation).最大三角波幅(Maximum Triangle Amplitude)为4095,即为3.3V(参考电压为3.3V)。


开启定时器2,并设置如下,触发事件选择TRGO(Trigger Event Selection TRGO)为更新事件。



TRGO为触发信号,在第三章的基本定时器中可以找到触发信号TRGO,当定时器发送更新事件时,即发生溢出等事件时,定时器会发送触发信号TRGO到DAC,触发DAC转换输出模拟量

生成报告以及代码,编译程序。在main函数中添加应用程序开启定时器2,并开启ADC通道2转换。

/* USER CODE BEGIN 2 */
printf("\r\n DAC EXAMPLE !!!\r\n");
/*##-1- Start the TIM Base generation in interrupt mode ####################*/
HAL_TIM_Base_Start(&htim2);
 
/*##-2- Enable DAC Channel1 ################################################*/
HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
/* USER CODE END 2 */


编译程序并下载到开发板。用示波器观测PA5管脚是否产生三角波。接上Analog Test Board模块到SPI1接口,并给模块接上5V电源。按下复位会听到喇叭发声响声。


打赏 支付宝打赏 微信打赏

相关文章

STM32CubeMX系列教程

STM32CubeMX系列教程

STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。平台包括了STM32Cube 硬件抽象层(一个STM32抽象层嵌入式软件,确保在STM32系列最大化的便携性)和一套的中间件组件(RTOS, USB, FatFs, TCP/IP,  Graphics, 等等).直观的STM32微控制器的选择和时钟树配置微控制器图形化配置外围设备和中间件的功能模式和初始化参数C代码生成项目覆盖STM32微控制器的初始化符合IAR™,Keil的™和GCC编译...

STM32CubeMX系列教程7:模数转换(ADC)

STM32CubeMX系列教程7:模数转换(ADC)

本章通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通道电压,然后得出MCU内部温度。第二个通过DMA的方式采集两个ADC通道电压。1.ADC       本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。ADC1外设选择温度传感器通道。ADC1配置如下,选择默认设置。其Date Alignment设置为数据...

STM32CubeMX系列教程15:看门狗(WDG)

STM32CubeMX系列教程15:看门狗(WDG)

一、看门狗简介        看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统。二、独立看门狗(IWDG)         前文再续,书接上一会,上一章说到待机模式可以通过IWDG唤醒,独立看门口功能框图如下。实际上独立看门口狗就是一个递减计...

STM32CubeMX系列教程22:LCD-TFT控制器(LDTC)

STM32CubeMX系列教程22:LCD-TFT控制器(LDTC)

一、LTDC简介        LCD-TFT(液晶显示器 —— 薄膜晶体管)显示器控制器提供并行数字 RGB(红色、绿色、蓝色)以及水平同步、垂直同步、像素时钟和数据使能信号,这些信号直接输出到不同 LCD和 TFT 面板的接口。本章通过Open746I-C开发板控制微雪7inch Capacitive Touch LCD (F)型LCD。其原理图如下:(注:本章介绍的是通过LDTC控制RGB接...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。