STM32F103ZET6【HAL函开发】STM32CUBEMX------7.DAC实验

STM32F103ZET6有2 个 DAC 转换器:每个转换器对应 1 个输出通道
对应的IO口如下:
DAC_OUT1—PA4
DAC_OUT2—PA5
目的:DAC通道2可以输出3.3以下的任意电压,同时通过ADC1通道8采集到,打印到串口。

硬件连接:
由于ADC和DAC都是STM32F103ZET6的内部资源,所以只需要一根杜邦线将ADC1 的通道8即 PB0和DAC2的PA5连接起来即可。

STM32CUBEMX配置:
省略配置时钟和仿真口,直接设置IO,配置如下图。

ADC1 通道8配置 PB0
DAC2配置 PA5

因为用到了串口打印,所以需要配置串口,USART1的PA9和PA10

代码编写:

1.因为用到串口打印,加入头文件"stdio.h"+宏定义led灯亮灭状态+变量

/* USER CODE BEGIN 1 */
#include "stdio.h"
#define LED0_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET)//LED0点亮
#define LED0_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET)//LED0熄灭
uint16_t adc_value=0,adc_volt=0;
uint8_t str_buff[64];
/* USER CODE END 1 */
/* USER CODE END Includes */

2.定义串口发送函数+ADC采样函数

/* USER CODE BEGIN 0 */
void URE_Send_Info()
{
	sprintf((char*)str_buff,"采样值:%d,电压值:%d.%d%dV\r\n",adc_value,adc_volt/100,(adc_volt%100)/10,adc_volt%10);
	HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
}

void adc_get_value()
{
	HAL_ADC_Start(&hadc1);                    //启动ADC单次转换
	LED0_ON();
	if(HAL_ADC_PollForConversion(&hadc1,10)==HAL_OK)
	{
	adc_value=HAL_ADC_GetValue(&hadc1);
	adc_volt=adc_value*330/4096;	
	}
URE_Send_Info();
LED0_OFF();	
HAL_ADC_Stop(&hadc1);  
}
/* USER CODE END 0 */

3.主函数中的while(1)中加入ad采集函数

  while (1)
  {
    /* USER CODE END WHILE */
	adc_get_value();
	HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }

4.主函数中设置DAC转换电压的大小+开启DAC转换
改变后面的1000的数字大小,即可以改变输出的电压大小。最大不超过3.3V。

  /* USER CODE BEGIN 2 */
	HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R,1000); // 设置DAC的大小
	HAL_DAC_Start(&hdac, DAC_CHANNEL_2);//开启DAC转换
  /* USER CODE END 2 */

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值