ADC配置和DMA启动
最后,配置ADC并启动DMA传输:
c
#include "stm32f4xx_hal.h"
// Declare the ADC handle
ADC_HandleTypeDef hadc;
// ADC initialization
void ADC_Init(void) {
__HAL_RCC_ADC1_CLK_ENABLE(); // Enable the clock for ADC1
hadc.Instance = ADC1;
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc.Init.Resolution = ADC_RESOLUTION_12B;
hadc.Init.ScanConvMode = DISABLE;
hadc.Init.ContinuousConvMode = ENABLE;
hadc.Init.DiscontinuousConvMode = DISABLE;
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc.Init.NbrOfConversion = 1;
hadc.Init.DMAContinuousRequests = ENABLE;
hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
if (HAL_ADC_Init(&hadc) != HAL_OK) {
// Initialization Error
Error_Handler();
}
// Configure ADC regular channel
ADC_ChannelConfTypeDef sConfig;
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) {
// Channel Configuration Error
Error_Handler();
}
}
// Start DMA transfer
void Start_DMA_Transfer(void) {
// Define the address of external SRAM
uint32_t ext_sram_address = (uint32_t)0x60000000; // Example address, adjust based on your configuration
if (HAL_ADC_Start_DMA(&hadc, (uint32_t *)ext_sram_address, BUFFER_SIZE) != HAL_OK) {
// Start Error
Error_Handler();
}
}
int main(void) {
HAL_Init(); // Initialize the HAL Library
SystemClock_Config(); // Configure the system clock
FSMC_Init(); // Initialize FSMC for external SRAM
DMA_Init(); // Initialize DMA
ADC_Init(); // Initialize ADC
Start_DMA_Transfer(); // Start DMA transfer
while (1) {
// Main loop
}
}
|