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

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

Watrt7年前 (2017-12-16)Cortex-M319780
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系列教程1:GPIO

STM32CubeMX系列教程1:GPIO

打开STM32CubeMX新建工程,选择STMF746IGT6芯片。选择外部高速晶振(HSE).根据Open746I-C开发板原理图(原理图可在微雪电子网站上下载),选择按键和LED引脚PA0,PG2,PG3,PD4,PD5,PD11为按键输入管脚,选择GPIO_INPUT模式。PB6,PB7,PH4,PI8为LED输出控制管脚,选择GPIO_OUTPUT模式。点击Clock Configuration配置系统时钟为216M最高速度。点击Configuration->GPIO配置管脚。五向...

STM32CubeMX系列教程20:Nand Flash

STM32CubeMX系列教程20:Nand Flash

一、Nand Flash 简介        Flash 中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。功能性分为两种:NOR Flash:允许随机存取存储器上的任何区域,以编码应用为主,其功能多与运算相关Nand Flash:主要功能是存储资料,适合储存卡之类的大量数据的存储。本章以K9F1G08U0E芯片为例讲解Nand Flash。如下为此芯片的数据手册...

STM32CubeMX系列教程21:SDRAM

STM32CubeMX系列教程21:SDRAM

在看下面教程之前,如果你之前没有使用过SDRAM,建议先看以下文档,以对SDRAM的原理和控制有一定的了解。高手进阶,终极内存技术指南——完整.doc一、SDRAM简介SDRAM(Synchronous Dynamic Random Access Memory)同步动态随机存取存储器·同步是指存储器工作需要同步时钟,内部命令的发送与数据传输都以它为基准·动态是指存储阵列需要不断的刷新来保证数据不丢失·随机存取是指存储器的内容可以以任意顺序访问,而不管前一次访问的是哪一个位置开发板使用的SDRAM...

STM32CubeMX系列教程27:ETH

STM32CubeMX系列教程27:ETH

在看本教程之前建议先看ST官方关于ETH的培训视频。本章不打算详细讲解LwIP协议栈,本章只是介绍如何通过STM32CubeMX软件生成初始化程序,并移植官方固件库里面的示例程序。http://www.stmcu.com.cn/videos.html        本章程序在LCD滚动显示字符工程的基础上修改,复制工程修改文件夹名。打开STM32cubeMX的工程文件重新配置,ETH选择RMII模式,使能LWIP。ETH 参数不作修改为默认设置。LWIP...

发表评论

访客

看不清,换一张

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