一、 实验简介(实验目的)
利用STM32F1 的ADC1 通道1 来采样外部电压值,并在TFTLCD 模块上显示出来。
二、 实验设备(实验设备及用到的模块)
1.电脑:window10及以上
2.开发板名称:正点原子战舰V3 STM32F103开发板
3.模块名称:ADC模块,LCD模块,LED模块,KEY模块
4.数据通信方式及设备
三、 实验原理(软硬件全面阐述)
1.芯片该部分工作原理
(1).KEY部分对应芯片引脚
在战舰 STM32 开发板上的按键 KEY0 连接在引脚PE4 上、KEY1 连接在引脚PE3 上、KEY2 连接在引脚PE2 上、WK_UP 连接在引脚PA0 上。
(2).LED部分对应芯片引脚
在战舰 STM32 开发板上的LED0连接的引脚是PB5,LED1连接的引脚是PE5。
2.模块工作原理、电路图
(1).KEY的STM32连接原理图
如上图电路图所示,KEY0、KEY1 和 KEY2 都接地都是是低电平有效,而 WK_UP接的是VCC3.3所以是高电平有效,并且外部都没有上下拉电阻,所以需要在 STM32 内部设置上下拉。
(2).LED的STM32连接原理图
通过位带操作 PB5 输出高低电平从而控制 LED0。
3. 用到的库函数阐述
ADC初始化函数:
void ADC_Init(ADC_TypeDef* ADCx,ADC_InitTypeDef* ADC_InitStruct);
void ADC_Delnit(ADC_TypeDef* ADCx)
ADC使能函数 :
void ADC_Cmd(ADC_TypeDef*ADCx, FunctionalState NewState);
void ADC_ITConfig(ADC_TypeDef*ADCx,uint16_t ADC_IT, FunctionalState NewState);
ADC使能软件转换函数:
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx,FunctionalState NewState);
ADC规则通道配置函数:
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
ADC获取转换结果函数
uint16_t ADC_GetConversionValue(ADC_TypeDef*ADCx);
其它重要函数:
void ADC_ResetCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_StartCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC GetCalibrationStatus(ADC TypeDef* ADCx);
四、 程序分析(有开头介绍,模块设计)
1.概述
在主函数中,在TFTLCD 模块上显示一些提示信息后,将每隔250ms 读取一次ADC 通道0 的值,并显示读到的ADC 值(数字量),以及其转换成模拟量后的电压值。同时控制 LED0 闪烁,以提示程序正在运行。
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);
LCD_ShowxNum(156,130,adcx,4,16,0);∥显示ADC的值
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);
LEDO=!LEDO;
delay_ms(250);
}
2. 各个模块阐述
(1).LCD模块:在开发板屏幕上显示信息
(2).LED模块:小灯初始化并使能时钟
(3).KEY模块:按键初始化,设置响应优先级
(4).ADC模块:使用ADC1来执行AD转换操作
3.程序分析总结
① 开启 PA 口时钟和 ADC1 时钟,设置 PA1 为模拟输入。
② 复位 ADC1,同时设置 ADC1 分频因子。
③ 初始化 ADC1 参数,设置 ADC1 的工作模式以及规则序列的相关信息。
④ 使能 ADC 并校准。
⑤ 读取 ADC 值。