1+X傳感網(wǎng)備考中級備考實例解析:ADC采集串口發(fā)送

任務(wù)名稱:電池電量監(jiān)測應(yīng)用開發(fā)
任務(wù)要求:本任務(wù)要求設(shè)計一個可對電池電壓進行監(jiān)測的應(yīng)用程序,電路圖如圖所示。

供電電池的電壓為 3.3V,通過“PIN”端接入。電池電壓經(jīng)過分壓后,通
過“VM_ADC”與微控制器的 PA1 引腳相連,作為 ADC 采集輸入。
要求每隔 1 秒鐘對電池電壓進行采集,采集到的電壓值通過串行通信的方式發(fā)送至上位機顯示。


圖1:電池電量監(jiān)測電路原理圖

任務(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ù)
標號①:使用 PA1 引腳作為 ADC1 的輸入端口,展開“Pinout & Configuration”標簽頁左側(cè)的“Analog”選項,選擇“ADC1”選項,勾選“IN1”復(fù)選框
標號②:將 ADC 工作模式配置為“Independent mode(獨立模式)”:
標號③處的配置說明如下:

  • “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(禁
    用)”。
    標號④處的配置說明如下
  • “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 個周期)”。


    圖2: ADC 參數(shù)配置

切換到“Clock Configuration(時鐘配置)”標簽,進行 ADC 時鐘配置,如圖3 所示。
將“ADC Prescaler(ADC 分頻系數(shù))”配置為“6”(圖3 的標號①處),則 ADC 的輸入時鐘為 12MHz(圖 3 的標號②處)。

圖3:ADC 時鐘配置

(7)配置 USART 外設(shè)的工作參數(shù)
展開“Pinout & Configuration”標簽頁左側(cè)的“Connectivity”選項(圖 4的標號①處),選擇“USART1”選項(圖4的標號②處)。
圖 4中的其他配置過程說明如下
標號③:將 USART1 的模式配置為“Asynchronous(異步)”。
標號④:點擊“Parameter Settings(參數(shù)配置)”標簽。
標號⑤:配置 USART1 的“Baud Rate(波特率)”為 115200 Bits/s。
標號⑥:配置“Data Direction(數(shù)據(jù)方向)”為“Receive and Transmit(接收與發(fā)送)”。
標號⑦:已配置好功能的引腳顯示。
圖4: USART1 的參數(shù)配置

(8)保存 STM32CubeMX 工程
點擊“File(文件)”菜單,選擇“Save Project(保存工程)”選項。然后定位到文件夾“D:\STM32_WorkSpace\task5_Battery_ADC”,點擊“確定”保存 STM32CubeMX 工程。
(9)生成初始 C 代碼工程
從容進行“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"

實驗結(jié)果:

實驗結(jié)果串口助手顯示電壓采集
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容