zoukankan      html  css  js  c++  java
  • HAL库ADC的DMA采集

    1.利用CubeMX配置ADC

    (1)我这里用的是F103的芯片,配置PC4(ADC1_IN14)为检测引脚 ![](https://img2018.cnblogs.com/blog/1392333/201811/1392333-20181125164730793-951664517.jpg) (2)配置ADC时钟,要小于14MHz ![](https://img2018.cnblogs.com/blog/1392333/201811/1392333-20181125165138212-1519488127.jpg) (3)配置ADC参数,选择需要的模式,我这里只有一个通道 ![](https://img2018.cnblogs.com/blog/1392333/201811/1392333-20181125165834090-1964425162.jpg) (4)配置DMA,数据传递为外设到存储器,单次模式(转换完成后结束,再次使用需要重新开启),循环模式(连续转换),数据位选半字,外设地址不递增,内存地址看情况(这里选递增)。 ![](https://img2018.cnblogs.com/blog/1392333/201811/1392333-20181125171127915-690792802.jpg)

    2.编程中用到的函数

    HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length) //开启ADC的DMA转换,在这个函数里面,包含三个子函数HAL_ADC_Start,HAL_DMA_Start,SET_BIT(hadc1.Instance->CR2, ADC_CR2_DMA)(使能ADC的DMA功能,ADC_DMA_ENABLE) HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc) //停止DMA的采集 注意:如果DMA采用的Normal模式,上面的两个函数都应该写进while里,如果采用的Circular模式,则只用在while外面写一次。另外,我用stm32l151芯片时,这两个函数必须成对出现才能采集到正确的数据,而用stm32f103时,则不需要使用HAL_ADC_Stop_DMA

    3.代码实现

    ![](https://img2018.cnblogs.com/blog/1392333/201811/1392333-20181125194332429-1856597159.jpg)
    ![](https://img2018.cnblogs.com/blog/1392333/201811/1392333-20181125194341429-1684341836.jpg)

    4.补充说明

    如果程序阻塞在HAL_ADC_Start_DMA()里面,可能是一直再进DMA中断,可以将DMA的NVIC使能的代码注释掉,能够解决问题 ![](https://img2018.cnblogs.com/blog/1392333/201811/1392333-20181125194814512-2136130957.jpg)
  • 相关阅读:
    设置装订线
    设置页边距
    查看压缩文件的信息
    格式化3
    格式化2
    条件格式化1
    单独设置奇偶页的页眉页脚
    方法重写注意点
    super注意点
    稀疏数组的压缩和还原
  • 原文地址:https://www.cnblogs.com/yf4695/p/10016351.html
Copyright © 2011-2022 走看看