HAL驱动库学习-ADC
• uint32_tClockPrescaler--时钟源,同步PLL,异步HSI ADC_CLOCK_ASYNC,ADC_CLOCK_SYNC_PCLK_DIV2,ADC_CLOCK_SYNC_PCLK_DIV4,ADC_CLOCKPRESCALER_PCLK_DIV2,ADC_CLOCKPRESCALER_PCLK_DIV4
• uint32_tResolution -- ADC分辨率(,,,)ADC_RESOLUTION12b........
• uint32_tDataAlign --数据对齐方式(左,右)ADC_DATAALIGN_LEFT, ADC_DATAALIGN_RIGHT
• uint32_tScanConvMode--配置规则组序列,该参数可以关联“DiscontinuousConvMode”对主序列细分,如果设置多个通道则序列自动使能;如果只有一个通道,执行单一转换模式;如果有多个通道,执行序列转换模式;Rank(队列)定义为通道号,rank0->channel0,rank1-->channel1.....;扫描方向可以递增(-->)或递减(-->)ADC_SCAN_DIRECTION_FORWARD,ADC_SCAN_DIRECTION_BACKWARD,ADC_SCAN_ENABLE
• uint32_tEOCSelection -- EOC(EndOfConversion),用来做轮询或中断标记;每个rank转换结束,或序列转换结束;EOC_SINGLE_CONV,EOC_SEQ_CONV,EOC_SINGLE_SEQ_CONV(保留供以后用)
• uint32_tLowPowerAutoWait
• uint32_tLowPowerAutoPowerOff
• uint32_tContinuousConvMode --定义当选择的触发事件(软件触发 or 外部触发)发生后规则组执行单一转换还是连续转换 ENABLE or DISABLE
• uint32_tDiscontinuousConvMode---指定当规则组是完整序列/非连续序列(序列分布在)时是否转换序列;只有在Continuous禁用时,DisContinuous才有效;如果ContinuousConvMode使能,则该参数抛弃
• uint32_tExternalTrigConv --触发方式 ADC_SOFTWARE_START 外部触发禁止,使用软件触发
• uint32_tExternalTrigConvEdge --外部触发规则,ADC_EXTERNALTRIGCONVEDGE_NONE,ADC_EXTERNALTRIGCONVEDGE_RISING,ADC_EXTERNALTRIGCONVEDGE_FALLING,ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING
• uint32_tDMAContinuousRequests--//DMA转换请求,指定DMA执行单次(当转换数达标时停止传送)or连续请求模式;备注:连续模式:
//DMA必须配置为循环模式,否则当DMA buffer存满时将触发溢出; ENABLE or DISABLE
• uint32_tOverrun--选择数据溢出时的行为:保存数据或覆盖数据;这个参数只作用于规则组,包含DMA
| ContinuousConvMode | DiscontinuousConvMode | 通道结束 | 序列结束 | |||
| DISABLE | DISABLE | 单次转换 | EOC | EOS | 单次转换 | 触发一次,转换一个序列(转换所有被选通道),转换结束后停止 |
| ENABLE | 无效 | 连续转换 | EOC | EOS | 连续转换 | 触发一次,转换一个序列(转换所有被选通道),转换结束后自动重新开始 |
| DISABLE | ENABLE | 断续转换 | EOC | EOS | 断续转换 | 触发一次,转换一个通道,在触发,在转换。在所选转换通道循环 |
HAL_ADC_Init() 用户自行调用 加载ADC属性
HAL_ADC_MspInit() 由HAL_ADC_Init()调用,对底层初始化,主要包括时钟,IO,DMA等
b 缺醒初始化
HAL_ADC_DeInit() 用户自行调用,退出ADC
HAL_ADC_MspDeInit() 由 HAL_ADC_DeInit()调用,操作底层,关闭时钟,IO等
2 IO操作函数(轮询,中断,DMA 3中编程模型)
• HAL_ADC_Start()
• HAL_ADC_Start_IT() 中断模式ADC_EOC_SINGLE_CONV通道转换结束,EOC_SEQ_CONV序列转换结束
• HAL_ADC_Start_DMA()
b 关闭ADC,停止转换规则组
• HAL_ADC_Stop()
• HAL_ADC_Stop_IT()
• HAL_ADC_Stop_DMA()
• HAL_ADC_PollForConversion() 等待转换结束,不适用一下情况:DMA模式且轮询每个转换(ADC_EOC_SINGLE_CONV)
• HAL_ADC_PollForEvent()
• HAL_ADC_IRQHandler() ADC中断请求,在<stm32fxx_it.c>中调用 // 回调函数,“weak”属性,使用时再在应用代码中实现
• HAL_ADC_ConvCpltCallback() 转换完成后回调,DMA模式下DMA传输完成后调用
• HAL_ADC_ConvHalfCpltCallback() 转换过程中回调
• HAL_ADC_LevelOutOfWindowCallback()
• HAL_ADC_ErrorCallback()
3 外设控制函数--动态配置外设参数
/*##-3- Start the conversion process ######/
if(HAL_ADC_Start(&AdcHandle) != HAL_OK)
{ Error_Handler(); }
/*##-4- Wait for the end of conversion ######/
HAL_ADC_PollForConversion(&AdcHandle, 10);
if(HAL_ADC_GetState(&AdcHandle) == HAL_ADC_STATE_EOC_REG)
{
/*##-5- Get the converted value of channel ##*/
uhADCxConvertedValue = HAL_ADC_GetValue(&AdcHandle);
}
2 中断模式
/*##-3- Start the conversion process ######/
if(HAL_ADC_StartIT(&AdcHandle) != HAL_OK)
{ Error_Handler(); }
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{ /* Get the converted value of regular channel */
uhADCxConvertedValue = HAL_ADC_GetValue(AdcHandle);
}
3 DMA模式
/*##-3- Start the conversion process ######/
if(HAL_ADC_StartDMA(&AdcHandle,&uhADCxConvertedValue,1) != HAL_OK)
{ Error_Handler(); }
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{ /* Turn LED1 on: Transfer process is correct */
BSP_LED_On(LED1);
}
使用stm32cubemx设置


