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分辨率(6,8,10,12)ADC_RESOLUTION12b........ • uint32_tDataAlign --数据对齐方式(左,右)ADC_DATAALIGN_LEFT, ADC_DATAALIGN_RIGHT • uint32_tScanConvMode--配置规则组序列,该参数可以关联“DiscontinuousConvMode”对主序列细分,如果设置多个通道则序列自动使能;如果只有一个通道,执行单一转换模式;如果有多个通道,执行序列转换模式;Rank(队列)定义为通道号,rank0->channel0,rank1-->channel1.....;扫描方向可以递增(0-->18)或递减(18-->0)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() 用户自行调用,退出ADCHAL_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设置
![](/assets/blank.gif)
![](/assets/blank.gif)
更进一步将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
这样就是把第一次扫描转换的三个通道值存在数组的第一行的三个元素中,第二次扫描转换的值放在第二行的三个元素中。这样就可以方便后面的数字滤波处理了。
转载于:https://www.cnblogs.com/cat-li/p/4982510.html
HAL驱动库学习-ADC相关推荐
- 课程 | 基于STM32CubeMX和HAL驱动库的嵌入式系统设计
帮成都这边一位老师友情分享一篇免费课程:基于STM32CubeMX和HAL驱动库的嵌入式系统设计. 如果想学习本课程,可以从文末给出的链接,或底部"阅读原文"进入报名,免费学习. ...
- Android底层HAL驱动开发学习笔记
2017.3.27 1.确定任务:加快摄像头的信息获取速率:缩减驱动程序.减小帧的大小,缩减一个像素点的比特流(6/8/10bit) 2.重点了解函数:camerabuffer *buffer=mPr ...
- 15、RDA8910(4GCAT1)CSDK二次开发:通过OneWire驱动库获取DS18B20/DHT11的数据
目录 点击这里查看所有博文 本系列博客所述资料均来自合宙官方,并不是本人原创(只有博客是自己写的),csdk只是得到了口头的允许公开授权.出于热心,本人将自己的所学笔记整理并推出相对应的使用教程, ...
- STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示
STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...
- STM32 HAL库学习笔记1-HAL库简介
STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...
- STM32 HAL库学习笔记4-SPI
STM32 HAL库学习笔记4-SPI 前言 一.SPI协议简介 SPI物理层 SPI协议层 1.基本通讯过程 2. 通讯的起始和停止信号 3. 数据有效性 4. CPOL/CPHA 及通讯模式 二. ...
- Android深度探索(卷1)HAL与驱动开发学习笔记(8)
Android深度探索(卷1)HAL与驱动开发学习笔记(8) 第八章 蜂鸣器驱动 L i n u x驱动的代码重用有很多种方法.可以采用标准C程序的方式.将要重用的代码放在其他的文件(在头文件中声 ...
- STM32CubeMX | HAL库的ADC多通道数据采集(轮训、DMA、DMA+TIM)、读取内部传感器温度
STM32CubeMX | HAL库的ADC多通道数据采集(轮训.DMA.DMA+TIM).读取内部传感器温度 目录 STM32CubeMX | HAL库的ADC多通道数据采集(轮训.DMA.DMA+ ...
- STM32F407霸天虎HAL库学习笔记——串口发送
STM32F407霸天虎HAL库学习笔记--串口收发 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 main函数 五.实验效果 一.软件准备 软件准备 二.硬件准备 ...
最新文章
- 第一家公立大学支持比特币支付学费
- 七十三、Python | Leetcode数字系列(上篇)
- 企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...
- Android stduio之Plugin with id ‘com.android.application‘ not found解决办法
- ADO.NET- 基础总结及实例
- 日常电脑小工具编程_如何使编程成为日常习惯
- LFFD:轻量级人脸检测器,不止是快
- 新概念51单片机C语言教程纠错(2)
- 如何更改webstrom的默认端口63342
- 雨课堂计算机基础与应用大一,雨课堂试卷批量导入Word模板.doc
- python真好玩 pdf 下载_Python真好玩:教孩子学编程_PDF电子书
- CVE-2018-5767 栈溢出漏洞复现
- 一些好看的渐变色(配色)网站推荐
- 几款手机网站前端框架
- js中函数的this指向
- 信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
- 语音共振峰的获取python
- Nodejs之NestJS之pkg打包
- pgsql timestamp without time zone > character varying解决方案
- 手把手教你如何巧用Github的Action功能
热门文章
- MySQL中varchar所占字节大小是多少
- Linux shell ==运算符
- Linux服务集群部署实战--MySQL、Redis、ES、RocketMQ、Zookeeper
- Java日期相关类:Date、SimpleDateFormat和Calendar类常用API代码示例
- java new 多线程_Java多线程:Java多线程执行框架
- 通过IDEA查看jar包中的依赖关系
- Qt for Android / ios 将图片或文件打包进安装包中
- 一天教会三岁表弟HTML,你值得拥有
- js实现按下删除键清空文本框内容
- STM32 之十一 LL 库(low-layer drivers)详解 及 移植说明