单片机/MCU论坛
直播中

记帖MCU

2年用户 137经验值
擅长:嵌入式技术 控制/MCU RF/无线
私信 关注
[讨论]

STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压

概述

本篇文章主要介绍如何使用STM32CubeMX移植到雅特力AT32F403AVGT7,并通过DAC输出电压,在芯片中有2个12位的DAC口可以供选择。

硬件准备

首先需要准备一个开发板,这里我准备的是雅特力AT32F403AVGT7的开发板:

https://www.bilibili.com/video/BV1r54y167N3

选择芯片型号

雅特力AT32F403AVGT7兼容STM32F103系列,故选取STM32f103VG进行开发。

配置时钟源

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

配置时钟树

雅特力AT32F403AVGT7最高频率到240M,但是STM32F1的最高主频到72M,同时使用不使用外部晶振时候,最高速度只能到64M,所以配置64即可:

DAC配置

然后设置PA4为DAC_OUT1, 完整引脚配置如下图。

生成工程设置

注意在生产工程设置中不能出现中文,不然会报错。

代码生成设置

最后设置生成独立的初始化文件。

生成代码

代码编写

在main.c中,添加DAC电压变量定义。

/* USER CODE BEGIN PTD */
int dac_i=0;//定义DAC电压值
/* USER CODE END PTD */

在main.c中,开启DAC通道1。

/* USER CODE BEGIN 2 */
    HAL_DAC_Start(&hdac, DAC_CHANNEL_1);//开启DAC通道1
  /* USER CODE END 2 */

在main.c中,主程序输出电压值,因为是12位的dac,所以值只能是0-4095.

/* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        if(dac_i<4096)
        {
            dac_i++;
            if(dac_i%512==0)//使得输出波形为阶梯状
                HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_i);//设置DAC值为dac_i
        }
        else
            dac_i=0;
  }
  /* USER CODE END 3 */

结果演示

因为是输出为阶梯状,每变量每增加512,电压改变一次,故应该有8个阶梯,分别是0,512,1024,1536,2048,2560,3072,3584。

更多回帖

发帖
×
20
完善资料,
赚取积分