一、实验目的:
基于stm32f103zet6编写程序,通过 ADC1 的通道 1(PA1)来读取外部电压值(3.3V),并使读取的电压值在串口调试助手上显示
二、实验主要代码:
该代码由正点原子stm32f103战舰v3ADC实验例程修改而来,由于原代码只能采集电压并在LCD上显示,不能在电脑屏幕上看到,故在这里只给出修改后的main.c,在 main.c 里面编写如下代码:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "tsensor.h"
#include "adc.h"
int main(void)
{
u16 times=0;
u16 adcx;
float temp;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LED_Init();
LCD_Init();
ADC_Config_Init();
KEY_Init();
POINT_COLOR=RED;
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"ADC TEST");
LCD_ShowString(60,90,200,16,16,"xhsbq");
LCD_ShowString(30,110,200,16,16,"2023/8/15");
POINT_COLOR=BLUE;
LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");
LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);
LCD_ShowxNum(156,130,adcx,4,16,0);
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);
if(USART_RX_STA&0x8000)
{
}
else
{
times++;
if(times%5000==0)
{
printf("\r\n战舰STM32开发板\r\n");
printf("xhsbq\r\n\r\n");
}
if(times%30==0)printf("\r\n%f\r\n",adcx+temp/1000);
delay_ms(10);
}
}
}
三、实验结果:
在这里仅展示串口调试助手看到的值