首先,使用 HAL 库的ADC_Init函数配置 ADC 的基本参数,包括分辨率、采样时间、转换模式等。 可以选择不同的 ADC 通道,根据需要选择单通道或多通道模式。对于多通道模式,需要配置扫描模式。 配置DMA 模块: 配置DMA 通道,使用DMA_Init函数设置 DMA 的源地址(ADC 的数据寄存器)和目的地址(内存缓冲区)。 配置DMA 的...
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_adc1)...
在STM32 HAL库中,可以通过配置ADC_HandleTypeDef结构体来设置ADC为多通道模式。你需要指定要扫描的通道数以及这些通道的序列。 3. 配置STM32的DMA以支持ADC的多通道数据传输 为了支持ADC的多通道数据传输,需要配置DMA_HandleTypeDef结构体。你需要设置DMA的传输方向(从ADC到内存)、传输大小(通常为半字或字)、优先级等...
3.ADC的配置,实际按自己的需求来 相关dma配置,这里模式选择循环,这就不需要每次调用相关函数去获取adc的值了。因为是5个通道,所以Memory选择递增。另外这里的DMA的中断是默认开启的,实际在程序上是不用的,生成工程后,得注释掉DMA中断使能,不然会一直进中断(这种现象我也只在f103和f334中见到)。 4.时钟树的配置,...
1、校准ADC,开启DMA接收,在main函数初始化部分调用 #defineADC_MAX_NUM 5#defineBTN_BUFF_LEN 100staticuint16_t dma_adc_data[BTN_BUFF_LEN * ADC_MAX_NUM]; 1/**2* @brief 校准adc,开启DMA接收3*4*/5voidAdc_Init(void)6{7//校准8HAL_ADCEx_Calibration_Start(&hadc1);9HAL_ADC_Start_DMA(&...
}//ADC转换完成自动调用函数voidHAL_ADC_ConvCpltCallback(ADC_HandleTypeDef*hadc){//获取值并存储ADC_Values[adc_value_flg++]=HAL_ADC_GetValue(hadc);if(adc_value_flg==ADC_MAX_NUM) { adc_value_flg=0;//清零下标} } 六、ADC DMA方式多通道采集 ...
基于STM32CubeMX的HAL库的DMA的多路ADC采集 1.选芯片打开cubemx,选择单片机型号(实际可随自己的板子型号来)。 2.配置好相关RCC的HSE为外部晶振和sys的Debug模式 其中sys的debug模式,我这里用的是DAP下载器,所以如下图,如果是其他下载器,建议自行百度如何选择。
一般我们设置PCLK2=84MHz,经过ADC预分频器能分频到最大的时钟只能是21M,采样周期设置为3个周期,算出最短的转换时间为0.7142us,这个才是最常用的。 ADC_InitTypeDef结构体定义在stm32f4xx_hal_adc.h文件内,具体定义如下: typedef struct { uint32_t ClockPrescaler; /*ADC时钟分频系数 */ ...
DMA_HandleTypeDef *DMA_Handle; /* DMA处理程序指针 */ HAL_LockTypeDef Lock; /*ADC锁定对象 */ __IO uint32_t State; /*ADC通信状态*/ __IO uint32_t ErrorCode; /*ADC错误码 */ } ADC_HandleTypeDef; 1. 2. 3. 4. 5. 6. 7.
六、程序完善 1、完善main函数 添加变量 初始化ADC 启动ADC校正和HAL_ADC_Start——DMA启动 ...