更进一步将if(HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&uhADCxConvertedValue,1)!= HAL_OK),中的1改成6,然后将转换后的存储变量定义为二维数组uhADCxConvertedValue[2][3];再观察串口输出的情况如下:value[0][0] is 0
value[0][1] is 255
value[0][2] is 255
value[1][0] is 0
value[1][1] is 255
value[1][2] is 255
value[0][0] is 0
value[0][1] is 255
value[0][2] is 255
value[1][0] is 0
value[1][1] is 255
value[1][2] is 255
value[0][0] is 0
value[0][1] is 255
value[0][2] is 255
value[1][0] is 1
value[1][1] is 255
value[1][2] is 255这样就是把第一次扫描转换的三个通道值存在数组的第一行的三个元素中,第二次扫描转换的值放在第二行的三个元素中。这样就可以方便后面的数字滤波处理了。
HAL驱动库学习-ADC的更多相关文章
- HAL驱动库学习-SPI
如何使用SPI库1 声明SPI hanlde, 例如: SPI_HandleTypeDef hspi2 通过实现HAL_SPI_MspInit()函数初始化底层资源 以下两个必须进行初始化 a 使能s ...
- HAL驱动库学习--如何使用HAL库
一 概述 下图是表述了用户层和HAL_Driver的交互过程,基本上从用户APP调用HAL_Driver APIs并且视情况当使用DMA或者专用中断时通过中断处理程序调用HAL_Driver APIs ...
- 第9章 初识HAL固件库
本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.<Cortex-M3权威指南>, STM32 HAL库帮助文档:<STM32F ...
- STM32 HAL固件库编程的文件构架
对于我这种以前只接触过51和AVR单片机编程的小菜来说,现在开始学习STM32的编程,对于函数的功能以及C语言的语法都还好理解,难的是它提供的那一套硬件抽象层(HAL)驱动是怎么和其他的东东搭配在一起 ...
- uTenux——重新整理底层驱动库
重新整理底层驱动库 1. 整理chip.h 在chip.h文件中的07----13的宏定义设置位如下,这样我们就不用在工程配中定义sam3s4c这个宏了,为我们以后通用少了一件麻烦事. //#if d ...
- DSP基础学习-ADC同步采样
DSP基础学习-ADC同步采样 彭会锋 2015-04-28 20:31:06 在DSP28027 LauchPad学习过程中,关于ADC同步采样和顺序采样的区别稍加研究了一下,发现里面还真有些门道, ...
- HAL驱动的串口编程陷阱
http://bbs.elecfans.com/jishu_464356_1_1.html 手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL ...
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- python 操作exls学习之路1-openpyxl库学习
这篇要讲到的就是如何利用Python与openpyxl结合来处理xlsx表格数据.Python处理表格的库有很多,这里的openpyxl就是其中之一,但是它是处理excel2007/2010的格式,也 ...
随机推荐
- 【WPF】绑定数据
WPF绑定数据 模型类(继承 INotifyPropertyChanged,实现属性的变更通知)
- 【转】 Camera模仿3D效果的小例子(图片无限旋转)
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactor ...
- 建设移动端web开发会涉及到的meta标签
<meta name="format-detection" content="telephone=no"> <meta name=" ...
- Android Studio插件美化Android Studio,文艺清新范
一:重新定义你工作区的颜色 1:原生的工作区文字的颜色反人类,来这个网站下载自己喜欢的主题:http://www.riaway.com/ 轻松定义:下载后是个jar包. 2:导入jar包 file ...
- 使用BBED模拟Oracle数据库坏块
BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢 ...
- iOS Crash日志
Understanding Crash Reports on iPhone OS https://developer.apple.com/videos/wwdc/2010/?id=317 http:/ ...
- MVC入门第一天
一.异步的两种方法 用jQ的异步 返回content controllor:return Content(sum.ToString());//这里涉及到一个自动封装的问题 html页:<for ...
- DP HDU1421
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 加快ArcGIS Server创建缓存速度,CachingTools的实例数
大比例尺的缓存,由于文件非常大,创建非常花费时间,在硬件设备已固定的情况下,调整Caching tools的实例数是加快创建缓存的方法之一. 简单来说:CachingTools的最大并行实例数决定了C ...
- 改善你的jQuery的25个步骤 千倍级效率提升
1. 从Google Code加载jQueryGoogle Code上已经托管了多种JavaScript类库,从Google Code上加载jQuery比直接从你的服务器加载更有优势.它节省了你服务器 ...