BearPi Std 板从入门到放弃 - 引气入体篇(7)(DAC)

本文详细介绍了如何在BearpiStd开发板上使用STM32L431RCT6的DAC1进行数字模拟转换,包括GPIO、串口初始化,以及使用KEY1和KEY2控制DAC输出电压。通过用户代码实现LED亮灭和按键控制DAC值输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

基于前面的文章, 缩略STM32CubeMx创建项目的过程,直接添加DAC相关初始化;
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
LED :  PC13 \ 推挽输出即可 \ 高电平点亮 
串口:  Usart1
KEY1 :  PB2 \ 上拉 \ 按下下降沿触发(一次)\ 用于增值
KEY2 :  PB3 \ 上拉 \ 按下下降沿触发(一次) \ 用于减值
DAC1:  PA5

步骤

  1. 一如既往根据前面几篇创建工程
    初始化LED GPIO口,按键Key1和Key2(输入即可, 不需要中断), 串口(同样不需要中断)

  2. 初始化DAC1
    a. DAC1 使用通道2输出
    在这里插入图片描述

  3. 生成项目BearPi_DAC1代码

  4. 添加用户代码

int main(void)
{
  /* USER CODE BEGIN 1 */
	int32_t DACValue = 0;
  /* USER CODE END 1 */
	...
  /* USER CODE BEGIN 2 */
	HAL_GPIO_WritePin(USER_LED_GPIO_Port, USER_LED_Pin, GPIO_PIN_SET); // 生命灯, 程序是否正常执行了
	HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); // 开启通道2 DA转换
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if (HAL_GPIO_ReadPin(USER_KEY1_GPIO_Port, USER_KEY1_Pin) == GPIO_PIN_RESET)
		{
			HAL_Delay(100); //  消抖
			if (HAL_GPIO_ReadPin(USER_KEY1_GPIO_Port, USER_KEY1_Pin) == GPIO_PIN_RESET)
			{
				DACValue += 10; 
				if(DACValue > 255) 
				{
					DACValue = 255;
				}
				HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_8B_R, DACValue); // 设置输出值
				printf(" KEY1+ DACvalue:%d,Voltage:%3.3f\r\n", DACValue, DACValue*3.3/255); // 理论值打印
			}
		}
		if (HAL_GPIO_ReadPin(USER_KEY2_GPIO_Port, USER_KEY2_Pin) == GPIO_PIN_RESET)
		{
			HAL_Delay(100); //  消抖
			if (HAL_GPIO_ReadPin(USER_KEY2_GPIO_Port, USER_KEY2_Pin) == GPIO_PIN_RESET)
			{
				DACValue -= 10; 
				if (DACValue < 0)
				{
					DACValue = 0;
				}	
				HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_8B_R, DACValue); // 设置输出值
				printf(" KEY2- DACvalue:%d, Voltage:%3.3f\r\n", DACValue, DACValue*3.3/255); // 理论值打印
			}
		}
		HAL_Delay(100);
		
  }
  /* USER CODE END 3 */

前言后说

Vout = Vref * (D / 2^n)
	其中Vref代表参考电压,
	n为DAC的位数,
	D为DAC输入的数字信号。
例如,假设有一个12位分辨率的DAC,参考电压为5V,那么当输入的数字信号为4095(即二进制的111111111111)时,
输出电压应为:Vout = 5V * (4095 / 2^12) = 2.5V。这是因为在这个例子中,
12位DAC的分辨率是2^12,所以最大的输入数字信号是2^12-1=4095。
当输入的数字信号小于最大值时,输出电压会随着输入信号的增大而线性增大;
当输入的数字信号大于最大值时,输出电压将会保持在最大值不变。

本例使用8位DAC的分辨率, 且芯片引用电压是3.3V : 公式为 Vout = 3.3 * D / 255

完整BearPi_DAC1项目代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听我一言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值