(三)【STM32】HAL库ADC传输(单通道,1KHZ)+注入组
划分到规则通道组的通道称为规则通道,大多数情况下,如果只是一般模拟输入信号的转换,那么将该模拟输入信号的通道设置为规则通道即可。最多可以有16个规则通道,当每个规则通道转换完成后,将转换结果保存到同1个规则通道数据寄存器,同时产生ADC转换结束事件,可以产生对应的中断和DMA请求。
·
一.规则通道组&注入通道组
1.规则通道组
划分到规则通道组的通道称为规则通道,大多数情况下,如果只是一般模拟输入信号的转换,那么将该模拟输入信号的通道设置为规则通道即可。
最多可以有16个规则通道,当每个规则通道转换完成后,将转换结果保存到同1个规则通道数据寄存器,同时产生ADC转换结束事件,可以产生对应的中断和DMA请求。
2.注入通道组
划分到注入通道组的通道称为规则通道,如果需要转换的模拟输入信号的优先级较其他模拟输入信号高,那么可将该模拟输入信号的通道归入通道组中。
注入通道组最多可以有4个注入通道。
注入通道组转换的启动有两种方式:
1.触发注入
与中断处理类似。
2.自动注入
注入通道组将在规则通道组后被自动转换。每次启动规则通道组转换后,也会自动转换注入通道组。
二.CubeMX配置







三.代码
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */
/* USER CODE BEGIN 2 */
HAL_ADCEx_InjectedStart_IT(&hadc1);//以中断模式启动 ADC1 的注入组转换
HAL_TIM_Base_Start(&htim2); //启动定时器
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc) {
static uint32_t adc_value = 0;
static float voltage = 0.0f;
if (hadc->Instance == ADC1) {
adc_value = HAL_ADCEx_InjectedGetValue(hadc, ADC_INJECTED_RANK_1);
voltage = (float)adc_value * 3.3f / 4095.0f;
char buff[50];
sprintf(buff,"%.2f\r\n", voltage);
HAL_UART_Transmit_IT(&huart1, (uint8_t*)buff, strlen(buff));
}
}
/* USER CODE END 4 */
四.结果

更多推荐



所有评论(0)