【STM32HAL库】DAC输出0-3.3v

news2024/10/6 8:29:23

一、简要介绍一下DAC

DAC也有分辨率,转换时间,精度等

分辨率常见为8或12位的 

转换时间F1,F4,F7都是3us左右,而H7系列是1.7us

1.DAC框图

 2.数据格式(对齐方式)

3.触发源 

4.可以发送DMA请求 

注意:只能由外部事件触发DMA请求 

5.模数转换 

6.输出缓存(一般关闭)

二、HAL库函数

三、实验思路及实践

用DAC在引脚输出一个电压值,然后再用ADC来读取这个电压值 

#include "dac.h"

DAC_HandleTypeDef hdac1;
void DAC_Init(void)
{
	DAC_ChannelConfTypeDef sConfig;
	hdac1.Instance = DAC1;
	HAL_DAC_Init(&hdac1);
	
	sConfig.DAC_Trigger = DAC_TRIGGER_NONE;//自动触发
	sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;//关闭输出缓存
	HAL_DAC_ConfigChannel(&hdac1,&sConfig,DAC_CHANNEL_1);
	HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);
}
	
void HAL_DAC_MspInit(DAC_HandleTypeDef *hdac)
{
	if(hdac->Instance == DAC1)
	{
		RCC_PeriphCLKInitTypeDef  ADC_PeriphClkInit={0};

		__HAL_RCC_GPIOA_CLK_ENABLE();//PA4
		__HAL_RCC_DAC_CLK_ENABLE();//
		GPIO_InitTypeDef GPIO_Init;
	
		GPIO_Init.Pin = GPIO_PIN_4;
		GPIO_Init.Mode = GPIO_MODE_ANALOG;
		HAL_GPIO_Init(GPIOC,&GPIO_Init);

	}
}

//用0-3300代表0-3.3v
//设置通道输出电压
void DAC_SET_VALUE(uint16_t val)
{
	double temp = val;
	temp /= 1000;
	temp  = temp/3.3*4096;//转换成数字量,供ADC读取,然后我们在转换为模拟量
	if(temp>=4096)temp=4095;
	HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);
}


ADC_HandleTypeDef hadc1;

void ADC_Single_Init(void)
{
	ADC_ChannelConfTypeDef ADC_sConfig;
	hadc1.Instance = ADC1;
	hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
	hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
	hadc1.Init.ContinuousConvMode = DISABLE;//我们使用不连续模式,则每想转换一次ADC,就要调用HAL_ADC_Start(&hadc1);函数
	hadc1.Init.NbrOfConversion = 1;
	hadc1.Init.DiscontinuousConvMode = DISABLE;//不用(不连续采用模式,只适用于扫描模式)间断模式
	hadc1.Init.NbrOfDiscConversion = 0;
	hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;//软件触发
	HAL_ADC_Init(&hadc1);
	
	HAL_ADCEx_Calibration_Start(&hadc1);//开启校准
	
	ADC_sConfig.Channel = ADC_CHANNEL_11;
	ADC_sConfig.Rank	  = ADC_REGULAR_RANK_1;
	ADC_sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
	HAL_ADC_ConfigChannel(&hadc1, &ADC_sConfig);

}


uint32_t ADC_Single_CONVERT_START()
{
	HAL_ADC_Start(&hadc1);
	HAL_ADC_PollForConversion(&hadc1,1);//计算的到转换时间为21us,所以这里给1ms绰绰有余
	return HAL_ADC_GetValue(&hadc1);
}

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "usart.h"
#include "adc.h"
#include "stdio.h"






