【STM32HAL库】DAC输出0-3.3v

一、简要介绍一下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);
	}
}


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OSS证书自动续签,一分钟轻松搞定,解决阿里云SSL免费证书每3个月失效问题

文章目录 一、🔥httpsok-v1.11.0支持OSS证书自动部署介绍支持特点 二、废话不多说上教程:1、场景2、实战Stage 1:ssh登录阿里云 ECSStage 2:进入nginx (docker)容器Stage 3:执行如下指令Stage 3…

vivado Virtex UltraScale 配置存储器器件

Virtex UltraScale 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Virtex UltraScale ™ 器件执行擦除、空白检查、编程和验证等配置操作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列非易失…

Flink HA模式下JobManager切换时发送告警

资源&版本信息 Flink版本1.14.6 运行平台:K8s HA使用ZK(使用K8s的ETC应该是一个道理) 详解Flink HA原理 Flink启动时会创建HighAvailabilityServices提供HA和相关基础服务,其中包括leaderRetrievalService和LeaderElecti…

MP4视频转gif怎么做?看看这篇就会了

喜欢刷短视频的小伙伴经常会看到各种好玩有趣的片段,想要通过自己将这段视频制作成gif动态图片的还不想下载软件的时候要怎么办呢?这个很简单,不需要下载什么软件用专业的Gif动画制作网站,支持超清的画质导出,能够完成…

ssm123基于java web的网上书城系统的设计与实现+vue

基于java web的网上书城系统的设计与实现vue 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,商品交易当然也不能排除在外,随着商品交易管理的不断成熟,它彻底改变了…

Git详解之六:Git工具

现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程。你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力。 接下来你将领略到一些 Git 可以实现的非常强大的功能&…

Java抽象类:为何它是你代码架构的基石?

目录 1、抽象类的概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 5、 完结散花 个人主页:秋风起,再归来~ 文章专栏:javaSE的修炼之路 个人格言:悟已往之不谏,知来者犹可追 克…

WWW服务器搭建(2)——Apache服务器配置与管理

一、Apache简介 1.1 关于Apache Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。…

【Linux 系统】多线程(生产者消费者模型、线程池、STL+智能指针与线程安全、读者写者问题)-- 详解

一、生产者消费者模型(重点) 如图,在生活中,学生就是消费者角色,工厂是真正的生产者角色,那么超市是什么呢?为什么需要超市?超市是交易场所。我们的家附近不一定有工厂,而…

JumpServer发布web应用

项目背景: 由于防火墙密码安全没有达到审计要求,需要加固防火墙用户安全,通过JumpServer发布防火墙登录页面,提供远程访问 认证要求: 1、密码记忆多次 2、密码大小写 3、密码字符 4、密码数字 加固前密码策略&…

【C++要哮着学】初识C++,什么是C++?什么是命名空间?什么又是缺省函数?

文章目录 前言1、C简介1.1、什么是C1.2、C起源1.3、C发展 2、C关键字(C98)3、命名空间3.1、命名空间的定义及使用3.2、命名空间的嵌套3.3、命名空间的三种使用方式3.3.1、加命名空间名称及作用域限定符3.3.2、使用using将命名空间中某个成员引入3.3.3、使…

上位机图像处理和嵌入式模块部署(树莓派4b 应用的注意事项)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 树莓派系列开发板最早的时候,价格还是比较高的。不过由于它生态比较丰富,使用起来比较方便,所以大家都默认了它…

UE4_照亮环境_不同雾效的动态切换

一、问题及思路: 我们在一个地图上,经常切换不同的区域,不同的区域可能需要不同的色调,例如暖色调的野外或者幽暗的山洞,这两种环境上,雾效的选用肯定不一样,夕阳西下的户外用的就是偏暖的色调&…

如何用微信小程序实现远程控制4路控制器/断路器

如何用微信小程序实现远程控制4路控制器/断路器呢? 本文描述了使用微信小程序调用HTTP接口,实现控制4路控制器/断路器,支持4路输出,均可独立控制,可接入各种电器。 可选用产品:可根据实际场景需求&#xf…

【命名空间】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 学校的人事部门保存了有关学生的部分数据(学号、姓名、年龄、住址),教务部门也保存了学生的另外一些部分数据(学号、姓名、性别、成绩),两个部门分别编写了本部门的数据管…

化学式的分子量计算——字符转数字

【题目描述】 给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,…

Shell的运行原理和Linux的权限

Shell的运行原理 Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户不能直接使用kernel,而是通过kernel的“外壳程序”,也就是所谓的Shell,来与kernel沟通。 Shell…

自定义类型——结构体、枚举和联合

自定义类型——结构体、枚举和联合 结构体结构体的声明匿名结构体结构体的自引用结构体的初始化结构体的内存对齐修改默认对齐数结构体传参 位段枚举联合 结构体 结构是一些值的集合,这些值被称为成员变量,结构的每个成员可以是不同类型的变量。 数组是…

福建医疗器械展/2024厦门国际医疗器械展览会重磅来袭

2024中国(厦门)国际医疗器械展览会 时 间:2024年11月1-3日 November 1-3, 2024 地 点:厦门国际会展中心 Xiamen International Conference & Exhibition Center ​ ◆组织机构 主办单位: 中国技术市场协会医…

7B2 PRO主题5.4.2免授权直接安装

B2 PRO 5.4.2 最新免授权版不再需要改hosts,直接在wordpress上传安装即可