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];再观察串口输出的情况如下:v
alue[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的格式,也 ...
随机推荐
- HTLM5表单
1.HTML5占位符文本 使用placeholder可以给文本框,搜索框添加提示性文本 <input type="text" name="url" p ...
- ImportError: The _imagingft C module is not installed
添加验证码模块的时候,发布到服务器上居然报了这个错误 ImportError: The _imagingft C module is not installed 然而pillow是已经装在服务器上的, ...
- 手动安装配置mongodb
2.1查看当前操作系统版本 2.2下载mongodb安装包 我的下载路径:http://www.mongodb.org/downloads 注意这里要下载和操作系统匹配的版本,因为我的系统是32位的, ...
- bzoj2500: 幸福的道路(树形dp+单调队列)
好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...
- C++ 画星号图形——圆形(核心代码记录)
void Circle::print_char(int x1,int x2) { int i; // 计算这一行的宽度,终端最多显示80列 ; n = n > ? : n; ; i < n ...
- springMVC、httpClient调用别人提供的接口!!!(外加定时调用)
import com.ibm.db.util.AppConfig; import com.ibm.db.util.JacksonUitl; import org.apache.http.HttpEnt ...
- SDK Manager.exe闪退
运行tools文件下android.bat. 修改tools文件下android.bat文件,再运行SDK Manager.exe
- 被swoole坑哭的PHP程序员
被swoole坑哭的PHP程序员 2015-09-16 09:57 文帅营 博客园 字号:T | T 首先说一下对swoole的理解:披着PHP外衣的C程序.很多PHPer朋友看到swoole提供的强 ...
- 《linux内核设计与实现》读书笔记第十七章
第17章 设备与模块 四种内核成分 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向 ...
- js出错总结
1 没有</script> src="js" "./js" "../js"2 dom对象与jquery对象(jquery对象其 ...