初窥门径32系列12--AD/DA单通道

数模转换编程实战:ADC/DAC

硬件设计

本实验用到的硬件资源有:
1) 野火STM32霸天虎开发板
2)硬件连接方式:PA4-DAC_OUT1连接PA2-ADC1_CH2

CubeMX配置

时钟源配置
在这里插入图片描述

ADC

勾选IN2
在这里插入图片描述
参数设置
在这里插入图片描述

DAC

勾选OUT1即可
在这里插入图片描述

数模转换实验配置步骤

adc.c

uint32_t adc_get_result(void)
{
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, 10);
    return (uint16_t)HAL_ADC_GetValue(&hadc1);
}

dac.c

void MX_DAC_Init(void)
{
  /* MX CODE BEGIN DAC_Init 1 */
  //。。。。。。。。。。。。。。
  /* MX CODE END DAC_Init 1 */
  
  /* USER CODE BEGIN DAC_Init 2 */
  HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
  
  /* USER CODE END DAC_Init 2 */
}
void dac_set_voltage(uint16_t vol)
{
    double temp = vol;
    temp /= 1000;
    temp = temp * 4096 / 3.3;

    if (temp >= 4096)temp = 4095;   /* 如果值大于等于4096, 则取4095 */

    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, temp); /* 12位右对齐数据格式设置DAC值 */
}

main.c

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM13_Init();
  MX_TIM14_Init();
  MX_USART1_UART_Init();
  MX_DAC_Init();
  MX_ADC1_Init();

  LCD_Init();
  LCD_Fill(0, 0, LCD_W, LCD_H, BLACK);
  
  dac_set_voltage(3300);
  
  while (1)
  {
    adcx = adc_get_result();
    temp = (float)adcx * 3.3 / 4096;
    LCD_ShowIntNum(24, 16, adcx, 4, WHITE, BLACK, 12);
    adcx = temp;
    temp -= adcx;
    temp *= 1000;
    LCD_ShowIntNum(24, 32, adcx, 1, WHITE, BLACK, 12);
    LCD_ShowChar(32, 32, '.', WHITE, BLACK, 12, 0);
    LCD_ShowIntNum(40, 32, temp, 3, WHITE, BLACK, 12);
  }
}

实验结果

DAC部分:
用万用表测量PA4与GND之间的电压为3.27V
ADC部分:
LCD屏幕上显示的电压范围在3.200~3.299V之间跳动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值