本帖最后由 qingyulv 于 2016-12-19 16:46 编辑
HAL驱动库学习-ADC
平时很少有时间在论坛分享自己的经验,这次趁领导不在,嘿嘿。 单片机是 stm32L0,2个ad通道,要用定时器控制两个通道的采样(但不是用触发的形式),每20ms更新一次采样数据。先是参考例程的 ADC_RegularConversion_Polling,单通道时确实ok,但增加两个通道后,采样值不对,当把一个引脚接地后,ad值居然还是几百的跳,经过半天的查找,终于找到端倪了。先看下边的文章:
如何使用ADC
驱动库
来源: http://www.cnblogs.com/cat-li/p/4982510.html
5
使用下面函数中的一个激活ADC
外设: HAL_ADC_Start() --
轮询模式 HAL_ADC_Start_IT(), --
中断模式 HAL_ADC_Start_DMA(). -- DMA
模式
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
存满时将触发溢出; ENABLEor DISABLE• uint32_tOverrun--
选择数据溢出时的行为:保存数据或覆盖数据;这个参数只作用于规则组,包含DMA[url=]
[/url]
说明:
ContinuousConvMode DiscontinuousConvMode
通道结束序列结束 DISABLEDISABLE
单次转换EOCEOS
单次转换触发一次,转换一个序列(转换所有被选通道),转换结束后停止ENABLE
无效连续转换EOCEOS
连续转换触发一次,转换一个序列(转换所有被选通道),转换结束后自动重新开始DISABLEENABLE
断续转换EOCEOS
断续转换触发一次,转换一个通道,在触发,在转换。在所选转换通道循环
一周热门 更多>