uint32_t time;
int main(void)
{
  uint16_t adc_tem;
  float adc_value;
  HAL_Init();                              /* 初始化HAL库 */
  sys_stm32_clock_init(RCC_PLL_MUL9);      /* 设置时钟, 72Mhz */
  delay_init(72);                          /* 延时初始化 */
	USART_Init(115200);
	DAC_Init();
	DAC_SET_VALUE(3000);
	ADC_Single_Init();

    while(1)
    { 
			adc_temp=ADC_Single_CONVERT_START();
			adc_value=adc_temp*3.3/4096;
			printf("PC1\nadc_temp->%d\nadc_value->%.5f v\n\n\n\n",adc_temp,adc_value);
			HAL_Delay(1000);
	}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1672316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

train_gpt2.c

llm.c/train_gpt2.c at master karpathy/llm.c (github.com) 源码 /* This file trains the GPT-2 model. This version is the clean, minimal, reference. As such: - it runs on CPU. - it does not make the code too complex; it is readable. - it does not use any p…

代码随想录第五十一天|最长递增子序列、最长连续递增序列、最长重复子数组

题目链接:. - 力扣(LeetCode) 题目链接:. - 力扣(LeetCode) 题目链接:. - 力扣(LeetCode)

基于STM32H750的DCMI接口OV5640摄像头条码识别

好久没写文章了,闭上眼睛,算了一下,大概有十年了,近来接到一个项目,需要做条码识别,客户要求用MCU做,理由成本低、价格可控。 于是乎,打开某宝软件,搜索后发现STM32H7/ST…

Pygame简单入门教程(绘制Rect、控制移动、碰撞检测、Github项目源代码)

Pygame简明教程 引言:本教程中的源码已上传个人Github: GItHub链接 视频教程推荐:YouTube教程–有点过于简单了 官方文档推荐:虽然写的一般,但还是推荐! Navigator~ Pygame简明教程安装pygame一、代码框架二、案件输入…

YOLOv9-20240507周更说明|更新MobileNetv4等多种轻量化主干

专栏地址:目前售价售价69.9,改进点70 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 本周已更新说明: ### ⭐⭐更新时间:2024/5/12⭐⭐ 1. YOLOv9…

android studio apt代码编写实战

之所以试一下apt代码的编写,是因为发现几年前写的工程,在新的android studio中debug apt代码时,一直连不上debug环境,提示报错 Unable to open debugger port (localhost:5005): java.net.ConnectException "Connection refu…

C++之Eigen库基本使用(下)

1、常见变换 Eigen::Matrix3d //旋转矩阵(3*3) Eigen::AngleAxisd //旋转向量(3*1) Eigen::Vector3d //欧拉角(3*1) Eigen::Quaterniond //四元数(4*1) Eigen::Isom…

Java中的maven的安装和配置

maven的作用 依赖管理 方便快捷的管理项目依赖的资源,避免版本冲突问题 统一项目管理 提供标准,统一的项目结构 项目构建 标准跨平台(Linux、windows、MacOS)的自动化项目构建方式 maven的安装和配置 在maven官网下载maven Ma…

牛客热题:比较版本号

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:比较版本号题目链接方法一:暴力…

解决kali linux ssh连接失败

kali linux 默认ssh是禁止root登录的 为了通过 SSH 进入你的 Kali Linux 系统,你可以有两个不同的选择。第一个选择是创建一个新的非特权用户然后使用它的身份来登录。第二个选择,你可以以 root 用户访问 SSH 。为了实现这件事,需要在SSH 配…

材料物理 笔记-8

原内容请参考哈尔滨工业大学何飞教授:https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》(哈尔滨工业大学出版社) ——…

污水设备远程监控

随着环保意识的日益增强,污水处理作为城市建设和环境保护的重要一环,越来越受到社会各界的关注。然而,传统的污水处理设备管理方式往往存在着效率低下、响应速度慢、维护成本高等问题。为了解决这些痛点,HiWoo Cloud平台凭借其强大…

01-项目功能,架构设计介绍

稻草快速开发平台 开发背景就是通过此项目介绍使用SpringBoot Vue3两大技术栈开发一个拥有动态权限、路由的前后端分离项目,此项目可以继续完善,成为一个模板为将来快速开发做铺垫。 实现功能 开发流程 通过命令构建前端项目在VSCode中开发&#xff…

海外静态IP购买指南:探索全球网络连接的奥秘

在数字化时代,互联网连接的重要性不言而喻。对于企业和个人而言,拥有稳定、高速的网络连接是成功的关键。而在特定应用场景下,如远程办公、跨境电商、服务器托管等,海外静态IP地址的需求日益凸显。本文将为您详细解读海外静态IP购…

【Shell】正则表达式的操作实例

正则表达式是一个描述一组字符串的模式 是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。 正则表达式的操作实例 (一)概述1.定义2.作用3.类型 (二)字符串匹配实例&#xf…

使用git系统来更新FreeBSD ports源码

FreeBSD跟其它系统相比一大特色就是ports系统。 The Ports Collection is a set of Makefiles, patches, and description files. Each set of these files is used to compile and install an individual application on FreeBSD, and is called a port. By default, the Po…

什么是EcoVadis评级?

EcoVadis评级是一种全球性的公司社会责任评估体系,旨在评估公司在环境、经济、社会和治理四个方面的表现,以帮助公司提高可持续发展的能力。它不仅是一个评估工具,更是一个推动公司实现可持续发展目标的平台。 EcoVadis评级的分级主要包括以…

word-合同排版及签订

合同排版、合同修订、合同保护、合同管理 一、合同排版 1、字体字号管理突出标题 2、通过缩进整理每个层级的内容 3、条款的各级标题要有段前和断后的间距 4、建议将对齐到网格勾掉 合同排版没有一定的规则 合同排版要点: 二、合同修订 推荐使用OfficePLUS.cn找参…

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序设计竞赛 problem K. 树上问题

//先找一个美丽的树&#xff0c;然后遍历树找节点,分析是否符合条件。 //画几个图&#xff0c;思考下。 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c[n],d,l,r,k,w,an; vector<int>t[n]; void dfs(int x,int…

SSD-60S施耐德电机保护器EOCR-SSD

EOCR主要产品有电子式电动机保护继电器&#xff0c;电子式过电流继电器&#xff0c;电子式欠电流继电器&#xff0c;电子式欠电压继电器&#xff0c;其它保护装置&#xff0c;电流互感器。EOCR-SSD 10-60A电机保护器 系列型号: EOCRSSD-05SEOCRssD-30s EOCRSSD-60SEOCRSSD-0…