STM32CubeMX学习笔记9——ADC和DAC

1.配置ADC(RCC、YSY、USART、时钟树配置请参考笔记1、笔记2)

 2.配置DAC

3.烧写代码、修改usart.c ,重定向printf

#include "stdio.h"

 //这个变量是其他.c文件定义的
 extern UART_HandleTypeDef huart1;
 uint8_t ch;
 uint8_t ch_r;
 //重写这个函数,重定向printf函数到串口,意思就是说printf直接输出到串口,其默认输出到控制台的
 /*fputc*/
 int fputc(int c, FILE * f)
 {
     ch=c;
     HAL_UART_Transmit(&huart1,&ch,1,1000);//发送串口
     return c;
 }
 
 
 //重定向scanf函数到串口 意思就是说接受串口发过来的数据,其默认是接受控制台的数据
 /*fgetc*/
 int fgetc(FILE * F)    
 {
     HAL_UART_Receive (&huart1,&ch_r,1,0xffff);//接收
     return ch_r;
 }

 4.在main.c中添加代码,打印电压值

 static double SetVcc = 0;
	static uint16_t ReadVcc;
	SetVcc = SetVcc + 0.5;
	if(SetVcc > 3.3)
	{
		SetVcc = 0;
	}

	/* 设置DAC输出的电压 */
	HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, (SetVcc / 3.3 * 4096));
	HAL_DAC_Start(&hdac, DAC_CHANNEL_1);

	/* 打印 */
	printf("PA0 set voltage:%.4f\n", SetVcc);

 HAL_ADC_Start(&hadc1);
	HAL_ADC_PollForConversion(&hadc1, 50);
	if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
	{
		/* 读取ADC的电压 */
		ReadVcc = HAL_ADC_GetValue(&hadc1);

		/* 打印 */
		printf("PA4 read voltage:%.4f\n", ReadVcc * 3.3f / 4096);
	}
    HAL_Delay(500);
  }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值