亚洲综合图片区自拍_思思91精品国产综合在线观看_一区二区三区欧美_欧美黑人又粗又大_亚洲人成精品久久久久桥本

使用STM32單片機(jī)點(diǎn)亮LED

2023-06-21 11:11:09 來源:學(xué)嵌入式的釘子君

有一人,登場于金庸先生的《神雕俠侶》,以大理段氏“一陽指”自成一派,武學(xué)修為登峰造極,“天下五絕”之一,號(hào)稱“南帝”,他就是“一燈大師”。如今,武林中逐漸被遺忘的“一燈大師”,卻活躍在另一個(gè)行業(yè)——嵌入式開發(fā)中。

傳說,每一個(gè)成功的MCU(俗稱單片機(jī))開發(fā)組中,都有一名“一燈大師”,他精通所有開發(fā)板的點(diǎn)燈方法,對(duì)于企業(yè)引入的新開發(fā)板,總是勤學(xué)苦練,從點(diǎn)燈開始,快速掌握新開發(fā)板的編程要點(diǎn),帶領(lǐng)團(tuán)隊(duì)走向勝利。

成為“一燈大師”,離不開持續(xù)的修行,離不開對(duì)一招一式的勤學(xué)苦練。本文將講解如何通過編程來控制STM32點(diǎn)亮一個(gè)LED。


(資料圖片)

學(xué)習(xí)環(huán)境:

1.軟件:Keil5

2.硬件:STM32開發(fā)板(筆者使用信盈達(dá)公司的M4開發(fā)板,芯片型號(hào)為STM32F407ZGT6)

適合人群:

在校初入電子坑的小白,不懂STM32編程的硬件開發(fā)人員和想了解庫函數(shù)編程的人。

文末將提供示例代碼和文檔的資料分享。

Part 1

點(diǎn)燈的思路講解

本文中的點(diǎn)燈,是指用STM32單片機(jī)點(diǎn)亮與之連接的LED的操作。首先我們先了解一下LED這種器件。

LED的本質(zhì)是一種發(fā)光二極管,所以點(diǎn)燈的核心就是:如何用STM32控制一個(gè)二極管電路。

市場上各類LED(直插式/貼片式以及各種顏色的LED,都有點(diǎn)區(qū)別)在導(dǎo)通時(shí)的壓降一般在1.8~3.3V。所以點(diǎn)燈需要先查看電路圖,確定驅(qū)動(dòng)LED的方法。

下圖是筆者使用到STM32開發(fā)板的LED部分的原理圖。

本文接下來將以點(diǎn)亮LED1為例進(jìn)行講解。通過上圖,我們可以看到或總結(jié)出以下信息:

1.LED1與單片機(jī)的PF6引腳連接。

2.由于LED1是一個(gè)二極管,點(diǎn)亮LED1需要PF6引腳上的電壓值為低電平(滿足發(fā)光二極管的導(dǎo)通壓降需求即可)。

3.由于需要實(shí)現(xiàn)控制LED1點(diǎn)亮和LED1熄滅,需要將PF6引腳配置為輸出模式,且輸出電平可控。

故在編程步驟中主要需要完成兩個(gè)部分:LED初始化函數(shù)(主要是配置引腳PF6為輸出模式)和 點(diǎn)亮/熄滅LED1的接口(控制引腳PF6輸出低/高電平)。

其中,LED1初始化的主要步驟為:

激活外設(shè)GPIOF(PF6是外設(shè)GPIOF的IO引腳之一)。將PF6配置為輸出模式將PF6的輸出類型配置為推挽輸出配置PF6輸出速度為低速(其他速度也可以)配置PF6的輸出數(shù)據(jù)(點(diǎn)亮/熄滅LED1)

Part 2

用庫函數(shù)編程方法點(diǎn)燈

本方法是通過調(diào)用STM32官方提供的庫函數(shù),完成對(duì)引腳有關(guān)的一系列操作。庫函數(shù)編程方法簡單易用,適合新人學(xué)習(xí)。

