STM32開發入門(一)——流水燈

stm32性能強大,但其開發難度又顯著高於Arduino等單片機。本文將通過流水燈程序,介紹stm32開發的一些基本操作。

基本介紹

常見stm的編程方式有三種:寄存器式、標準庫式、HAL庫式。其中HAL庫上手較爲簡單。本文將以HAL庫式爲基礎介紹。

軟件

  • Keil 5(單片機集成開發環境)
  • STM32CubeMX(自動配置stm32編程的相關文件)
  • FLYMCU(stm32串口下載軟件,也可用ST-LINK代替)
  • XCOM(串口監視器)

準備

在這裏插入圖片描述

打開圖中的“File”,新建一個stm32項目(“New Project")。
在這裏插入圖片描述
在輸入框中搜索自己的stm32芯片,雙擊創建新項目。
在這裏插入圖片描述
選擇左邊菜單欄中“System Core”的SYS、GPIO和RCC。
在這裏插入圖片描述
在SYS中選擇Debug方式爲“Serial Wire”。
在這裏插入圖片描述
在RCC中選擇“Crystal/Ceramic Resonator”







在這裏插入圖片描述

點擊右邊芯片的引腳,可以看到每一個引腳的用法。此處我們選擇引腳的“GPIO_Output”(通用型輸出)模式。

在這裏插入圖片描述
依次選擇每個引腳的模式,在該實驗中,我們共需要10個模式爲“GPIO_Output”的引腳。設置好後引腳會有綠色標記。

在這裏插入圖片描述
打開“GPIO”,設置引腳的輸出模式爲“Output Push Pull”(推輓輸出模式)。

在這裏插入圖片描述
打開“Project Manager”,編輯文件名稱,保存路徑。注意設置IDE爲MDK-ARM,版本爲V5。點擊“GENERATE CODE"。
在這裏插入圖片描述
打開keil,找到“main.c"文件。我們可以找到核心代碼區:


int main(void)
{
   
   
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
  //int tmp=0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
   
   
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
  }
  /* USER CODE END 3 */
}

在while循環之前,我們通常填入需要初始化的變量、條件;在while循環中,我們填入需要循環執行的代碼。特別需要注意的是,代碼需要寫在/* *** BEGIN*//* *** END*/之間。否則在代碼刷新或重置後,不在此範圍內的新編代碼會丟失。

代碼

在覈心代碼取輸入以下代碼:

int main(void)
{
   
   
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
   
   
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);/*置PB12管腳爲高電平,以下同*/
		HAL_Delay(100);/*延時函數,單位爲ms*/
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);/*置PB12管腳爲低電平,以下同*/
		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_8,GPIO_PIN_SET);/*注意此處的管腳爲D區的,應爲GPIOD*/
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_8,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_10,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_10,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_11,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_11,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);
		
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_SET);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_RESET);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

按照程序中的定義方式進行接線。同時點擊左上角的“Build”,編譯程序。
在這裏插入圖片描述
若程序編譯正確,使用FLYMCU打開程序的hex文件(在MDK-ARM中),點擊“開始編程”,將程序上傳於開發板。
在這裏插入圖片描述
上傳成功後,點擊開發板上的“RESET”按鈕,即可觀察到流水燈工作。



實驗效果

STM32-流水燈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章