#include "stm32f4xx_hal.h"
ADC_HandleTypeDef hadc;
void ADC_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
// ADC时钟使能
__HAL_RCC_ADC1_CLK_ENABLE();
// 初始化ADC
hadc.Instance = ADC1;
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc.Init.Resolution = ADC_RESOLUTION_12B;
hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc.Init.ContinuousConvMode = ENABLE;
hadc.Init.DiscontinuousConvMode = DISABLE;
hadc.Init.NbrOfDiscConversion = 0;
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc.Init.DMAContinuousRequests = DISABLE;
hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
if (HAL_ADC_Init(&hadc) != HAL_OK)
{
Error_Handler();
}
// 配置ADC通道
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
```
在以上代码中,我们调用了HAL_ADC_Init函数进行ADC的初始化配置,以及配置了ADC通道和采样时间。
3. 数据采集
在初始化配置完成后,我们可以进行ADC的数据采集。以下是一个简单的示例代码,演示了如何进行单次数据采集,并通过串口输出显示采集的数据。
```c
void ADC_StartConversion(void)
{
// 启动ADC转换
if (HAL_ADC_Start(&hadc) != HAL_OK)
{
Error_Handler();
}
// 等待转换完成
if (HAL_ADC_PollForConversion(&hadc, 100) != HAL_OK)
{
Error_Handler();
}
// 读取转换结果
uint32_t adcValue = HAL_ADC_GetValue(&hadc);
// 输出到串口
char buf[20];
sprintf(buf, "ADC Value: %lu\r\n", adcValue);
HAL_UART_Transmit(&huart, (uint8_t*)buf, strlen(buf), 100);
}
```
在以上代码中,我们调用HAL_ADC_Start函数启动ADC转换,并等待转换完成。然后通过HAL_ADC_GetValue函数读取转换结果,最终通过UART输出到串口。
|