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燈
目錄
一、開發環境
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上進行。
二、硬件分析
從上圖可以看出,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