STM32MP1當作單片機系列 一操作LED燈

0 - 相關文章

  01-PanGu STM32MP1資料下載
  02-STM32MP1 開發環境搭建
  03-PanGu 開發板固件更新-SD卡
  03-PanGu 開發板固件更新-USB
  04-STM32MP1 uboot編譯
  05-STM32MP1 linux編譯
  06-STM32MP1 yocto qt構建
  07-PanGu 開發板SD卡鏡像製作
  08-STM32MP1當單片機系列 一操作LED燈

TM32MP1 M4核的使用。

一、開發環境

  PanGu STM32開發板有多種啓動模式,如需只使用M4核,可以進入Engineering Mode。PanGu開發板進入Engineering Mode的方式是將撥碼開關設置爲如下模式:

Boot Mode bit1 bit2 bit 3
Engineering Mode OFF OFF ON

  IDE推薦使用STM32CubeIDE1.1.0 (目前最新版本STM32CubeIDE1.3.0)版本,調試工具推薦使用STlink。

  目前僅進行M4核開發,可以直接在Windows上進行。

二、硬件分析

LED
PI11
PH6
  從上圖可以看出,LED1使用PI11引腳,LED2連接至PH6引腳,兩個燈都是引腳低電平點亮,高電平熄滅。LED1在板上絲印爲D16,LED2在板上絲印爲D17,都是藍燈。

三、建立工程

3.1 新建STM32 Project

在這裏插入圖片描述
  STM32CubeIDE可能會有如下提示,直接忽略即可。
在這裏插入圖片描述

3.2 選擇芯片型號 STM32MP157AAA

在這裏插入圖片描述

3.3 設置工程名

在這裏插入圖片描述
  請確認使用的MP1庫版本爲1.1.0(目前最新爲1.2.0) 。
在這裏插入圖片描述
  工程設置完成後可以打開如下界面:在這裏插入圖片描述
  CA7文件夾是給A7核使用的,在工程模式可以不用理會。Drivers文件夾是ST提供的HAL_Drivers,用戶無需修改。我們只需重點關注01LED.ioc文件和01LED_CM4子工程即可。

四、設置ioc

4.1 設置IO

  雙擊01LED.ioc文件,進入ioc設置界面。將LED1和LED2引腳設置爲輸出。LED1使用PI11引腳,LED2使用PH6。
在這裏插入圖片描述
在這裏插入圖片描述
  設置好引腳爲輸出後,在GPIO部分進行進一步設置:
在這裏插入圖片描述
  如圖,引腳被設置爲Output Push Pull(推輓輸出)、Pull-up(上拉輸出)。因爲驅動LED燈不用特別高速,所以將IO口Maximum output speed(最大輸出速度)設置爲Low。並給兩個引腳分別建立標籤爲LED1和LED2。

4.2 工程輸出設置

  在Code Generator處選擇爲每個外設生成單獨的C和H文件,這樣設置方便閱讀代碼。
在這裏插入圖片描述

4.3 完成設置

  以上設置完成後,Ctrl+S保存,會提示是否需要生成代碼,選擇Yes即可自動生成代碼。系統會自動生成System Clock代碼。

4.4 編譯

在這裏插入圖片描述

4.5 設置Debug

調試前,請檢查開發版是否已經上電,即LED燈 D15 被正常點亮
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
  至此,已經通過STlink進入仿真模式,可以正常仿真,不過目前開發板LED燈並沒有變化,因爲我們還沒有對GPIO進行操作。

  如沒有正常進入調試模式,嘗試執行如下操作
    1-找到Project菜單,運行clean,清理工程。
    2-重新build編譯工程。
    3-然後嘗試重新進入Debug模式。

五、操作GPIO

  應該是STM32CubeIDE還存在bug,所以工程中並沒有對我們設置的GPIO進行初始化,僅僅在main.h中進行了如下定義:

/* Private defines -----------------------------------------------------------*/
#define LED1_Pin GPIO_PIN_11
#define LED1_GPIO_Port GPIOI
#define LED2_Pin GPIO_PIN_6
#define LED2_GPIO_Port GPIOH
/* USER CODE BEGIN Private defines */

  下面我們需要對GPIO進行操作。

5.1 新建BSP文件夾

  新建BSP文件夾,並在文件夾中新建bsp_led.c和bsp_led.h文件。
在這裏插入圖片描述
在這裏插入圖片描述

5.2 代碼內容

bsp_led.c

/*
 * bsp_led.h
 *
 *  Created on: Jan 4, 2020
 *      Author: www.whxinluyao.com
 */

#include "bsp_led.h"

void bsp_led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOI_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);

   /*Configure GPIO pin : PtPin */
   GPIO_InitStruct.Pin = LED1_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);

	GPIO_InitStruct.Pin = LED2_Pin;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
}


void bsp_led_toggle(void)
{
	HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
	HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
}

bsp_led.h

#ifndef BSP_LED_H_
#define BSP_LED_H_

#include "main.h"

void bsp_led_init(void);
void bsp_led_toggle(void);

#endif /* BSP_LED_H_ */

main.c中加入如下內容

/* USER CODE BEGIN Includes */
#include "bsp_led.h"
/* USER CODE END Includes */

//......
//中間未修改部分省略
//***********************************

/* Infinite loop */
/* USER CODE BEGIN WHILE */
bsp_led_init();
while (1)
{
 bsp_led_toggle();
 HAL_Delay(500);	//延時500ms
  /* USER CODE END WHILE */

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

5.3 設置BSP至Includes

在這裏插入圖片描述
  設置BSP至Includes,否則會提示找不到bsp_led.h文件。

5.4 運行

  重新編譯,然後進入仿真模式,兩個LED燈會以1Hz頻率閃爍。

歡迎加羣

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