概述
本篇文章主要介绍如何使用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电压变量定义。
int dac_i=0;
在main.c中,开启DAC通道1。
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
在main.c中,主程序输出电压值,因为是12位的dac,所以值只能是0-4095.
while (1)
{
if(dac_i<4096)
{
dac_i++;
if(dac_i%512==0)
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_i);
}
else
dac_i=0;
}
结果演示
因为是输出为阶梯状,每变量每增加512,电压改变一次,故应该有8个阶梯,分别是0,512,1024,1536,2048,2560,3072,3584。
