-
1 知识介绍
-
2 PPT
-
3 学习视频
-
4 拓展内容
-
5 国家脊梁
任务要求
设计一个可对电池电压进行监测的应用程序,要求每隔1秒钟对电池电压进行采集,采集到的电压值通过串行通信的方式发送至上位机显示。
案例分析
通过对“电池电量监测电路原理图”

知识储备
ADC(Analog-to-Digital Converter,模数转换器)是一种可将连续变化的模拟信号转换为离散的数字信号的器件,其可将温度、压力、声音或者图像等转换成更易存储、处理和发射的数字信号。
STM32F103VET6微控制器有3个ADC,可工作在独立、双重或三重模式下,以适应多种不同的应用需求。每个ADC都具有18个复用通道,可测量16个外部信号源、2个内部信号源。
ADC功能分析——输入电压范围(

ADC功能分析——输入通道
单个ADC的输入通道多达18个,其中包括16个外部通道,这16个外部通道分别连接着不同的GPIO口,如

ADC功能分析——转换顺序
如

ADC功能分析——输入时钟与采样周期
如
ADC功能分析——触发方式
如

ADC功能分析——数据寄存器
ADC 转换完毕后,结果数据存放在相应的数据寄存器中。ADC 的数据寄存器有两种:规则数据寄存器 ADC_DR 和注入数据寄存器 ADC_JDRx。上述两种数据寄存器用于独立转换模式的结果存放,双重和三重转换模式的结果则存放于通用规则数据寄存器 ADC_CDR 中。
ADC功能分析——中断控制
如

注:转换结束后,除可通过产生中断方式处理转换结果外,还可产生DMA请求,把转换好的数据直接转存至内存中。(

任务实施
(一)建立STM32CubeMX工程并生成初始C代码
建立STM32CubeMX工程主要包括建立工程存放的文件夹,选择MCU型号,配置调试端口,配置MCU时钟树、ADC外设工作参数和USART外设工作参数。其中在配置USART外设参数时,要注意中标号参数的设置:

③:USART1的模式配置为“Asynchronous”。
④:点击“Parameter Settings”标签。
⑤:配置USART1的“Baud Rate”为115200 Bits/s。
⑥:配置“Data Direction”为“Receive and Transmit”。
⑦:已配置好功能的引脚显示。
参数配置完毕,将工程保存到合适的位置,最后点击“GENERATE CODE(生成代码)”按钮,便可生成电池电量监测系统的初始C代码工程。
(二)完善代码
在main.c文件中定义变量,用于存放ADC转换结果。
/* USER CODE BEGIN PV */
uint16_t adc_value = 0;
//定义ADC转换值存放
float voltage = 0.0;
char voltString[50] = {0};//电压值结果显示
/* USER CODE END PV */
在 while(1)主循环中输入电压采集与显示的代码。
while (1)
{
HAL_ADC_Start(&hadc1);
HAL-ADC_PollForConversion(&hadc1,100);
adc_value = HAL_ADC_GetValue(&hadc1);
voltage = (float)adc_value / 4096 * 3.3;
sprintf(voltString,"采集到的电压值为:%.2f V",voltage);
printf("%s\r\n",voltstring);
HAL_Delay(1000);
}
在USART.c中添加fputc()函数相关的代码。
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);
return ch;
}
在USART.h中添加代码:#include <stdio.h>
(三)硬件环境搭建与实验现象观察
1.将 PC 机与“M3 主控模块”通过 USART1 相连,打开串口助手;
2.将“M3 主控模块”开发板的“PA1”引脚通过杜邦线与实验平台上的电源“3.3V”接线端相连(
3.将“M3 主控模块”开发板的“PA1”引脚通过杜邦线与实验平台上的接地端“GND”相连,即可在串口助手中查看采集到的电压值为 0V。














