你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【HAL库每天一例】第023例:ADC-多通道采集(DMA)

[复制链接]
haohao663 提问时间:2016-5-28 08:51 /
本帖最后由 haohao663 于 2016-6-16 11:31 编辑

【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:https://pan.baidu.com/s/1i574oPv
密码:r3s3
(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-023. ADC-多通道采集(DMA)

/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-023. ADC-多通道采集(DMA)
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */
【1】例程简介
  ADC:模拟量数字量转换器,可以将电压模拟量转换为数字量,STM32F103ZET6有3个12bit的ADC,
可实现0~3.3V电压转变对应0~4095数值。
  ADC1和ADC3拥有DMA功能,可以使用DMA传输转换结果。可以同时使能多个通道一起转换。
  
  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  CN17       PC0           RV                 已接入
  CN17       PC1           RP                 已接入
  
【3】操作及现象
    使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口,打开PC端
串口调试助手,设置参数为115200 8-NO-1。下载完程序之后,在串口调试助手窗口可看到四个通道
引脚对应的ADC转换值和电压值。

CubeMX_1.jpg
CubeMX_2.jpg
CubeMX_3.jpg
CubeMX_4.jpg
CubeMX_5.jpg
CubeMX_6.jpg
CubeMX_7.jpg
CubeMX_8.jpg

bsp_adc.h文件内容:
  1. #ifndef __ADC_H__
  2. #define        __ADC_H__

  3. /* 包含头文件 ----------------------------------------------------------------*/
  4. #include "stm32f1xx_hal.h"

  5. /* 类型定义 ------------------------------------------------------------------*/
  6. /* 宏定义 --------------------------------------------------------------------*/
  7. // 注意:用作ADC采集的IO必须没有复用,否则采集电压会有影响
  8. /********************ADC输入通道(引脚)配置**************************/
  9. #define ADCx_RCC_CLK_ENABLE()            __HAL_RCC_ADC1_CLK_ENABLE()
  10. #define ADCx_RCC_CLK_DISABLE()           __HAL_RCC_ADC1_CLK_DISABLE()
  11. #define DMAx_RCC_CLK_ENABLE()            __HAL_RCC_DMA1_CLK_ENABLE()
  12. #define ADCx                             ADC1
  13. #define ADC_DMAx_CHANNELn                DMA1_Channel1
  14. #define ADC_DMAx_CHANNELn_IRQn           DMA1_Channel1_IRQn
  15. #define ADC_DMAx_CHANNELn_IRQHANDLER     DMA1_Channel1_IRQHandler

  16. //#define ADCx_RCC_CLK_ENABLE()            __HAL_RCC_ADC3_CLK_ENABLE()
  17. //#define ADCx_RCC_CLK_DISABLE()           __HAL_RCC_ADC3_CLK_DISABLE()
  18. //#define DMAx_RCC_CLK_ENABLE()            __HAL_RCC_DMA2_CLK_ENABLE()
  19. //#define ADCx                             ADC3
  20. //#define ADC_DMAx_CHANNELn                DMA2_Channel5
  21. //#define ADC_DMAx_CHANNELn_IRQn           DMA2_Channel4_5_IRQn
  22. //#define ADC_DMAx_CHANNELn_IRQHANDLER     DMA2_Channel4_5_IRQHandler

  23. #define ADC_GPIO_ClK_ENABLE()            __HAL_RCC_GPIOC_CLK_ENABLE()
  24. #define ADC_GPIO                         GPIOC

  25. #define ADC_GPIO_PIN1                    GPIO_PIN_0        // 连接至板载精密可调电阻(需加跳帽)
  26. #define ADC_CHANNEL1                     ADC_CHANNEL_10    // 连接至板载精密可调电阻(需加跳帽)
  27. #define ADC_GPIO_PIN2                    GPIO_PIN_1        // 连接至板载光敏电阻(需加跳帽)
  28. #define ADC_CHANNEL2                     ADC_CHANNEL_11    // 连接至板载光敏电阻(需加跳帽)
  29. #define ADC_GPIO_PIN3                    GPIO_PIN_3
  30. #define ADC_CHANNEL3                     ADC_CHANNEL_13
  31. #define ADC_GPIO_PIN4                    GPIO_PIN_2
  32. #define ADC_CHANNEL4                     ADC_CHANNEL_12         

  33. #define ADC_NUMOFCHANNEL                 4

  34. /* 扩展变量 ------------------------------------------------------------------*/
  35. extern ADC_HandleTypeDef hadcx;
  36. extern DMA_HandleTypeDef hdma_adcx;
  37. /* 函数声明 ------------------------------------------------------------------*/
  38. void MX_ADCx_Init(void);

  39. #endif /* __ADC_H__ */

复制代码

bsp_adc.c文件内容:
  1. /* 包含头文件 ----------------------------------------------------------------*/
  2. #include "adc/bsp_adc.h"

  3. /* 私有类型定义 --------------------------------------------------------------*/
  4. /* 私有宏定义 ----------------------------------------------------------------*/
  5. /* 私有变量 ------------------------------------------------------------------*/
  6. ADC_HandleTypeDef hadcx;
  7. DMA_HandleTypeDef hdma_adcx;
  8. /* 扩展变量 ------------------------------------------------------------------*/
  9. /* 私有函数原形 --------------------------------------------------------------*/
  10. /* 函数体 --------------------------------------------------------------------*/
  11. /**
  12.   * 函数功能: AD转换初始化
  13.   * 输入参数: 无
  14.   * 返 回 值: 无
  15.   * 说    明:无
  16.   */
  17. void MX_ADCx_Init(void)
  18. {
  19.   ADC_ChannelConfTypeDef sConfig;

  20.   // ADC功能配置
  21.   hadcx.Instance = ADCx;
  22.   hadcx.Init.ScanConvMode = ADC_SCAN_ENABLE;
  23.   hadcx.Init.ContinuousConvMode = ENABLE;
  24.   hadcx.Init.DiscontinuousConvMode = DISABLE;
  25.   hadcx.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  26.   hadcx.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  27.   hadcx.Init.NbrOfConversion = ADC_NUMOFCHANNEL;
  28.   HAL_ADC_Init(&hadcx);

  29.   // 配置采样通道
  30.   sConfig.Channel = ADC_CHANNEL1;
  31.   sConfig.Rank = 1;
  32.   sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
  33.   HAL_ADC_ConfigChannel(&hadcx, &sConfig);

  34.   // 配置采样通道
  35.   sConfig.Channel = ADC_CHANNEL2;
  36.   sConfig.Rank = 2;
  37.   HAL_ADC_ConfigChannel(&hadcx, &sConfig);

  38.   // 配置采样通道
  39.   sConfig.Channel = ADC_CHANNEL3;
  40.   sConfig.Rank = 3;
  41.   HAL_ADC_ConfigChannel(&hadcx, &sConfig);
  42.   
  43.   // 配置采样通道
  44.   sConfig.Channel = ADC_CHANNEL4;
  45.   sConfig.Rank = 4;
  46.   HAL_ADC_ConfigChannel(&hadcx, &sConfig);
  47. }

  48. /**
  49.   * 函数功能: ADC外设初始化配置
  50.   * 输入参数: hadc:AD外设句柄类型指针
  51.   * 返 回 值: 无
  52.   * 说    明: 该函数被HAL库内部调用
  53.   */
  54. void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
  55. {
  56.   GPIO_InitTypeDef GPIO_InitStruct;
  57.   if(hadc->Instance==ADCx)
  58.   {
  59.     /* 外设时钟使能 */
  60.     ADCx_RCC_CLK_ENABLE();
  61.    
  62.     /* AD转换通道引脚时钟使能 */
  63.     ADC_GPIO_ClK_ENABLE();
  64.    
  65.     /* DMA时钟使能 */
  66.     DMAx_RCC_CLK_ENABLE();
  67.       
  68.     /* AD转换通道引脚初始化 */
  69.     GPIO_InitStruct.Pin = ADC_GPIO_PIN1|ADC_GPIO_PIN2|ADC_GPIO_PIN3|ADC_GPIO_PIN4;
  70.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  71.     HAL_GPIO_Init(ADC_GPIO, &GPIO_InitStruct);

  72.     /* DMA外设初始化配置 */  
  73.     hdma_adcx.Instance = ADC_DMAx_CHANNELn;
  74.     hdma_adcx.Init.Direction = DMA_PERIPH_TO_MEMORY;
  75.     hdma_adcx.Init.PeriphInc = DMA_PINC_DISABLE;
  76.     hdma_adcx.Init.MemInc = DMA_MINC_ENABLE;
  77.     hdma_adcx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  78.     hdma_adcx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
  79.     hdma_adcx.Init.Mode = DMA_CIRCULAR;
  80.     hdma_adcx.Init.Priority = DMA_PRIORITY_HIGH;
  81.     HAL_DMA_Init(&hdma_adcx);
  82.     /* 连接DMA */
  83.     __HAL_LINKDMA(hadc,DMA_Handle,hdma_adcx);
  84.    
  85.     /* 外设中断优先级配置和使能中断 */
  86.     HAL_NVIC_SetPriority(ADC_DMAx_CHANNELn_IRQn, 0, 0);
  87.     HAL_NVIC_EnableIRQ(ADC_DMAx_CHANNELn_IRQn);
  88.   }
  89. }

  90. /**
  91.   * 函数功能: ADC外设反初始化配置
  92.   * 输入参数: hadc:AD外设句柄类型指针
  93.   * 返 回 值: 无
  94.   * 说    明: 该函数被HAL库内部调用
  95.   */
  96. void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
  97. {
  98.   if(hadc->Instance==ADCx)
  99.   {
  100.     /* 禁用ADC外设时钟 */
  101.     ADCx_RCC_CLK_DISABLE();
  102.   
  103.     /* AD转换通道引脚反初始化 */
  104.     HAL_GPIO_DeInit(ADC_GPIO, ADC_GPIO_PIN1|ADC_GPIO_PIN2|ADC_GPIO_PIN3|ADC_GPIO_PIN4);

  105.     /* DMA外设反初始化*/
  106.     HAL_DMA_DeInit(hadc->DMA_Handle);
  107.   }
  108. }
复制代码

串口调试助手截图.jpg

ADC IO 汇总.jpg
收藏 2 评论7 发布时间:2016-5-28 08:51

举报

7个回答
Ian-392967 回答时间:2016-7-2 12:36:22
多谢楼主分享!
carryliu 回答时间:2016-9-20 13:22:22
樓主的下載連結失效了阿, 幫幫忙!! 謝謝
haohao663 回答时间:2016-9-20 14:02:45
百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1
360云盘:http://yunpan.cn/OcPiRp3wEcA92u密码 cfb6
pusiyu-167815 回答时间:2018-4-7 13:31:34
链接失效了呐。。。。。重新发一个啊。。。。。
shinyzhuo 回答时间:2019-5-28 14:43:50
pusiyu-167815 发表于 2018-4-7 13:31
链接失效了呐。。。。。重新发一个啊。。。。。

硬石YS-F1Pro开发板资料
百度云盘:https://pan.baidu.com/s/1dWZ2xS 密码:g2us
唐英tcy 回答时间:2019-6-12 20:47:35
谢谢楼主分享
chensheng168 回答时间:2020-3-23 18:32:57
谢谢分享!!!

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版