外设资源实验9-ADC实验
实验目的:
掌握STM32L071 ADC的基本功能和编程方法。
实验现象:
OLED显示屏显示当前电压转接值。Pot&LED模块插到传感器位置,转动电位器RP2,屏幕显示变化的电压值。
文章目录
实验代码
#include "main_task.h"
extern ADC_HandleTypeDef hadc;
extern DMA_HandleTypeDef hdma_adc;
extern UART_HandleTypeDef huart1;
extern DMA_HandleTypeDef hdma_usart1_rx;
/**
* @brief 板级任务初始化
* @param None
* @retval None
*/
void Task_BrdInit(void)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
OLED_PowerControl(ENABLE);
HAL_Delay(200);
OLED_Init();
OLED_Clear();
OLED_ShowString(0, 0, (unsigned char *)" ", 16);
OLED_ShowString(0, 2, (unsigned char *)" ", 16);
OLED_ShowString(0, 0, (unsigned char *)"DMA Test ", 16);
}
/**
* @brief 板级任务执行
* @param None
* @retval None
*/
uint32_t DAC_Value[20] = {0};
void Task_Main(void)
{
float ADC_Value = 0;
char lcdLine_2nd_line[16];
if ( (uwTick % 10) == 0)
{
uwTick = 0;
ADC_Value = (DAC_Value[0] + DAC_Value[1] + DAC_Value[2] + DAC_Value[3]
+ DAC_Value[4] + DAC_Value[5] + DAC_Value[6] + DAC_Value[7]
+ DAC_Value[8] + DAC_Value[9] + DAC_Value[10] + DAC_Value[11]
) / 10 * (3.3 / 4095);
if (ADC_Value >= 1.5)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
}
sprintf(lcdLine_2nd_line, "%.2f", ADC_Value);
OLED_ShowString(0, 2, (unsigned char *)lcdLine_2nd_line, 16);
HAL_ADC_Start_DMA(&hadc, DAC_Value, 10);
}
}