目录
前言
我们的蓝桥杯板子有两个adc,每个adc有18个通道,16个外部通道,2个内部通道
我们一般使用这两个引脚进行adc的转换
1.stm32cubemx设置
设置PB15和PB12引脚转换
设置系统时钟
然后在生成代码即可
2.代码实现
常用函数
//开启adc转换
HAL_ADC_Start(&hadc1);
//得到转换adc的值,不是最终值
HAL_ADC_GetValue(&hadc1);
代码实现
uint16_t getADC_R37(void)
{
uint16_t adc = 0;
HAL_ADC_Start(&hadc2);
HAL_ADC_PollForConversion(&hadc2,2);
adc = HAL_ADC_GetValue(&hadc2);
HAL_ADC_Stop(&hadc2);
return adc;
}
int main(void)
{
/* USER CODE BEGIN 1 */
char str[20];
uint8_t num=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_USART1_UART_Init();
MX_ADC1_Init();
MX_ADC2_Init();
MX_DAC1_Init();
/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1, (uint8_t *)RX, 1);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//
LCD_Init();
LCD_Clear(White);
LCD_SetBackColor(White);
LCD_SetTextColor(Black);
LCD_DisplayStringLine(Line0, (uint8_t* ) " ADC ");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
sprintf((char *)str, " R37:%.2fV", getADC_R37() * 3.3 / 4096);
LCD_DisplayStringLine(Line6, (uint8_t *)str);
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
有些特殊的问题,我们为了方便对比adc变化的值,需要我们保留小数点后面两位我们可以这样运算。
sprintf((char *)str, " R37:%.2fV", (uint16_t)(get_adc*100)/100.0/3.3*100*100/100.0);