当前位置: 首页 > article >正文

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

简介

结合 BearPi Std 板从入门到放弃 - 引气入体篇(7)(DAC) 和 BearPi Std 板从入门到放弃 - 引气入体篇(8)(ADC) 这两篇, 实现 D -> A -> D 的转换, 也就是DAC -> ADC;
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出即可 \ 高电平点亮
串口: Usart1
KEY1 : PB2 \ 上拉 \ 按下下降沿触发(一次)\ 用于增值
KEY2 : PB3 \ 上拉 \ 按下下降沿触发(一次) \ 用于减值
DAC1: PA5
ADC1: PC2

步骤

  1. 创建工程及初始化相关功能;
  2. 生成项目BearPi_DAC1_ADC1
  3. 添加用户代码
int main()
{
	/* USER CODE BEGIN 1 */
	int16_t adcValue = 0; 
	int16_t dacValue = 0;
	float voltage = 0.0;
  	/* USER CODE END 1 */
	...
	 /* USER CODE BEGIN 2 */
	HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); // 开启DAC通道
	HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&adcValue, 1); // 开启ADC
  /* USER CODE END 2 */

	 /* 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 > 4095) 
				{
					dacValue = 4095;
				}
				HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dacValue);
				voltage = adcValue*3.3/4095;
				printf(" KEY1+ DACvalue: %d, ADCValue: %d, Voltage:%3.3f\r\n", dacValue, adcValue, voltage);
			}
		}
		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_12B_R, dacValue);
				voltage = adcValue*3.3/4095;
				printf(" KEY2- DACvalue: %d, ADCValue: %d, Voltage:%3.3f\r\n", dacValue, adcValue, voltage);
			}
		}
		HAL_Delay(100);
  }
  /* USER CODE END 3 */
}
  1. 打开串口软件进行监控, 排线连接PC2 和 PA5
  2. 按键控制实现设置D值(DAC)与读取D值(ADC)的变化;

BearPi_DAC1_ADC1 完整项目代码


http://www.kler.cn/a/160177.html

相关文章:

  • 前端系统设计面试题(二)Javascript\Vue
  • IP数据云 识别和分析tor、proxy等各类型代理
  • 软件测试面试大全(含答案+文档)
  • jmeter介绍、使用方法、性能测试、现参数化和数据驱动、分布式测试、压力测试、接口测试
  • C++编程:利用环形缓冲区优化 TCP 发送流程,避免 Short Write 问题
  • SpringCloud学习笔记
  • Java LeetCode篇-深入了解二叉树经典解法(三种方式实现:获取二叉树的最大深度)
  • Redis——某马点评day03——part2:秒杀业务异步优化
  • 鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期与页面中组件的生命周期(十六)
  • Park Unpark
  • Web安全漏洞分析-XSS(下)
  • ApplicationContextAware 类
  • ELK 日志解决方案
  • AI网关究竟是什么,怎么样才算是AI算力的网关
  • 跟着GPT学习shell脚本,理论与实践相结合的学习计划。(一)
  • 团队git操作流程
  • 单片机开发常用的软件构架
  • html5各行各业官网模板源码下载(1)
  • 19、pytest通过mark标记测试函数
  • 每天一点python——day85
  • 记录一次vscode markdown的图片路径相关插件学习配置过程
  • 【微服务】分布式限流如何实现
  • Android10 Dialog bug
  • 【技术干货】宇视IPC音频问题解决步骤
  • 编程常见的问题
  • Java动态代理实现与原理详细分析