任務(wù)名稱:電池電量監(jiān)測應(yīng)用開發(fā)
任務(wù)要求:本任務(wù)要求設(shè)計一個可對電池電壓進(jìn)行監(jiān)測的應(yīng)用程序石洗,電路圖如圖所示幢泼。
供電電池的電壓為 3.3V,通過“PIN”端接入讲衫。電池電壓經(jīng)過分壓后缕棵,通
過“VM_ADC”與微控制器的 PA1 引腳相連,作為 ADC 采集輸入涉兽。
要求每隔 1 秒鐘對電池電壓進(jìn)行采集招驴,采集到的電壓值通過串行通信的方式發(fā)送至上位機(jī)顯示。
任務(wù)實施:
1. 建立 STM32CubeMX 工程并生成初始 C 代碼
(1)建立工程存放的文件夾
在“STM32_WorkSpace”文件夾下新建文件夾“task5_Battery_ADC”用于保存本任務(wù)工程枷畏。
(2)新建 STM32CubeMX 工程
參考 相關(guān)內(nèi)容别厘。
(3)選擇 MCU 型號
選擇型號為 STM32F103VE 的微控制器。
(4)配置調(diào)試端口
將“PA13”引腳配置為 SWDIO 功能拥诡,“PA14”引腳配置為 SWCLK功能触趴;
(5)配置 MCU 時鐘樹
將 HCLK 配置為 72MHz,PCLK1 配置為 36MHz渴肉,PCLK2 配置為 72MHz冗懦。
(6)配置 ADC 外設(shè)的工作參數(shù)
標(biāo)號①:使用 PA1 引腳作為 ADC1 的輸入端口,展開“Pinout & Configuration”標(biāo)簽頁左側(cè)的“Analog”選項仇祭,選擇“ADC1”選項披蕉,勾選“IN1”復(fù)選框
標(biāo)號②:將 ADC 工作模式配置為“Independent mode(獨立模式)”:
標(biāo)號③處的配置說明如下:
- “Data Alignment(數(shù)據(jù)對齊)”配置為“Right alignment(右對齊)”;
- “Scan Conversion Mode(掃描轉(zhuǎn)換模式)”配置為“Disabled(禁用)”乌奇;
- “Continuous Conversion Mode(連續(xù)轉(zhuǎn)換模式)”配置為“Disabled(禁
用)”没讲; - “Discontinuous Conversion Mode(非連續(xù)轉(zhuǎn)換模式)”配置為“Disabled(禁
用)”。
標(biāo)號④處的配置說明如下: - “Enable Regular Conversions(使能規(guī)則轉(zhuǎn)換)”配置為“Enabled(啟用)”礁苗;
- “Number Of Conversion(轉(zhuǎn)換次數(shù))”配置為“1”;
- “External Trigger Conversion Source(外部觸發(fā)源)”配置為“Regular
Conversion launched by software(軟件觸發(fā)方式)”爬凑。 - “Channel(通道號)”配置為“Channel 1(通道 1)”。
-
“Sampling Time(采樣時間)”配置為“71.5 Cycles(71.5 個周期)”寂屏。
切換到“Clock Configuration(時鐘配置)”標(biāo)簽,進(jìn)行 ADC 時鐘配置娜搂,如圖3 所示迁霎。
將“ADC Prescaler(ADC 分頻系數(shù))”配置為“6”(圖3 的標(biāo)號①處),則 ADC 的輸入時鐘為 12MHz(圖 3 的標(biāo)號②處)百宇。
(7)配置 USART 外設(shè)的工作參數(shù)
展開“Pinout & Configuration”標(biāo)簽頁左側(cè)的“Connectivity”選項(圖 4的標(biāo)號①處)考廉,選擇“USART1”選項(圖4的標(biāo)號②處)。
圖 4中的其他配置過程說明如下:
標(biāo)號③:將 USART1 的模式配置為“Asynchronous(異步)”携御。
標(biāo)號④:點擊“Parameter Settings(參數(shù)配置)”標(biāo)簽昌粤。
標(biāo)號⑤:配置 USART1 的“Baud Rate(波特率)”為 115200 Bits/s既绕。
標(biāo)號⑥:配置“Data Direction(數(shù)據(jù)方向)”為“Receive and Transmit(接收與發(fā)送)”。
標(biāo)號⑦:已配置好功能的引腳顯示涮坐。
(8)保存 STM32CubeMX 工程
點擊“File(文件)”菜單凄贩,選擇“Save Project(保存工程)”選項。然后定位到文件夾“D:\STM32_WorkSpace\task5_Battery_ADC”袱讹,點擊“確定”保存 STM32CubeMX 工程疲扎。
(9)生成初始 C 代碼工程
從容進(jìn)行“C 代碼生成”與“工程保存”的配置,最后點擊“GENERATECODE(生成代碼)”按鈕捷雕,生成電池電量監(jiān)測系統(tǒng)的初始 C 代碼工程椒丧;
2. 完善代碼
(1)定義 ADC 轉(zhuǎn)換結(jié)果存放變量
在“main.c”中輸入以下代碼:
uint16_t light_value =0;
float light =0.0;
char lightString[50]={0};
(2)編寫電壓采集與顯示代碼
在 while(1)主循環(huán)中輸入以下代碼
while (1)
{
/* USER CODE END WHILE */
{
/* USER CODE END WHILE */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
light_value =HAL_ADC_GetValue(&hadc1);
light =(float)light_value/4096*3.3;
sprintf(lightString,"采集到的光照值為:%.2f V",light);
printf("%s\r\n",lightString);
HAL_Delay(10000);
/* USER CODE BEGIN 3 */
}
(3) USART.c 中添加代碼
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);
return ch;
}
(4) USART.h 中添加代碼:
#include <stdio.h>
#include "main.h"