HAL库开发——ADC模块

一、ADC功能参数配置

1.ADC时钟频率设置,最大为14Mhz

2.开启对应的ADC通道

常需要配置的参数如下图所示

                                  

                                               

3.分辨率(resolution):模拟量转化为数字量的范围,12位分辨率即为0~4095

3.连续模式:不开启连续模式每次进行ADC转换前需要调用一次启动函数,开启连续模式则完成一次转换后会接着进行下一次转换,单通道对应单次转换,多通道对应连续转换

4.DMA循环模式:正常模式下DMA完成一次转运后即停止工作,循环模式下完成一次转换后会从第一个寄存器开始循环覆盖新的数值,与ADC的连续模式配合使用,实现数据的连续循环的转换和传递

5.DMA寄存器地址自增:对于多通道数据采集需要勾选

6.扫描模式:仅在多通道下才会开启,开启后将按照通道顺序依次转换channel0-channel1-channel0-channel1-...

7.DMA Continous Requests:不经过cpu去提取转换的数据,直接交给DMA操作,可以开启

8.规则通道与注入通道:规则通道就是很规矩的意思,平时一般使用的就是这个通道;注入通道,可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种。如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。类似于中断程序,注入通道只有在规则通道存在时才会出现

9.触发方式:通过直接配置寄存器触发,通过配置控制寄存器CR2的ADON位,写1时开始转换,写0时停止转换。在程序运行过程中只要调用库函数,将CR2寄存器的ADON位置1就可以进行转换,即软件触发。

10.采样时间

采样时间是采样保持用的时间,采样时间越大,越能避免一些毛刺的干扰,但转换时间会延长 。

总结:右对齐+多通道使能扫描+使能连续+关闭间断+DMA连续请求+循环模式+地址自增+规则组+软件触发

二、读取ADC数值

单通道不开启DMA时,可通过调用GetValue函数获取数字量

HAL_ADC_Start(&hadc1);
		HAL_ADC_PollForConversion(&hadc1,500);
		if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))
		{
		return HAL_ADC_GetValue(&hadc1);
		}

当开启DMA进行AD转换时调用DMA函数将转换来的数字量传递到目标变量所在地址即完成获取     不连续模式每次采集之前需手动启动ADC( HAL_ADC_Start(&hadc); )

“HAL_ADC_Start_DMA”该函数用来开启ADC的DMA功能并完成传递

	HAL_ADCEx_Calibration_Start(&hadc1);
	HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&a,1);

DMA传递单个通道

DMA传递多个通道

HAL_ADC_Start_DMA(   ,   ,   )三个参数分别为:①传递的功能②传递的数据所存放的寄存器③传递的数据长度,对应转换的通道数量

注:uint32_t*强制转换为32位地址,a1为用户定义的变量,dmadc为用户定义的二维数组

三、ADC函数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值