|
用cubeMX生成的hal库代码, 其中adc.c代码如下 / USER CODE BEGIN Header / /**
/ / USER CODE END Header / / Includes ------------------------------------------------------------------*/ include "adc.h"/ USER CODE BEGIN 0 / / USER CODE END 0 / ADC_HandleTypeDef hadc; DMA_HandleTypeDef hdma_adc; / ADC init function / void MX_ADC_Init(void) { / USER CODE BEGIN ADC_Init 0 / / USER CODE END ADC_Init 0 / ADC_ChannelConfTypeDef sConfig = {0}; / USER CODE BEGIN ADC_Init 1 / / USER CODE END ADC_Init 1 / /* Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) / hadc.Instance = ADC1; hadc.Init.OversamplingMode = DISABLE; hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.SamplingTime = ADC_SAMPLETIME_12CYCLES_5; hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ContinuousConvMode = ENABLE; hadc.Init.DiscontinuousConvMode = DISABLE; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc.Init.DMAContinuousRequests = ENABLE; hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV; hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc.Init.LowPowerAutoWait = DISABLE; hadc.Init.LowPowerFrequencyMode = DISABLE; hadc.Init.LowPowerAutoPowerOff = DISABLE; if (HAL_ADC_Init(&hadc) != HAL_OK) { Error_Handler(); } /* Configure for the selected ADC regular channel to be converted. / sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { Error_Handler(); } /* Configure for the selected ADC regular channel to be converted. / sConfig.Channel = ADC_CHANNEL_7; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { Error_Handler(); } / USER CODE BEGIN ADC_Init 2 / / USER CODE END ADC_Init 2 / } void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(adcHandle->Instance==ADC1) { / USER CODE BEGIN ADC1_MspInit 0 / / USER CODE END ADC1_MspInit 0 / / ADC1 clock enable / __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /*ADC GPIO Configuration PA0-CK_IN ------> ADC_IN0 PA7 ------> ADC_IN7 / GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); / ADC1 DMA Init / / ADC Init / hdma_adc.Instance = DMA1_Channel1; hdma_adc.Init.Request = DMA_REQUEST_0; hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc.Init.MemInc = DMA_MINC_ENABLE; hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc.Init.Mode = DMA_CIRCULAR; hdma_adc.Init.Priority = DMA_PRIORITY_HIGH; if (HAL_DMA_Init(&hdma_adc) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc); / USER CODE BEGIN ADC1_MspInit 1 / / USER CODE END ADC1_MspInit 1 / } } void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) { if(adcHandle->Instance==ADC1) { / USER CODE BEGIN ADC1_MspDeInit 0 / / USER CODE END ADC1_MspDeInit 0 / / Peripheral clock disable / __HAL_RCC_ADC1_CLK_DISABLE(); /*ADC GPIO Configuration PA0-CK_IN ------> ADC_IN0 PA7 ------> ADC_IN7 / HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_7); / ADC1 DMA DeInit / HAL_DMA_DeInit(adcHandle->DMA_Handle); / USER CODE BEGIN ADC1_MspDeInit 1 / / USER CODE END ADC1_MspDeInit 1 / } } / USER CODE BEGIN 1 / / USER CODE END 1 / 其中main.c代码如下 / USER CODE BEGIN Header / /**
/ / USER CODE END Header / / Includes ------------------------------------------------------------------*/ include "main.h"include "adc.h"include "dma.h"include "usart.h"include "gpio.h"/ Private includes ----------------------------------------------------------/ / USER CODE BEGIN Includes / include <stdio.h>/ USER CODE END Includes / / Private typedef -----------------------------------------------------------/ / USER CODE BEGIN PTD / / USER CODE END PTD / / Private define ------------------------------------------------------------/ / USER CODE BEGIN PD / / USER CODE END PD / / Private macro -------------------------------------------------------------/ / USER CODE BEGIN PM / / USER CODE END PM / / Private variables ---------------------------------------------------------/ / USER CODE BEGIN PV / / USER CODE END PV / / Private function prototypes -----------------------------------------------/ void SystemClock_Config(void); / USER CODE BEGIN PFP / / USER CODE END PFP / / Private user code ---------------------------------------------------------/ / USER CODE BEGIN 0 / int fputc(int ch, FILE f) { HAL_UART_Transmit(&huart2, (uint8_t )&ch, 1, 1000); return ch; } / USER CODE END 0 / uint16_t adcValue[2] = { 0 }; /**
/ USER CODE BEGIN 1 / uint16_t value = 0; float voltage = 0; / USER CODE END 1 / / MCU Configuration--------------------------------------------------------/ / Reset of all peripherals, Initializes the Flash interface and the Systick. / HAL_Init(); / USER CODE BEGIN Init / / USER CODE END Init / / Configure the system clock / SystemClock_Config(); / USER CODE BEGIN SysInit / / USER CODE END SysInit / / Initialize all configured peripherals / MX_GPIO_Init(); MX_DMA_Init(); MX_ADC_Init(); MX_USART2_UART_Init(); / USER CODE BEGIN 2 / HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED); printf("adjust done\r\n"); / USER CODE END 2 / HAL_ADC_Start_DMA(&hadc, (uint32_t )adcValue, 2); / Infinite loop / / USER CODE BEGIN WHILE */ while (1) { HAL_Delay(1000); printf("adc_values[0]=%d, [1]=%d\r\n", adcValue[0], adcValue[1]); // printf("adc_values[0]=%d, [1]=%d, [2]=%d, [3]=%d, [4]=%d, [5]=%d, [6]=%d, [7]=%d\r\n", // adcValue[0], adcValue[1], adcValue[2], // adcValue[3], adcValue[4], adcValue[5], adcValue[6],adcValue[7] ); // HAL_ADC_Start(&hadc); // HAL_ADC_PollForConversion(&hadc, 100); // value = HAL_ADC_GetValue(&hadc); // HAL_ADC_Stop(&hadc); //voltage = adc_values[0]3.3/4096; //printf("PA0 voltage %.2f\r\n", voltage); //voltage = adc_values[1]3.3/4096; //printf("PA7 voltage %.2f\r\n", voltage); / USER CODE END WHILE / / USER CODE BEGIN 3 / } / USER CODE END 3 / } /**
/* Configure the main internal regulator output voltage / __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /** Initializes the RCC Oscillators according to the specified parameters
/* Initializes the CPU, AHB and APB buses clocks / RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { Error_Handler(); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2; PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); } } / USER CODE BEGIN 4 / / USER CODE END 4 / /**
其中dma.c代码如下 / USER CODE BEGIN Header / /**
/ / USER CODE END Header */ / Includes ------------------------------------------------------------------/ include "dma.h"/ USER CODE BEGIN 0 / / USER CODE END 0 / /----------------------------------------------------------------------------/ / Configure DMA / /----------------------------------------------------------------------------/ / USER CODE BEGIN 1 / / USER CODE END 1 / /**
/ DMA controller clock enable / __HAL_RCC_DMA1_CLK_ENABLE(); / DMA interrupt init / / DMA1_Channel1_IRQn interrupt configuration / HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); } / USER CODE BEGIN 2 / / USER CODE END 2 / 目前用PA0和PA7测试,现象是任一个接GND或3.3V,另一个采集到的电压都会跟着变 日志如下 [08:41:42.257]收←◆adc_values[0]=248, [1]=504 [08:41:43.253]收←◆adc_values[0]=234, [1]=530 [08:41:44.257]收←◆adc_values[0]=255, [1]=506 [08:41:44.482]收←◆adjust done [08:41:45.486]收←◆adc_values[0]=236, [1]=524 [08:41:46.495]收←◆adc_values[0]=227, [1]=521 [08:41:47.495]收←◆adc_values[0]=267, [1]=510 [08:41:48.504]收←◆adc_values[0]=245, [1]=504 [08:41:49.504]收←◆adc_values[0]=252, [1]=502 [08:41:50.504]收←◆adc_values[0]=258, [1]=508 [08:41:51.512]收←◆adc_values[0]=227, [1]=516 [08:41:52.503]收←◆adc_values[0]=247, [1]=501 [08:41:53.510]收←◆adc_values[0]=216, [1]=512 [08:41:54.516]收←◆adc_values[0]=249, [1]=505 [08:41:55.522]收←◆adc_values[0]=252, [1]=501 [08:41:56.523]收←◆adc_values[0]=249, [1]=505 [08:41:57.522]收←◆adc_values[0]=253, [1]=502 [08:41:58.523]收←◆adc_values[0]=244, [1]=490 [08:41:59.537]收←◆adc_values[0]=255, [1]=506 [08:42:00.536]收←◆adc_values[0]=221, [1]=466 [08:42:01.535]收←◆adc_values[0]=229, [1]=481 [08:42:02.550]收←◆adc_values[0]=238, [1]=530 [08:42:03.550]收←◆adc_values[0]=296, [1]=506 [08:42:04.551]收←◆adc_values[0]=296, [1]=503 [08:42:05.546]收←◆adc_values[0]=236, [1]=489 [08:42:06.555]收←◆adc_values[0]=220, [1]=495 [08:42:07.547]收←◆adc_values[0]=438, [1]=600 [08:42:08.553]收←◆adc_values[0]=273, [1]=522 [08:42:09.561]收←◆adc_values[0]=937, [1]=872 [08:42:10.565]收←◆adc_values[0]=757, [1]=768 [08:42:11.561]收←◆adc_values[0]=307, [1]=522 [08:42:12.564]收←◆adc_values[0]=386, [1]=543 [08:42:13.568]收←◆adc_values[0]=689, [1]=733 [08:42:14.572]收←◆adc_values[0]=519, [1]=660 [08:42:15.576]收←◆adc_values[0]=288, [1]=509 [08:42:16.572]收←◆adc_values[0]=257, [1]=506 [08:42:17.579]收←◆adc_values[0]=265, [1]=510 [08:42:18.584]收←◆adc_values[0]=240, [1]=490 [08:42:19.590]收←◆adc_values[0]=274, [1]=504 [08:42:20.592]收←◆adc_values[0]=247, [1]=493 [08:42:21.602]收←◆adc_values[0]=230, [1]=522 [08:42:22.605]收←◆adc_values[0]=234, [1]=489 [08:42:23.607]收←◆adc_values[0]=263, [1]=510 [08:42:24.611]收←◆adc_values[0]=228, [1]=517 [08:42:25.609]收←◆adc_values[0]=2113, [1]=1590 [08:42:26.623]收←◆adc_values[0]=2109, [1]=1608 [08:42:27.620]收←◆adc_values[0]=2107, [1]=1597 [08:42:28.626]收←◆adc_values[0]=2109, [1]=1610 [08:42:29.621]收←◆adc_values[0]=2109, [1]=1567 [08:42:30.627]收←◆adc_values[0]=2109, [1]=1589 [08:42:31.627]收←◆adc_values[0]=4095, [1]=3208 [08:42:32.632]收←◆adc_values[0]=2107, [1]=1602 [08:42:33.638]收←◆adc_values[0]=2100, [1]=1590 [08:42:34.645]收←◆adc_values[0]=2107, [1]=1605 [08:42:35.647]收←◆a [08:42:35.663]收←◆dc_values[0]=2105, [1]=1562 [08:42:36.652]收←◆adc_values[0]=2107, [1]=1580 [08:42:37.661]收←◆adc_values[0]=2105, [1]=1593 [08:42:38.665]收←◆adc_values[0]=2106, [1]=1587 [08:42:39.671]收←◆adc_values[0]=2105, [1]=1594 [08:42:40.667]收←◆adc_values[0]=2106, [1]=1558 [08:42:41.684]收←◆adc_values[0]=2103, [1]=1604 [08:42:42.688]收←◆adc_values[0]=2108, [1]=1594 [08:42:43.677]收←◆adc_values[0]=2103, [1]=1576 [08:42:44.686]收←◆adc_values[0]=4095, [1]=3168 [08:42:45.688]收←◆adc_values[0]=4095, [1]=3162 [08:42:46.700]收←◆adc_values[0]=2107, [1]=1616 [08:42:47.703]收←◆adc_values[0]=2671, [1]=2023 [08:42:48.709]收←◆adc_values[0]=4095, [1]=3164 [08:42:49.714]收←◆adc_values[0]=4095, [1]=3163 [08:42:50.718]收←◆adc_values[0]=4095, [1]=3154 [08:42:51.722]收←◆adc_values[0]=4095, [1]=3164 [08:42:52.716]收←◆adc_values[0]=4095, [1]=3190 [08:42:53.720]收←◆adc_values[0]=4095, [1]=3184 [08:42:54.730]收←◆adc_values[0]=4095, [1]=3172 [08:42:55.735]收←◆adc_values[0]=4095, [1]=3168 [08:42:56.742]收←◆adc_values[0]=2105, [1]=1602 [08:42:57.741]收←◆adc_values[0]=2107, [1]=1598 [08:42:58.744]收←◆adc_values[0]=4095, [1]=3194 [08:42:59.742]收←◆adc_values[0]=4095, [1]=3164 [08:43:00.753]收←◆adc_values[0]=4095, [1]=3176 [08:43:01.762]收←◆adc_values[0]=4, [1]=333 [08:43:02.767]收←◆adc_values[0]=2, [1]=356 [08:43:03.769]收←◆adc_values[0]=2, [1]=367 [08:43:04.761]收←◆adc_values[0]=3, [1]=363 [08:43:05.762]收←◆adc_values[0]=4095, [1]=3154 [08:43:06.771]收←◆adc_values[0]=2105, [1]=1617 [08:43:07.777]收←◆adc_values[0]=2108, [1]=1536 [08:43:08.785]收←◆adc_values[0]=2104, [1]=1565 [08:43:09.790]收←◆adc_values[0]=2105, [1]=1573 [08:43:11.797]收←◆adc_values[0]=2105, [1]=1583 [08:43:12.789]收←◆adc_values[0]=2108, [1]=1588 [08:43:13.809]收←◆adc_values[0]=2107, [1]=1582 [08:43:14.813]收←◆adc_values[0]=2109, [1]=1586 [08:43:15.810]收←◆adc_values[0]=2108, [1]=1592 [08:43:16.815]收←◆adc_values[0]=2107, [1]=2068 [08:43:17.815]收←◆adc_values[0]=2105, [1]=2070 [08:43:18.819]收←◆adc_values[0]=3503, [1]=4095 [08:43:19.825]收←◆adc_values[0]=3543, [1]=4095 [08:43:20.840]收←◆adc_values[0]=3447, [1]=4095 [08:43:21.834]收←◆adc_values[0]=2109, [1]=2069 [08:43:22.841]收←◆adc_values[0]=2108, [1]=3 [08:43:23.844]收←◆adc_values[0]=2106, [1]=3 [08:43:24.851]收←◆adc_values[0]=2593, [1]=594 [08:43:25.843]收←◆adc_values[0]=2107, [1]=587 [08:43:26.859]收←◆adc_values[0]=2716, [1]=2 [08:43:27.865]收←◆adc_values[0]=2105, [1]=2068 [08:43:28.854]收←◆adc_values[0]=4095, [1]=2066 [08:43:29.873]收←◆adc_values[0]=4095, [1]=2066 [08:43:30.877]收←◆adc_values[0]=2105, [1]=2068 [08:43:31.872]收←◆adc_values[0]=3, [1]=2482 [08:43:32.875]收←◆adc_values[0]=4, [1]=2478 [08:43:33.876]收←◆adc_values[0]=3, [1]=2478 [08:43:34.882]收←◆adc_values[0]=3, [1]=2482 [08:43:35.893]收←◆adc_values[0]=6, [1]=2482 [08:43:36.887]收←◆adc_values[0]=2, [1]=2478 [08:43:37.890]收←◆adc_values[0]=4, [1]=3598 [08:43:38.895]收←◆adc_values[0]=4095, [1]=2606 [08:43:39.897]收←◆adc_values[0]=4095, [1]=2606 [08:43:40.909]收←◆adc_values[0]=4095, [1]=2605 [08:43:41.906]收←◆adc_values[0]=4095, [1]=2530 [08:43:42.913]收←◆adc_values[0]=2105, [1]=2066 [08:43:43.915]收←◆adc_values[0]=2108, [1]=2066 [08:43:44.919]收←◆adc_values[0]=2105, [1]=2065 [08:43:45.927]收←◆adc_values[0]=2105, [1]=2068 [08:43:46.933]收←◆adc_values[0]=2105, [1]=2066 [08:43:47.924]收←◆adc_values[0]=2105, [1]=2068 [08:43:48.936]收←◆adc_values[0]=2107, [1]=2068 [08:43:50.946]收←◆adc_values[0]=2113, [1]=1583 [08:43:51.950]收←◆adc_values[0]=245, [1]=492 [08:43:52.957]收←◆adc_values[0]=234, [1]=484 [08:43:53.958]收←◆adc_values[0]=234, [1]=488 [08:43:54.962]收←◆adc_values[0]=240, [1]=496 [08:43:55.966]收←◆adc_values[0]=231, [1]=483 [08:43:56.959]收←◆adc_values[0]=241, [1]=487 [08:43:57.967]收←◆adc_values[0]=241, [1]=487 [08:43:58.970]收←◆adc_values[0]=230, [1]=478 [08:43:59.976]收←◆adc_values[0]=176, [1]=455 [08:44:00.982]收←◆adc_values[0]=252, [1]=489 [08:44:01.974]收←◆adc_values[0]=242, [1]=480 [08:44:02.992]收←◆adc_values[0]=272, [1]=478 [08:44:03.993]收←◆adc_values[0]=245, [1]=496 [08:44:04.993]收←◆adc_values[0]=1, [1]=334 [08:44:06.001]收←◆adc_values[0]=2, [1]=335 [08:44:07.003]收←◆adc_values[0]=2, [1]=336 [08:44:08.002]收←◆adc_values[0]=2, [1]=336 [08:44:09.004]收←◆adc_values[0]=2, [1]=338 [08:44:10.005]收←◆adc_values[0]=2, [1]=336 [08:44:11.014]收←◆adc_values[0]=0, [1]=336 [08:44:12.018]收←◆adc_values[0]=2, [1]=336 [08:44:13.014]收←◆adc_values[0]=278, [1]=471 [08:44:14.025]收←◆adc_values[0]=199, [1]=462 [08:44:15.028]收←◆adc_values[0]=211, [1]=495 [08:44:16.022]收←◆adc_values[0]=4095, [1]=3186 [08:44:17.036]收←◆adc_values[0]=4093, [1]=3186 [08:44:18.039]收←◆adc_values[0]=4093, [1]=3192 [08:44:19.043]收←◆adc_values[0]=4093, [1]=3180 [08:44:20.047]收←◆adc_values[0]=4093, [1]=3186 [08:44:21.039]收←◆adc_values[0]=4093, [1]=3186 [08:44:22.054]收←◆adc_values[0]=212, [1]=484 [08:44:23.045]收←◆adc_values[0]=240, [1]=474 [08:44:24.053]收←◆adc_values[0]=215, [1]=462 [08:44:25.054]收←◆adc_values[0]=0, [1]=337 [08:44:26.060]收←◆adc_values[0]=0, [1]=336 [08:44:27.070]收←◆adc_values[0]=0, [1]=336 [08:44:28.062]收←◆adc_values[0]=2, [1]=336 [08:44:29.067]收←◆adc_values[0]=1, [1]=336 [08:44:30.077]收←◆adc_values[0]=203, [1]=466 [08:44:31.081]收←◆adc_values[0]=249, [1]=497 [08:44:32.081]收←◆adc_values[0]=223, [1]=489 [08:44:33.090]收←◆adc_values[0]=253, [1]=486 [08:44:34.089]收←◆adc_values[0]=227, [1]=490 [08:44:35.094]收←◆adc_values[0]=239, [1]=498 [08:44:36.104]收←◆adc_values[0]=238, [1]=498 [08:44:37.105]收←◆adc_values[0]=242, [1]=478 [08:44:38.095]收←◆adc_values[0]=248, [1]=486 [08:44:39.113]收←◆adc_values[0]=232, [1]=489 [08:44:40.116]收←◆adc_values[0]=239, [1]=486 |
低功耗stm32L051如何使用看门狗?
Snow Rider: The Endless Winter Rush That’s Easy to Start
Ragdoll Archers: Physics-Based Bow & Arrow Chaos
STM32F103RCT6断电以后,ADC会漏电
ADC 读取的中断模式不对
STM32H7A3 怎样配置MDMA的硬件触发MDMA_REQUEST_DMA1_Stream0_TC将数据再次转运
STM32H7A3RGT6 ADC 8位采样速度只能达到3.5MSPS达不到数据手册上的7MSPS ?
STM32F103C8T6是否支持TIM3的PWM边沿触发AD采集
stm32H503CBT6 ADC在某次上电后波动变大了一些。
STM32H743 的ADC线性校准问题
微信公众号
手机版
不是很了解你说的跟着变。
你现在把转换通道接上已知信号,测得信号正确、靠谱就是对的。悬空的不算。
如果悬空,采样电容上的电荷都不能经过正常充放电过程,所以结果不可信。