STM32 ADC多通道DMA采集数据(HAL库)
一、CubeMX配置
外部时钟配置:
烧录配置:
选择ADC1,开始需要的通道:
(1)Data Alignment—>Right alignment 此项选择右对齐,保持不变。
(2)Scan Conversion Mode—>Enable 此项选择扫描模式使能,代表对4路ADC输入分别扫描,如果不使能,其将会只读取一个输入的值。
(3)Continuous Conversion Mode —>Enable 此项选择连续扫描模式,表示将连续不断的对ADC的值进行转换。如果此项不使能,将会只采集一次就会停止,直到下一次使能才继续进行一次ADC转换。
(4)Discontinuous Conversion Mode—>Disable 此项和第三项是正好相反,如果选择使能,会对ADC通道进行分组。
(5)Number of Conversion---->2 此处有多少路输入就选择多少,而且只有在此处选择数字之后下面才会出来4个不同的通道。
(6)在出现的2个Rank中,分别配置每一路,例如Rank1配置为Channel 0,采样时间3Cycles; Rank2配置为Channel 1,采样时间同样为3Cycles。此处的注意事项是,如果你不对每一路进行检查配置,可能出现好多Rank同时采集一个Channel,从而导致AD的采集数据的错误。
公式为: Tconv = 采样时间 + 12.5 个周期
ADC的DMA配置:
二、代码部分
代码部分十分简单
我们只需要先声明一个存放数据的数组:
uint16_t ADValue[2];
然后再在main函数的初始化里面加入
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADValue,2);
整体代码如下
int main(void) { /* USER CODE BEGIN 1 */ uint16_t ADValue[2]; /* 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_ADC1_Init(); /* USER CODE BEGIN 2 */ HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADValue,2); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
上述内容参考自
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。