回覆列表
-
1 # 玩轉嵌入式
-
2 # 科技電小二
對於微控制器程式設計而言,點亮LED是微控制器程式設計的入門操作。
對於STM32,本人習慣使用暫存器操作,所以本文將以KEIL4.12作為開發環境,以暫存器操作試驗為程式設計思路講解。
先建立一個工程名為LED_Project,在keil的右側的工程視窗,選中專案,滑鼠右手單擊,出現如下圖所示
選擇Device項,選擇對應型號,
在工程中新增對應的暫存器版本的支援檔案,因只需要LED相關的暫存器操作,則只需要RCC,GPIO的韌體庫檔案,
建立main.c檔案,幷包含 #include <stm32f10x_lib.h>標頭檔案
首先我們假設當PA4引腳為高電平時,LED燈亮,為低電平時,LED等滅,
設定LED的宏定義,如下:
#define LED_ON GPIOA->ODR|=(1<<4);
#define LED_OFF GPIOA->ODR&=~(1<<4);
定義一個LED的GPIO初始化函式,
如上圖所示,
RCC->APB2ENR|=1<<2; 是PA埠的時鐘使能
我們使用PA4作為LED輸出控制埠,配置PA4作為推輓輸
設定led燈1秒鐘亮滅一次,俗稱呼吸燈函式如下:
設定LED燈亮滅時間漸變,函式如下圖所示
如上圖所示,函式中使用for迴圈,完成一個led閃爍頻率從最快10ms間隔閃爍一次,漸漸增大時間,最後到1S閃爍一次,再逐漸減小間隔時間,閃爍頻率加快。
LED閃爍的實現效果還可以進行設計,大家可以自由的進行發揮程式碼的魅力和能力
以上是問題的粗略解答,難免會有遺漏
用微控制器來點亮一個LED燈,是非常基本的操作,是初學者第一個、而且是必經歷的小專案。在用STM32微控制器實現點燈的時候,需要將埠設定為輸出,並且要輸出高電平或者低電平。下面詳細講解。
下圖是微控制器驅動LED的電路原理圖,採用灌電流的方式,當微控制器輸出低電平時,LED被點亮;當微控制器輸出高電平時,LED熄滅。
如果要讓LED發光,微控制器就要輸出低電平。STM32微控制器暫存器的配置不同於51微控制器,需要開啟埠的時鐘、需要設定埠的方向、輸出型別等。配置程式如下圖所示。
上圖中使用STM32的PA4來控制LED,首先將GPIOA的時鐘開啟,再將埠配置為推輓輸出,上圖中速度設定為了50MHz。這裡採用的庫函式。
將埠配置後以後,就可以控制埠的輸出了,如果埠輸出1,即高電平則LED處於熄滅狀態;如果埠輸出低電平,則LED處於點亮狀態;使用庫函式寫的程式如下。
#define LED1_ON GPIO_ResetBits(GPIOA,GPIO_Pin_4)//PA4 = 0
#define LED1_OFF GPIO_SetBits(GPIOA,GPIO_Pin_4) //PA4 = 1
透過宏定義將LED1_ON定義為點燈;將LED1_OFF定義為關燈。在主函式中呼叫該宏定義即可實現LED的點亮和熄滅。
如果要實現閃爍功能,可以透過延時來實現,也可以透過定時器來實現。