精华内容
下载资源
问答
  • STM32_HAL_多路DAC输出

    2018-10-18 18:55:03
    基于HAL库的多路DAC输出,以及PWM输出。CUBEMX生成库。
  • stm32对HAL库的DAC使用

    2019-12-14 09:21:00
    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 2048); 在main()函数中添加程序设置DAC输出的数据为12位右对齐,数值为2048.则实际输出的电压为 2048/4096x3.3V=1.65V,使能ADC通道2开始转换。 然后...

    在cubemx中的设置。

     

     

    默认即可。

    在main中添加代码。

    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 2048);
    在main()函数中添加程序设置DAC输出的数据为12位右对齐,数值为2048.则实际输出的电压为
    2048/4096x3.3V=1.65V,使能ADC通道2开始转换。
    然后开启dac。
        HAL_DAC_Start(&hdac, DAC_CHANNEL_2);

    即可。

    展开全文
  • 本次测试再次换了一块板子,用的是STM32F103RCT6,并不是我想换哈,hal库无论你用啥板子,函数几乎都没发生改变,底层驱动又是软件默认帮我们设置好的,之所以换板子是因为系列中中低端的大多数板子是没有DAC功能的...

    这次的教学是用CubeMX开启STM32的ADC 与 DAC功能

    本次测试再次换了一块板子,用的是STM32F103RCT6,并不是我想换哈,hal库无论你用啥板子,函数几乎都没发生改变,底层驱动又是软件默认帮我们设置好的,之所以换板子是因为系列中中低端的大多数板子是没有DAC功能的(ADC都有),以下赋一张F1的图

    在这里插入图片描述
    本次使用的RCT6就是F1系列上面这个48kbRAM这个,室友两个DAC的哈。

    第一步:在CubeMX中使能ADC与DAC

    在这里插入图片描述
    以上是ADC的使能,有些特性我也没有用过,不过直接使用默认的已经能完成测测出精准电压的功能了
    在这里插入图片描述
    以上是DAC的开启设置,同样使用默认的即可

    第二步:生成工程后使用HAL库输出DAC,读取ADC

    在这里插入图片描述
    按照上面的就可以使用ADC与DAC了,记住自己添加 uint16_t AD_Value = 0;在前面(main函数前面),作为ADC值读取的缓存,还有记住自己的代码写在BEGIN和END之间,这样你在CubeMX上随便增加删除硬件驱动,你都可以动态加入到自己工程里,你自己写的东西不得被删除

      //这是DAC的相应函数
      HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1024);  
      HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
    
      //这是ADC的相应函数,放在循环里面就可以一直读取
      HAL_ADC_Start(&hadc1);  //启动ADC装换
        HAL_ADC_PollForConversion(&hadc1, 50);  //等待转换完成,第二个参数是超时时间,单位是ms.
    		if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))  //判断转换完成标志位是否设置
        {
          /*开始获取转换值*/
          AD_Value = HAL_ADC_GetValue(&hadc1);    //获取adc转换的数据
          printf("adc读取的电压为: %.1fmv(%.2fv)\r\n",(double)(AD_Value*3300)/4096,(double)(AD_Value*3.3)/4096);
        }
    

    结果:

    在这里插入图片描述
    这里可以看出来,本来该是0.825,但是我的只有0.782,是因为我的单片机电源电压测出来只有3v左右,按上面的算法换算出来就是准确的,所以那个算法是针对严格3.3v的哈

    最后

    我是一个新人博主,目前也是一个大学生,但是真心喜欢嵌入式和物联网,已经自学3年了,我会带着热爱一直把博文写下去,也是自己记笔记的一种方式,大家可以关注我,给我留言,一起学习

    展开全文
  • 记录HAL库+Cube MX的学习过程,不定期更新…… 一、DAC(Digital to Analog Converter) DAC的Cube MX设置很简单,选择在Analog中选择DAC,设置OUT1,会自动对应PA4。...HAL_DAC_SetValue(&h...

    记录HAL库+Cube MX的学习过程,不定期更新……

    一、DAC(Digital to Analog Converter)

    DAC的Cube MX设置很简单,选择在Analog中选择DAC,设置OUT1,会自动对应PA4。当然,如果看过原理图,知道PA4引脚可以选择为DAC_OUT1 ,也可以直接对PA4进行设置。
    在这里插入图片描述
    打开生成的工程,插入下列代码,

    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R,2048); // 设置DAC的大小
    HAL_DAC_Start(&hdac, DAC_CHANNEL_2);//开启DAC转换
    

    在PA4口检测,就可以检测到电压。

    二、DAC and ADC’s Introduction

    DAC:

    我一直不能理解DA与AD的转换到底是怎么一回事,在做过两个实验之后,开始理解这个过程:DA就是将一个数字转换成电压,这个电压值可以通过电压表读出来。比如上面的数字2048,来说说这个数字是怎么得出来的,最后通过2048这个数字(D)转化成的电压(A)又是多少,下面开始:
    STM32 DAC模块是12位的数字输入,计算机都是以2进制进行运算的,也就是说12位数字就是1111 1111 1111,值为2132^{13},即4095,STM32电压输出最大为3.3V,通过对DAC的设置就可以将一个小于等于4095的值与一个小于等于3.3V的电压输出,要注意输出的电压是一个模拟信号,用电压表测量只是把这个电压变成一个符合我们认知的值显示。根据这一原理就可以让引脚输出任意值的电压。

    ADC:

    AD转换就是将特定引脚的电压转化为一个数字,那我们要怎么得知这个数字呢?在电脑上读取的方法一般是用串口打印。比如在一个引脚输入一个电压,就可以把这个电压转化为数字,再稍微转化一下就可以化为电压值。这个电压值最大为3.3V,数字最大为4096,跟上面DAC的数字范围以及转化相同。

    三、ADC(Analog to Digital Converter)

    在Analog的ADC1选项中设置IN0后,Cube MX会自动自动配置对应的引脚,IN0对应的引脚是PA0,
    在这里插入图片描述
    在下面Parameter(参数)的设置中,使能Continuous Conversion Mode(连续转换模式)。
    在这里插入图片描述
    串口的设置很简单,在Connectivity的USART1选型中设置模式为Asynchronous(异步通信),Cube MX同样配置好了相关引脚,就可以直接生成代码了。
    在这里插入图片描述
    在while(1)中插入如下代码,下载程序后,打开串口助手,对PA0端口加电压就能在串口助手上打印出电压值AD_Value。

    while(1){
    HAL_ADC_Start(&hadc1);//启动ADC装换
    HAL_ADC_PollForConversion(&hadc1, 50);//等待转换完成, 第二个参数表示超时时间,单位ms.
    if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC)){
    AD_Value = HAL_ADC_GetValue(&hadc1);//读取ADC转换数据, 数据为12位
    printf("[info]main.c:v=%.1fmv\r\n",AD_Value*3300.0/4096);//打印日志
    }
    }
    

    要注意的是,一些变量需要对其赋值,串口打印函数printf也要添加头文件跟函数,相关的设置会在串口通信的内容中说明。

    展开全文
  • STM32L476+HAL+DAC+DMA+Timer

    2020-06-04 00:23:59
    工程基于STM32L476+IAR8.40.2 + HAL 库,实现DAC 输出 正弦波。使用TIMER + DMA的方式,只要调整DMA buff中的数据就可以输出我们想要的波形。
  • stm32H743VIT6使用HAL库函数API编写的DAC例程代码,已验证可以正常使用,欢迎广大朋友下载,提高开发效率。
  • dac 学习

    1-uart.c实现重定向,记得包含stdio.h

    int fputc(int ch,FILE* f)
    {
    	uint8_t temp[1]={ch};
    {
    	HAL_UART_Transmit(&huart1,temp,1,2);
    }
    	return HAL_OK;
    }
    

    2-启动DAC转换

    HAL_DAC_Start(&hdac1,DAC1_CHANNEL_2);//启动DAC转换
    

    3-编写测试函数

    		//如果按键1按下
    		if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET)
    		{
    			HAL_Delay(100);
    			if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET)
    			{
    				DACVALUE+=10;
    				if(DACVALUE>=255) DACVALUE=255;
    				HAL_DAC_SetValue(&hdac1,DAC1_CHANNEL_2,DAC_ALIGN_8B_R,DACVALUE);//电压转换
    				printf("KEY1 + DACVALUE:%d,Voltage:%3.3f\r\n",DACVALUE,DACVALUE*3.3/255);
    			}
    			
    		}
    		//如果按键2按下
    		if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET)
    		{
    			HAL_Delay(100);
    			if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET)
    			{
    								DACVALUE-=10;
    				if(DACVALUE<=0) DACVALUE=0;
    				HAL_DAC_SetValue(&hdac1,DAC1_CHANNEL_2,DAC_ALIGN_8B_R,DACVALUE);//电压转换
    				printf("KEY2 - DACVALUE:%d,Voltage:%3.3f\r\n",DACVALUE,DACVALUE*3.3/255);
    			}
    			
    		}
    
    展开全文
  • 本项目将借助STM32CubeMX来配置ADC、DMA、DAC、USART,并利用PID位置式算法实现对输出电压进行AD采集通过PID算法调节DAC,获取到我们想要的电压值。
  • 2.1 DAC工作原理 2.1.1 DAC介绍 数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐...
  • 第59章 STM32H7的DAC基础知识和HAL库API 本章节为大家讲解DAC,实际项目用到DAC的地方比较多,而且H7的DAC性能也比较给力。 59.1 初学者重要提示 59.2 DAC基础知识 59.3 DACHAL库用法 59....
  • 目录前言一、ADC与DAC的原理二、STM32F4ADC简介1.源范围2.采集通道3.转换顺序4.触发方式2.读入数据总结 前言 五一前出差了,然后又逢假期,荒废了半月,一直没有状态,学不进去,今天把STM32常用的ADC和DAC总结一下...
  • ADC工作均为非阻塞状态 轮询模式 中断模式 DMA模式   ...HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);...HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc);...HAL_StatusTypeDef HAL_A...
  • 【STM32】HAL库 STM32CubeMX教程十---DAC

    千次阅读 多人点赞 2019-10-07 15:22:49
    本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32...
  • 写在前面:感谢XXX大佬的指导,以下是他的博客: ...本文主要展示ADC、TIM、DAC的配置(hal库) 主要的困难是通过定时器TIM触发ADC采样的配置比较复杂,定时器的配置还没太懂 ADC的配置 ADC_HandleTypeDef ADC1_Handler
  • 文章目录Matlab处理音频文件DAC播放DAC配置Tim配置开始应用层数据流向 Matlab处理音频文件 Audio_filename = 'Audio.wav'; % 获取原音频数据 [Audio,Audio_Fs]=audioread(Audio_filename, 'native'); % 取单声道 ...
  • <p>If TIM6 is used as the HAL Timebase <strong>and</strong> the DAC is enabled, there may be a 0-Pointer access in HAL_DAC_IRQHandler (called by TIM6_DAC_IRQHandler), <strong>if</strong> a tick IRQ ...
  • 本文用STM32RCT6的I2C1实现控制该芯片四路分别输出给定的电压值,其中使用了目前尚还有些问题的HAL库实现硬件I2C通信。 DAC6573使用与工程大体思路 DAC6573设置方式为用I2C向器件写入四个连续的字节,分别为Address ...
  • HAL_DAC_Start(&hdac, DAC_CHANNEL_2); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ HAL_DAC_SetValue(&hdac, DAC
  • HAL】stm32F103 DAC+DMA+TIM6查表法产生正弦波

    千次阅读 热门讨论 2019-06-06 09:54:51
    1、DAC的配置 输出缓冲Output Buffer建议关闭。DAC的输出缓存可以用来减小输出阻抗,无需外部运放即可直接驱动外部负载。但输出不能达到0(会出现底部失真),不推荐开启。具体参考官方手册,缓冲器打开时低端的DAC...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 218
精华内容 87
关键字:

dachal