1基本配置请查看 ADC_1
1stm32cubeMX配置
与ADC-1 区别在于配置了NVIC
2代码设置
回调函数
-
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
- 这个回调函数在ADC正常转换完成后被调用。当你启动一个ADC转换(使用
HAL_ADC_Start_IT()
或类似函数),并且转换完成时,这个函数会被执行。在这里,你可以读取ADC的转换结果并进行处理。
- 这个回调函数在ADC正常转换完成后被调用。当你启动一个ADC转换(使用
-
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
- 如果ADC被配置为连续转换模式或者多重转换模式,这个回调函数会在半转换完成后被调用。例如,如果你有两次转换在队列中,每次转换完成时,这个函数会被执行一次。
-
void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc)
-
//结合了结构中的看门狗
- 当ADC的转换结果超出了预设的阈值窗口时,这个回调函数会被调用。这个功能通常用于监控ADC的转换结果,以确保它们在一个特定的范围内。
-
-
void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
- 如果在ADC操作过程中发生错误,这个回调函数会被调用。错误可能包括溢出、校准失败等。在这个回调函数中,你可以添加错误处理的代码,例如重置ADC或者报告错误状态。
回调函数源码
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
uint8_t zi_fu[] = "电压值为:";
char ADC_char[6]; //存储检测值
if (hadc1.Instance==ADC1) {
float ADC_zhi = ((float)(HAL_ADC_GetValue(hadc) / 4095.0) * 3.3); //获取值
HAL_UART_Transmit(&huart1, zi_fu, sizeof(zi_fu) - 1, 20); // 输出文字
sprintf(ADC_char, "%.1f", ADC_zhi); //值转换
HAL_UART_Transmit(&huart1, (uint8_t*)ADC_char, sizeof(ADC_char), 20); // 输出检测值
}
}
主函数源码
int main(void)
{
/* USER CODE BEGIN 1 */
/* 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_ADC1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_ADC_Start_IT(&hadc1); //开启ADC 注意函数
HAL_Delay(300);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}