ADC是十二位的
获取的方法有两种
第一种是查询方式
main.c
#include "stdio.h"
#define LED_ON() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET)
#define LED_OFF() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET)
uint16_t ADC_Value=0, ADC_Voat=0; //一个是采样值 一个是电压值
uint8_t str_buff[64];//函数接收缓冲区
void UR1_Send()
{
sprintf((char *)str_buff,"采样值:%d; 电压值:%d.%d%dv\r\n",ADC_Value,ADC_Voat/100,(ADC_Voat%100)/10,ADC_Voat%10);
HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
}
/* 查询方式
void ADC0_Get_Value()
{
HAL_ADC_Start(&hadc1);
LED_ON();
if(HAL_ADC_PollForConversion(&hadc1,10)==HAL_OK)
{
ADC_Value=HAL_ADC_GetValue(&hadc1);
ADC_Voat=ADC_Value* 330/4096;//3.3V=3300mv 这样得出的结果就是毫伏 2的十二次方就是4096 因为ADC是十二位的数
//采集之后要发送到上位机
}
UR1_Send();//这些是发送
LED_OFF();
//ADC停止运行
HAL_ADC_Stop(&hadc1);
}
*/
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)
{
ADC0_Get_Value();
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
第二种是中断方式
/* USER CODE BEGIN 0 */
#include "stdio.h"
#define LED_ON() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET)
#define LED_OFF() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET)
uint16_t ADC_Value=0, ADC_Voat=0; //一个是采样值 一个是电压值
uint8_t str_buff[64];//函数接收缓冲区
void UR1_Send()
{
sprintf((char *)str_buff,"采样值:%d; 电压值:%d.%d%dv\r\n",ADC_Value,ADC_Voat/100,(ADC_Voat%100)/10,ADC_Voat%10);
HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
}
//中断回调方式
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance==ADC1)
{
ADC_Value=HAL_ADC_GetValue(&hadc1);
ADC_Voat=ADC_Value* 330/4096;//3.3V=3300mv 这样得出的结果就是毫伏 2的十二次方就是4096 因为ADC是十二位的数
//采集之后要发送到上位机
UR1_Send();//这些是发送
LED_OFF();
}
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
LED_ON();
HAL_ADC_Start_IT(&hadc1);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */