導航:stm32教程傳送門🧭🏔🌋🛤🏞🏜
STM32CubeMX+ADC+藍牙序列槽實驗
- 1.0前言
- 2.0示例詳解
-
- 2.1硬軟體選擇
- 2.2實驗原理
- 3.0操作流程
-
- 3.1配置STM32 Cube MX工程
- 3.3keil v5開發
- 4.0 總結
1.0前言
接觸STM32單片機逐漸深入,通常從簡單按鍵和LED控制着手,下面我們将*憑借STM32CubeMX和keil5開發學習stm32黑色核心闆,通過ADC采集和藍牙序列槽列印輸出實驗!*
2.0示例詳解
2.1硬軟體選擇
硬體平台 | 軟體平台 | |
---|---|---|
黑色核心闆 | 1塊 | keil v5 |
JDY-30 藍牙 | 1塊 | stm32cubemx |
光敏電阻 | 1顆 | |
面包闆 | 1塊 | |
220Ω電阻 | 1顆 | |
杜邦線 | 若幹 |
keil v5安裝教程:https://www.bilibili.com/video/BV1q4411d7RX?p=1
stm32cubemx:https://www.bilibili.com/video/BV1q4411d7RX?p=2
2.2實驗原理
使用stm32cubemx 工具自動産生的配置工程,使用KEIL5編譯代碼。
光敏電阻接PA0,JDY-30 藍牙RX_TX分别接PA9_PA10,闆載PB12推挽輸出。

3.0操作流程
3.1配置STM32 Cube MX工程
- 輕按兩下桌面STM32CubeMX工具,然後在CubeMX中菜單 File中點New Project ;
- 在新彈出的界面中的搜尋框中輸入 “stm32f103c8” ,并輕按兩下右側欄中列出的STM32F103C8選用該晶片;
- 配置系統伏仿真調試接口, 在System Core 目錄下單擊SYS選項,将其中的Debug選項選為Serial Wire, 此時PA13 PA14引腳會被占用;
- 配置系統時鐘源,在System Core 目錄下單擊RCC選項,将其中的High Speed Clock( HSE )選項選為Crystal/ceramic resona…, 此時PD0 PD1引腳會被占用;
- 配置PB12為GPIO_Output,作為ADC采集訓示;
- 配置Analog選ADC1,模式選IN0,NVIC seting 選Enable ,是以GPIO PA0 随之配置好;
- 在Connectivity中選擇USART1,模式采用Asynchronous異步通信,波特率是9600,我們隻需要發送資訊,采用通常的阻塞式即可,其他預設;
-
STM32CubeMX+ADC+藍牙序列槽實驗1.0前言2.0示例詳解3.0操作流程4.0 總結 - 配置代碼生成,工程界面切換到Project Manager 界面,在界面左側單擊Project 項,命名ADC01_uart,IDE采用MDK-ARMV5,在界面左側單擊Code Generator項,将其設定成如下圖所示( 隻拷貝所需檔案到工程,為每個接口生成獨立的初始化頭檔案和源檔案,将所有未使用的引腳設為模拟輸入)。
- 生成代碼,單擊工程界面中”GENERATE TOOL” 開始生成代碼,代碼生成後彈出是否打開工程對話框,單擊“Open Project”打開建立的工程,即配置工程完成接下來是keil v5開發和調試。
3.3keil v5開發
- 修改部分代碼,在代碼工程(MDK/keil)中的 main.c 中 man函數中主要包含兩個函數UR1_Send_Info()//序列槽1發送指令函數和ADC0_Get_Value()//ADC0采用輪詢獲得采樣資料函數
#include "main.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"
void SystemClock_Config(void);
#include "stdio.h"//标準輸入輸出頭檔案
#define LED1_ON HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET)
#define LED1_OFF HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET)//宏定義闆載LED開與滅
uint16_t ADC_Value,ADC_Volt;//ADC_Value和ADC_Volt分别是ADC采集和電壓計算
uint8_t str_buff[64];//發送緩沖區
void UR1_Send_Info()//序列槽1發送指令
{
sprintf((char*)str_buff,"ADC_Value: %d,ADC_Volt: %d.%d%d",ADC_Value,ADC_Volt/100,(ADC_Volt%100)/10,ADC_Volt%10);
HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),1000);
}
void ADC0_Get_Value()//ADC0采用輪詢獲得采樣資料
{
HAL_ADC_Start(&hadc1);//ADC1開始采集
LED1_ON;
if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)//判斷ADC采集是否完成
{
ADC_Value=HAL_ADC_GetValue(&hadc1);//讀取ADC的值
ADC_Volt=ADC_Value*330/4096;//ADC電壓轉換
}
UR1_Send_Info();
LED1_OFF;
HAL_ADC_Stop(&hadc1);//停止ADC采樣
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
while (1)
{
ADC0_Get_Value();
HAL_Delay(500);
}
}
- 編譯該工程,确認代碼書寫正确并且符合控制要求;
- 燒錄代碼,完成下載下傳操作;
- 到此為止,所有準備工作已經配置完成,進入調試環節,打開手機藍牙助手,連接配接JDY-30 藍牙,就可以實時監測光敏電阻的波動,調節外圍光線,調試出合理的觸發條件,最常見就是路燈的智能控制系統
4.0 總結
- 本篇憑借STM32CubeMX和keil5開發學習stm32黑色核心闆,通過ADC采集和藍牙序列槽列印輸出實驗!。主要難度在控制原理以及項目移植開發,值得新手一試!!!😃😃😃
- 在以後的博文中我們将學會用stm32常用傳感器和執行器,進而實作對外部世界進行感覺,充分認識這個有機與無機的環境,科學地合理地進行創作和發揮效益,然後為人類社會發展貢獻一點微薄之力。
- 工程檔案
- 參考材料