创建工程
开启及设置ADC
开启ADC中断
设置时钟树
保存工程
MDK编写程序
因为要使用printf函数,所以先重写fputs函数
#include "stdio.h" //添加头文件
/* USER CODE BEGIN 1 */
int fputc (int ch,FILE* f){
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1,temp,1,2);
return HAL_OK;
}
/* USER CODE END 1 */
非常重要的一步 开启MircoLIB
添加头文件和变量
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
uint16_t ADCValue=0;
float Voltage=0;
/* USER CODE END PTD */
修改main函数
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADCValue,1);//启动DMA
printf("ADCValue:%d,ADCValue:%f\r\n",ADCValue,Voltage);//打印转换数据和换算电压
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
Voltage=ADCValue*3.3/4096;//换算电压2^12=4096
printf("ADCValue:%d,ADCValue:%f\r\n",ADCValue,Voltage);//打印转换数据和换算电压
HAL_Delay(2000);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
重写中断函数
/* USER CODE BEGIN 4 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //adc调用
{
if(hadc->Instance==ADC1)
{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
}
}
/* USER CODE END 4 */
编译烧写即可实现ADC输出串口电压