天天看點

STM32CubeMX+ADC+藍牙序列槽實驗1.0前言2.0示例詳解3.0操作流程4.0 總結

導航: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推挽輸出。

STM32CubeMX+ADC+藍牙序列槽實驗1.0前言2.0示例詳解3.0操作流程4.0 總結

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常用傳感器和執行器,進而實作對外部世界進行感覺,充分認識這個有機與無機的環境,科學地合理地進行創作和發揮效益,然後為人類社會發展貢獻一點微薄之力。
  • 工程檔案
  • 參考材料