STM32F103ZET6【HAL函开发】STM32CUBEMX-------DAC
STM32F103ZET6中只有两个DAC分别是:
DAC_OUT1------>PA4
DAC_OUT2------>PA5
本文中配置DAC_OUT2来进行使用,ADC1通道8来进行电压采集。
1. 首先配置外部时钟
选择外部晶振
这里可以配置成72M,也可以不用配置。
2 . 配置ADC
配置ADC通道8,我们不要其他模式,只要普通模式即可。
3.配置DAC
配置DAC_OUT2,并查看是否使用
4.配置串口
STM32F103ZET6中使用数据线连接的口是串口1(USART1)
PA9--------->TX
PA10------->RX
5.生成项目做准备
填写工程名和选择合适的MDK就行。
6.代码编辑
/* USER CODE BEGIN Includes */
#include "string.h"
/* USER CODE END Includes */
/* USER CODE BEGIN PTD */
uint8_t adc_date[]={0};
uint32_t adc_value=0;
uint16_t dac_value=2000; //在后面循环中该参数也需要修改,DAC输入的参数,,范围0~4096
/* USER CODE END PTD */
/* USER CODE BEGIN 0 */
//ADC的转换
uint16_t adc_get_value()
{
uint16_t adcValue=0;
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1,10)==HAL_OK)
adcValue=HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
return adcValue;
}
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2,DAC_ALIGN_12B_R,dac_value); //DAC数值的设置
HAL_DAC_Start(&hdac,DAC_CHANNEL_2); //开启DAC
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
uint8_t adcbuff[]={0};
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
dac_value=1000;
adc_value=adc_get_value()*3300/4096 ;
dac_value=dac_value*3300/4096;
sprintf((char *)adcbuff,"DAC输出电压:%d.%d 采样电压:%d.%d",dac_value/1000,dac_value%1000,adc_value/1000,adc_value%1000); //转换成字符串
HAL_UART_Transmit(&huart1,adcbuff,strlen((const char*)adcbuff),0xffff);
HAL_Delay(1000);
}
/* USER CODE END 3 */
以上就是本工程全部代码。
7.实验结果
工程到此就完成了。需要完整工程的链接如下:链接:https://pan.baidu.com/s/1ZmWdf7z9xtO-FhOh7fmGbA?pwd=acyw
提取码:acyw