天天看點

STM32上實作點燈(固件庫方式)前言一、硬體設計二、軟體設計三、實際驗證總結

參考:stm32上實作點燈

作者:SKY丶丿平才

釋出時間: 2021-03-20 16:51:06

網址:https://blog.csdn.net/weixin_48264057/article/details/115028724

目錄

  • 前言
  • 一、硬體設計
  • 二、軟體設計
    • 1.建立工程
    • 2.代碼編寫
  • 三、實際驗證
    • 1.燒寫程式
    • 2.實際功能驗證
  • 總結

前言

其實和寄存器點燈是一樣的,隻不過庫函數将寄存器都封裝在結構體裡面了,我們隻需調用這些結構體就好了。

本篇博文将要介紹的是控制ALIENTEK 探索者STM32F4 開發闆上的兩個 LED 實作一個類似跑馬燈的效果,該實驗的關鍵在于如何控制 STM32F4 的 IO 口輸出。了解了 STM32F4 的 IO 口如何輸出的,就可以實作跑馬燈了。通過這一章的學習,你将初步掌握 STM32F4 基本 IO 口的使用,而這是邁向 STM32F4 的第一步。

一、硬體設計

本次實驗用到的硬體隻有 LED(DS0 和 DS1)。其電路在 ALIENTEK 探索者 STM32F4 開發闆上預設是已經連接配接好了的。DS0 接 PF9,DS1 接 PF10。是以在硬體上不需要動任何東西。其連接配接原理圖如下圖:

STM32上實作點燈(固件庫方式)前言一、硬體設計二、軟體設計三、實際驗證總結

二、軟體設計

下面展示的是代碼的編寫,具體結構體裡面的函數尋找過程,參照這篇博文:STM32F103五分鐘入門系列(一)跑馬燈(庫函數+寄存器)+加程式設計模闆+GPIO總結,在庫函數點燈部分有專門講解。

1.建立工程

在keil5中建立好如下圖所示的工程

STM32上實作點燈(固件庫方式)前言一、硬體設計二、軟體設計三、實際驗證總結

2.代碼編寫

我們需要在三個檔案中編寫代碼,其他添加進去的檔案都是固件庫自帶得,這裡我們使用調庫的方式來實作點燈。

首先是在led.c檔案中,這是我們的點燈檔案,主要是定義一個初始化函數

led.c

#include "led.h" 

void LED_Init(void){    
	
  GPIO_InitTypeDef  GPIO_InitStructure;//結構體定義要在時鐘之前   通過“.”通路結構圖内部成員變量

  //1、使能APB2的時鐘GPIC(視訊課程中)
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF時鐘

  //2、結構體配置
  //GPIOF9,F10初始化設定  視訊課程中就配置了前三個結構體成員變量 沒指定上拉
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1對應IO口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通輸出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz  點燈的話頻率随便選一個就好了
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
	
  GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO
	
  GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIO電平拉高函數  GPIOF9,F10設定高,燈滅

}
           

随後是led.h檔案,這裡要對定義的函數做聲明以及定義好兩個io口

led.h

#ifndef __LED_H
#define __LED_H  //這兩步驟  條件編譯

#include "sys.h"
//include "stm32f10x.h"  視訊課程中用的闆子包含這個頭檔案
	


//LED端口定義 這兩個分别是GPIO電平拉低拉高函數,視訊課程中沒有這一步。
#define GPIO_ResetBits(GPIOF,GPIO_Pin_9)	// DS0,調庫的方式定義LED端口
#define GPOO_SetBits(GPIOF,GPIO_Pin_10)	// DS1,調庫的方式定義LED端口

void LED_Init(void);//初始化  先聲明,然後在.C檔案中實作	 				    
#endif
           

最後再編寫main.c檔案

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"



int main(void){ 
 
	delay_init(168);		  //初始化延時函數
	
	LED_Init();		        //初始化LED端口
	
  /**下面是通過直接操作庫函數的方式實作IO控制**/	
	
	while(1){
		
	GPIO_ResetBits(GPIOF,GPIO_Pin_9);  //LED0對應引腳GPIOF.9拉低,亮  等同LED0=0;
		
	GPIO_SetBits(GPIOF,GPIO_Pin_10);   //LED1對應引腳GPIOF.10拉高,滅 等同LED1=1;
		
	delay_ms(500);  		   //延時300ms
		
	GPIO_SetBits(GPIOF,GPIO_Pin_9);	   //LED0對應引腳GPIOF.0拉高,滅  等同LED0=1;
		
	GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1對應引腳GPIOF.10拉低,亮 等同LED1=0;
		
	delay_ms(500);                     //延時300ms
		
	}
	
}
           

三、實際驗證

1.燒寫程式

在FlyMcu軟體中利用序列槽将編譯好的程式燒寫進去

STM32上實作點燈(固件庫方式)前言一、硬體設計二、軟體設計三、實際驗證總結

2.實際功能驗證

STM32上實作點燈(固件庫方式)前言一、硬體設計二、軟體設計三、實際驗證總結

燒寫進闆子的程式開始運作,實作了跑馬燈功能

總結

這個跑馬燈的實驗主要是介紹了對于32IO口的使用,雖然内容上比較簡單,也是通過調庫的方式來實作的,但還是能給我們很多有用得啟發。

繼續閱讀