概述
本篇文章主要介绍如何使用STM32CubeMX移植到雅特力AT32F403AVGT7,并通过DAC输出电压,在芯片中有2个12位的DAC口可以供选择。
硬件准备
首先需要准备一个开发板,这里我准备的是雅特力AT32F403AVGT7的开发板:
述
选择芯片型号
雅特力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。