天天看點

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

STM32 CubeMX學習:1. 點亮LED

系列文章目錄

  1. 前期的準備
  2. 點亮 LED
  3. 閃爍 LED
  4. 定時器閃爍LED
  5. PWM控制LED亮度
  6. 常見的PWM裝置
  7. 按鍵的外部中斷
  8. ADC模數轉換
  9. 序列槽收發
  10. 序列槽列印遙控器資料
  11. 未完待續…

文章目錄

  • STM32 CubeMX學習:1. 點亮LED
    • 1.1基礎學習:LED燈基礎知識
    • 1.2 程式學習
      • 1.2.1 CubeMX 配置 GPIO 的基本操作
      • 1.2.2 HAL_GPIO_WritePin函數的講解
      • 1.1.3 程式流程
  • 總結

1.1基礎學習:LED燈基礎知識

1、LED即發光二極管,當LED内有電流通過時會發光,在安全電流範圍内,電流越大,亮度越亮

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

1.2 程式學習

1.2.1 CubeMX 配置 GPIO 的基本操作

1、我這裡使用正點原子的探索者開發闆,在這塊學習闆上,與LED相連的引腳為PF9和PF10

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

是以我們需要在之後配置相應的引腳,這裡我對LED燈的點亮原理作簡要的說明啦

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

如上圖所示我們可以看到,發光二極管的陰極與單片機引腳相連,發光二極管的陽極通過電阻與3.3伏的VCC相連。當單片機的引腳給高電平時,近似于發光二極管兩端沒有電勢差,沒有電流通過,是以發光二極管沒有點亮,相反的如果單片機的引腳給低電平,發光二極管兩端有電勢差,有電流通過,發光二極管可以點亮。

2、下面我們可以在上一篇建立工程的基礎上,在cubeMX中配置GPIO為輸出模式,在cubeMX找到對應引腳,配置成GPIO_Output模式。

首先,搜尋PF9和PF10(這裡以PF9為例進行說明,PF10同理)

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

選擇引腳模式為輸出模式(Output)

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

3、在cubeMX中修改對應引腳的名字。

(1)在左側找到System core->GPIO;

(2)找到對應的GPIO,例如PF9;

(3)在下方的配置單中user label填寫命名,填好後會在晶片縮略圖中更新。

如下圖所示

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

4、生成代碼:點選GENERATE CODE按鍵。

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

1.2.2 HAL_GPIO_WritePin函數的講解

1、在HAL庫中我們可以找到一個操作GPIO電平的函數:HAL_GPIO_WritePin函數

(1)該函數的作用在于使對應的引腳輸出高電平或者低電平。

(2)該函數傳回值為void,即沒有傳回值

(3)該函數有3個入口參數,可根據自己的需求進行設定

(a)GPIOx——		對應GPIO總線,其中x可以是A…I。例如PF9,則輸入GPIOF
	(b)GPIO_Pin——	對應引腳數。可以是0-15。例如PF9,則輸入GPIO_PIN_9
	(c)PinState——	GPIO_PIN_RESET:輸出低電平;GPIO_PIN_SET:輸出高電平
           

這裡我們先嘗試将兩個LED同時點亮,

這裡先給大家補充一些關于單片機的小知識:

對于單片機來說,LED燈等可以被稱為是單片機的外設,對于外設的使用,大緻可以按照以下幾個步驟進行。

首先,HAL狀态的初始化,可能包括flash指令緩存、flash資料緩存、flash預讀取緩存、中斷分組優先級、内部時鐘HSI、MCU特定封裝的初始化。

然後,進行系統時鐘的初始化。

接着,對于GPIO初始化。

最後,操作相應的外設完成所需功能。

1.1.3 程式流程

程式經過HAL_Init初始化, GPIO初始化,進入主循環,在主循環中将2個LED引腳均輸出低電平,進而點亮LED燈。主循環代碼如下:

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		//set GPIO output low level 
		//設定GPIO 輸出低電平 
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET); 
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET); 
		

    /* USER CODE END WHILE */

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

完整的main函數代碼如下所示

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)
  {
		//set GPIO output low level 
		//設定GPIO 輸出低電平 
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET); 
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET); 
		

    /* USER CODE END WHILE */

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

然後在keil軟體中編譯代碼并把代碼下載下傳到單片機中,

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

其中1為編譯按鈕,可以對整個keil工程進行編譯

2為下載下傳按鈕,可以把代碼下載下傳到單片機之中,但是在下載下傳之前,除了要安裝相關的驅動(根據自己的情況分别配置),還需要進行一些設定

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

首先點選1處的“魔術棒”,然後點選2處進入debug設定,在3處選擇自己的調試器,常見的調試器有ST-Link和J-Link等,大家可以自行查詢一下這些調試器的差別,這裡不做過多的介紹。在4處,我們可以看到一串位址,說明調試器已經成功連接配接到電腦。

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

然後點選1處的“Flash Download”,按照2處進行勾選,不過注意,其中“Reset and Run”代表一旦代碼下載下傳到單片機中立刻開始運作程式,這裡要根據自己的需要靈活的進行設定。這樣我們就完成關于下載下傳的一些設定。

最後我們可以看到工程運作效果如圖所示

STM32 CubeMX學習:1. 點亮LEDSTM32 CubeMX學習:1. 點亮LED總結

可以看到“TFTLCD”下的兩個LED燈已經被點亮,達到了我們預期的效果

代碼我已經放到了我的GitHub倉庫,如有需要可以下載下傳使用:

CubeMX學習

總結

GPIO輸出操作是STM32中最基礎的操作啦,通過高低電平的控制完成類似開關的控制,而高電平則對應了計算機中的數字1,而低電平對應了計算機中的數字0,高低電平的不斷變化,對應計算機内部的數字變化,STM32便是這樣輸出信号給外部世界的啦。 從此媽媽再也不用擔心我的點燈啦,大家給自己點個贊,學習單片機還要再接再厲哦!

繼續閱讀