Step1,打開STM32F4xx官方庫函數(shù)文檔(stm32f4xx_dsp_stdperiph_lib_um.chm),找到以下函數(shù)。

void  RCC_AHB1PeriphClockCmd (uint32_t RCC_AHB1Periph, FunctionalState NewState)   此函數(shù)用于激活A(yù)HB1總線上的外設(shè)(GPIOF在此總線上)void  GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)   此函數(shù)將基于參數(shù)初始化GPIOxvoid  GPIO_SetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)   此函數(shù)用于控制指定IO引腳輸出高電平void  GPIO_ResetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)   此函數(shù)用于控制指定IO引腳輸出低電平

Step2,通過在庫函數(shù)幫助文檔中點(diǎn)擊函數(shù)名,查看函數(shù)的定義,明確參數(shù)填寫方法。

比如,點(diǎn)擊GPIO_Init() 函數(shù),查看其詳細(xì)信息

通過閱讀圖中文字,可知:第一個(gè)參數(shù)填寫為GPIOx,其中x需要用字母A~K替代(取決于引腳),由于本例使用PF6引腳,故填寫為GPIOF;第二個(gè)參數(shù)需要先定義一個(gè)GPIO_InitTypeDef類型的結(jié)構(gòu)體變量,對(duì)其成員賦值后,再將變量的地址傳入。

繼續(xù)查看GPIO_InitTypeDef類型的定義。

GPIO_InitTypeDef結(jié)構(gòu)體類型中的這5個(gè)成員分別表示對(duì)以下內(nèi)容的配置:IO引腳的模式、輸出類型、引腳序號(hào)、內(nèi)置電阻和 輸出速度。

其他幾個(gè)函數(shù)也可以參考此方法進(jìn)行查看,從而確定函數(shù)的調(diào)用形式。

Step3,結(jié)合前文“點(diǎn)燈的思路講解”寫出代碼

//1. 激活外設(shè)GPIOFRCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOF, ENABLE);
//2. 將PF6配置為輸出模式//3. 將PF6的輸出類型配置為推挽輸出//4. 配置PF6輸出速度為低速GPIO_InitTypeDef   gpio_InitStruct ;gpio_InitStruct.GPIO_Mode   =  GPIO_Mode_OUT ;gpio_InitStruct.GPIO_OType   = GPIO_OType_PP ;gpio_InitStruct.GPIO_Pin     = GPIO_Pin_6 ;gpio_InitStruct.GPIO_PuPd   = GPIO_PuPd_NOPULL ;gpio_InitStruct.GPIO_Speed   =  GPIO_Low_Speed ;GPIO_Init (GPIOF , &gpio_InitStruct);
//5. 點(diǎn)亮/熄滅LED1#define LED1_ON    GPIO_ResetBits (GPIOF, GPIO_Pin_6)#define LED1_OFF   GPIO_SetBits (GPIOF, GPIO_Pin_6)

Step4,整理代碼,將他們添加到用Keil5軟件建立的工程中??蓞⒖家韵滦问?。(細(xì)節(jié)詳見文末提供的資料分享)

Step5,編程工程,下載到開發(fā)板,觀察現(xiàn)象。正?,F(xiàn)象是LED1以固定的頻率交替進(jìn)行亮和滅動(dòng)作。

留給讀者的思考,本文提供的開發(fā)板的LED部分原理圖中還有另外3個(gè)LED,嘗試編寫代碼,驅(qū)動(dòng)他們。有條件的朋友建議購買開發(fā)板直接實(shí)物驗(yàn)證,將理論與實(shí)踐結(jié)合,早日成為“一燈大師”!

標(biāo)簽:

上一篇:Linux系統(tǒng)中的抽象級(jí)別和層數(shù)|環(huán)球?qū)崟r(shí)
下一篇:最后一頁