stm32核心板可以点亮灯吗_STM32库函数点亮LED
很多碼農寫出的第一個程序是"Hello World!",因為這個程序簡單容易上手,能給你自信心,讓你更加堅定學習編程的信念;單片機也是如此,相信很多單片機老師教給你的第一個程序就是點亮一個LED,今天我們就來分享如何使用STM32F103點亮第一個LED燈。
注:本程序使用單片機為STM32F103VET6
一 單片機的硬件電路連接
由原理圖我們可以看到,D2(LED)連接在名稱為PE1的IO口,且PE1輸出高電平,D2點亮,PE1輸出低電平,D2熄滅。
二 程序書寫順序
1 使能PE1所在的時鐘總線
2 初始化LED相關函數
3 設置PE1相應的IO口輸出函數
可能有同學就要問了,為什么STM32每次寫程序前,都要使能相應時鐘函數呢?而同為單片機的51單片機就不需要使能,每個IO口可以直接拿過來使用?
這是因為隨著電子集成度的提高,功耗和發熱問題日漸嚴重,芯片廠家也非常頭疼這個問題,于是就針對STM32這類的單片機開發出了使能功能。
簡單的理解:把單片機理解為很多水管的集合,我們要使用A水管,就先把A水龍頭打開,就可以在獲取A水管的水了。如果,全部的水管都打開,就會造成水資源的浪費。單片機也是這個道理,用哪個就使能哪個功能的IO,只有這樣,才會使芯片功耗達到最低。
三 程序代碼詳解
1 使能GPIO E
因為PE1在GPIO E的端口上,所以要使能GPIO E,在工程樹中找到rcc.c文件,打開它找到RCC_APB2PeriphClockCmd函數,并在STM32F1庫文件使用手冊中找到這個函數,理解其用法與參數數據。
所寫函數:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE)
找到參數1并且查看其取值范圍,可見GPIOE在其取值范圍內,打開GPIOE的開關,所以將它設置為ENABLE,
2 初始化GPIO_InitT
GPIO_InitTypeDef函數功能為初始化,繼續查看函數庫文件使用說明
在這里我們要構造一個函數體
GPIO_InitTypeDef GPIO_InitStructure;將GPIO_InitTypeDef重新定義命名為GPIO_InitStructure;由使用說明可見,GPIO_Init函數要定義說明3個值,GPIO_PIN(IO口引腳標號) GPIOSpeed(GPIO輸出速度)GPIOMode(GPIO輸出模式)。在這里我們要將其設置為推挽輸出,因為我們要點亮LED,所以需要大電流,而其輸出特性剛好滿足我們的要求,所以設置為推挽輸出。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //將其設置好以后,繼續給GPIO_Init的兩個參數賦值,參數1為哪一個GPIO外設,我們將其寫為GPIOE,參數2為GPIO_InitStructure,所以我們的函數這樣子寫:
GPIO_Init(GPIOE, &GPIO_InitStructure);將設置寫入GPIO_InitStructure中,用&將其寫入。
根據硬件原理圖,我們要將其寫高電平才會點亮LED,所以要將GPIOE PIN1口寫高電平,在這里我們用GPIO_SetBits函數,SetBit函數為置1函數,RESetBit函數為置0函數。
這個函數可以將相應IO口拉高,讓其為高電平,根據參數相關設置,我們寫入GPIOE PIN1函數即可。
最后再主函數中調用相關函數即可點亮LED
源碼分享:
#include "LED.h"//引用LED頭文件#include "stm32f10x.h"void LED_Init(void)//LED初始化函數{ GPIO_InitTypeDef GPIO_InitStructure;//構造結構體 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能GPIOE時鐘 //指定GPIO成員變量 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOE,&GPIO_InitStructure); GPIO_ResetBits(GPIOE,GPIO_Pin_1);//默認輸出低電平,默認不點亮}#include "stm32f10x.h"#include "delay.h"#include "LED.h"int main(void){ LED_Init();delay_init();while(1){ GPIO_SetBits(GPIOE,GPIO_Pin_1); delay_ms(500); GPIO_ResetBits(GPIOE,GPIO_Pin_1); delay_ms(500); }}總結
要想點亮一個LED,其本質操作為設置其相應的IO口,只有學會了設置和操作IO口,大多數問題都能迎刃而解,設置IO口的關鍵就是設置哪一個IO口,輸出還是輸入?以什么模式輸出和輸入?輸出和輸入的速度又是多少?最后別忘記了,操作IO口,首先要使能相應的時鐘。
總結
以上是生活随笔為你收集整理的stm32核心板可以点亮灯吗_STM32库函数点亮LED的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于stm32f405控制三相无刷电机例
- 下一篇: db2查询表结构语句_SQL语句大全,赶