找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2560|回復: 0
收起左側

ADC-單通道采集(DMA)

[復制鏈接]
ID:297076 發(fā)表于 2018-3-26 10:04 | 顯示全部樓層 |閱讀模式

bsp_adc.h文件內容:

1. #ifndef __ADC_H__

2. #define __ADC_H__

3.  

4. /* 包含頭文件----------------------------------------------------------------*/

5. #include "stm32f1xx_hal.h"

6.  

7. /* 類型定義------------------------------------------------------------------*/

8. /* 宏定義 --------------------------------------------------------------------*/

9. // 注意:用作ADC采集的IO必須沒有復用,否則采集電壓會有影響

10./********************ADC輸入通道(引腳)配置**************************/

11.//#define ADCx_RCC_CLK_ENABLE()           __HAL_RCC_ADC1_CLK_ENABLE()

12.//#define ADCx_RCC_CLK_DISABLE()          __HAL_RCC_ADC1_CLK_DISABLE()

13.//#define DMAx_RCC_CLK_ENABLE()           __HAL_RCC_DMA1_CLK_ENABLE()

14.//#define ADCx                            ADC1

15.//#define ADC_DMAx_CHANNELn               DMA1_Channel1

16.//#define ADC_DMAx_CHANNELn_IRQn          DMA1_Channel1_IRQn

17.//#define ADC_DMAx_CHANNELn_IRQHANDLER    DMA1_Channel1_IRQHandler

18.

19.#define ADCx_RCC_CLK_ENABLE()           __HAL_RCC_ADC3_CLK_ENABLE()

20.#define ADCx_RCC_CLK_DISABLE()          __HAL_RCC_ADC3_CLK_DISABLE()

21.#define DMAx_RCC_CLK_ENABLE()           __HAL_RCC_DMA2_CLK_ENABLE()

22.#define ADCx                            ADC3

23.#define ADC_DMAx_CHANNELn               DMA2_Channel5

24.#define ADC_DMAx_CHANNELn_IRQn          DMA2_Channel4_5_IRQn

25.#define ADC_DMAx_CHANNELn_IRQHANDLER    DMA2_Channel4_5_IRQHandler

26.

27.#define ADC_GPIO_ClK_ENABLE()           __HAL_RCC_GPIOC_CLK_ENABLE()

28.#define ADC_GPIO                        GPIOC

29.//#define ADC_GPIO_PIN                  GPIO_PIN_0       // 連接至板載精密可調電阻(需加跳帽)

30.//#define ADC_CHANNEL                   ADC_CHANNEL_10    // 連接至板載精密可調電阻(需加跳帽)

31.#define ADC_GPIO_PIN                    GPIO_PIN_1       // 連接至板載光敏電阻(需加跳帽)

32.#define ADC_CHANNEL                     ADC_CHANNEL_11    // 連接至板載光敏電阻(需加跳帽)

33.              

34./* 擴展變量------------------------------------------------------------------*/

35.extern ADC_HandleTypeDef hadcx;

36.extern DMA_HandleTypeDef hdma_adcx;

37./* 函數(shù)聲明------------------------------------------------------------------*/

38.void MX_ADCx_Init(void);

39.

40.#endif /* __ADC_H__ */

41.

42./******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發(fā)團隊 *****END OF FILE****/

43.


bsp_adc.c文件內容:

1. /**

2.   ******************************************************************************

3.   * 文件名程: bsp_adc.c

4.   * 作    者: 硬石嵌入式開發(fā)團隊

5.   * 版    本: V1.0

6.   * 編寫日期: 2015-10-04

7.   * 功    能: 板載ADC電壓采集底層驅動程序

8.   *******************************************************************************/

9. /* 包含頭文件----------------------------------------------------------------*/

10.#include "adc/bsp_adc.h"

11.

12./* 私有類型定義--------------------------------------------------------------*/

13./* 私有宏定義----------------------------------------------------------------*/

14./* 私有變量------------------------------------------------------------------*/

15.ADC_HandleTypeDef hadcx;

16.DMA_HandleTypeDef hdma_adcx;

17./* 擴展變量 ------------------------------------------------------------------*/

18./* 私有函數(shù)原形--------------------------------------------------------------*/

19./* 函數(shù)體--------------------------------------------------------------------*/

20./**

21.  * 函數(shù)功能: AD轉換初始化

22.  * 輸入參數(shù): 無

23.  * 返 回 值: 無

24.  * 說    明:無

25.  */

26.void MX_ADCx_Init(void)

27.{

28.  ADC_ChannelConfTypeDef sConfig;

29.

30.  // ADC功能配置

31.  hadcx.Instance = ADCx;

32.  hadcx.Init.ScanConvMode = ADC_SCAN_DISABLE;

33.  hadcx.Init.ContinuousConvMode = ENABLE;

34.  hadcx.Init.DiscontinuousConvMode = DISABLE;

35.  hadcx.Init.ExternalTrigConv = ADC_SOFTWARE_START;

36.  hadcx.Init.DataAlign = ADC_DATAALIGN_RIGHT;

37.  hadcx.Init.NbrOfConversion = 1;

38.  HAL_ADC_Init(&hadcx);

39.

40.  // 配置采樣通道

41.  sConfig.Channel = ADC_CHANNEL;

42.  sConfig.Rank = 1;

43.  sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;

44.  HAL_ADC_ConfigChannel(&hadcx, &sConfig);

45.}

46.

47./**

48.  * 函數(shù)功能: ADC外設初始化配置

49.  * 輸入參數(shù): hadc:AD外設句柄類型指針

50.  * 返 回 值: 無

51.  * 說    明: 該函數(shù)被HAL庫內部調用

52.  */

53.void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)

54.{

55.  GPIO_InitTypeDef GPIO_InitStruct;

56.  if(hadc->Instance==ADCx)

57.  {

58.    /* 外設時鐘使能 */

59.    ADCx_RCC_CLK_ENABLE();

60.   

61.    /* AD轉換通道引腳時鐘使能 */

62.    ADC_GPIO_ClK_ENABLE();

63.   

64.    /* DMA時鐘使能 */

65.    DMAx_RCC_CLK_ENABLE();

66.      

67.    /* AD轉換通道引腳初始化 */

68.    GPIO_InitStruct.Pin = ADC_GPIO_PIN;

69.    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

70.    HAL_GPIO_Init(ADC_GPIO, &GPIO_InitStruct);

71.

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_HALFWORD;

78.    hdma_adcx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;

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.    /* 外設中斷優(yōu)先級配置和使能中斷 */

86.    HAL_NVIC_SetPriority(ADC_DMAx_CHANNELn_IRQn, 0, 0);

87.    HAL_NVIC_EnableIRQ(ADC_DMAx_CHANNELn_IRQn);

88.  }

89.}

90.

91./**

92.  * 函數(shù)功能: ADC外設反初始化配置

93.  * 輸入參數(shù): hadc:AD外設句柄類型指針

94.  * 返 回 值: 無

95.  * 說    明: 該函數(shù)被HAL庫內部調用

96.  */

97.void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)

98.{

99.  if(hadc->Instance==ADCx)

100. {

101.    /* 禁用ADC外設時鐘 */

102.    ADCx_RCC_CLK_DISABLE();

103.  

104.    /* AD轉換通道引腳反初始化 */

105.    HAL_GPIO_DeInit(ADC_GPIO, ADC_GPIO_PIN);

106.

107.    /* DMA外設反初始化*/

108.    HAL_DMA_DeInit(hadc->DMA_Handle);

109.  }

110.}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表