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

基于STM32單片機通過GPIO輸出點亮LED燈|全球微速訊

2023-06-02 11:18:16 來源:點燈大師

一. GPIO初始化


【資料圖】

STM32單片機51單片機不同,51單片機只需與引腳相連后就可以使用引腳發(fā)出高低電平信號控制外部器件,而STM32單片機需要先對引腳進行配置(初始化),如果使用引腳用作I2C、SPI、USART等通訊接口時,就是所謂的復(fù)用功能時,就需要再配置外設(shè)的工作參數(shù)。

1.使能GPIO端口時鐘;

RCC_APBxPeriphClockCmd(RCC_APBxPeriph_GPIOy , ENANLE/DISABLE);

函數(shù)表示使能或者不使能APBx(Advanced Peripheral Bus)的外設(shè)時鐘,APBx表示時鐘總線APB1或APB2,APB1為低速的外設(shè)時鐘(最大為36MHz),APB2為高速的外設(shè)時鐘(最大為72MHz)。GPIOy表示GPIO的端口(A.B.C...)。兩個時鐘總線上都掛載著不同的引腳端口和外設(shè),使用時需要注意,APB1的使能函數(shù)不能使能掛載在APB2總線上的引腳端口和外設(shè)。

2.初始化GPIO目標引腳的工作模式

因為官方庫函數(shù)已經(jīng)將初始化GPIO的所需要的功能進行了封裝,成為一個結(jié)構(gòu)體,所以需要先定義一個GPIO_InitTypeDef類型的結(jié)構(gòu)體。注意:定義結(jié)構(gòu)體要放在GPIO配置函數(shù)內(nèi)的第一行。

GPIO_InitTypeDef GPIO_InitStructure;

然后選擇需要控制的引腳,x表示所控制端口的第幾個引腳。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;

然后設(shè)置引腳模式,xx表示8種不同的引腳模式,如果只是想要控制引腳的高低電平用于LED的亮滅控制,則可以選擇GPIO_Mode_Out_PP(通用推挽輸出);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_xx;

然后設(shè)置引腳的速率,xx表示輸出最大的頻率,共有10MHz、2MHz、50MHz三種選擇,速度越大,I/O口的相應(yīng)速度越快,但相應(yīng)的功耗和噪聲也大。

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_xxMHz;

3.調(diào)用庫函數(shù),初始化GPIO端口

GPIOx為需要使用端口,在前面已經(jīng)使能其的時鐘;GPIO_InitStructure為第2步定義的結(jié)構(gòu)體。

GPIO_Init(GPIOx, &GPIO_InitStructure);

4.定義引腳的高低電平

GPIO_SetBits(GPIOx , GPIO_Pin_y)表示將Px(y)的引腳拉高;

GPIO_ResetBits(GPIOx , GPIO_Pin_y)表示將Px(y)的引腳拉低;

二. 示例程序:通過控制引腳PB5輸出高低電平實現(xiàn)led燈的亮滅。

“bsp_led.c”  //led驅(qū)動文件#include "bsp_led.h"void LED_GPIO_Config(void){    GPIO_InitTypeDef GPIO_InitStructure;     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE );    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOB, &GPIO_InitStructure);  }"bsp_led.h"  //led頭文件#ifndef  __LED_H#define __LED_H#include "stm32f10x.h"void LED_GPIO_Config(void);#define  LED_OFF     GPIO_SetBits(GPIOB , GPIO_Pin_5);        //PB5引腳為低電平#define  LED_ON      GPIO_ResetBits(GPIOB , GPIO_Pin_5);    //PB5引腳為高電平#endif /* __LED_H */"main.c"  //主函數(shù)文件#include "stm32f10x.h"#include "bsp_led.h"void delay_ms(uint16_t nms)    //延時函數(shù),ms級別{    uint16_t i , j;    for(i=0;i< 1000;i++)    { for(j=0 ; i< 1000 ; j++) }}int main(void)    //led循環(huán)亮滅各0.5秒{    LED_GPIO_Config();    while(1)    {        LED_ON;        delay_ms(500); //延時500ms        LED_OFF;        delay_ms(500); //延時500ms    }}

三. 電路圖示意

LED接線示意圖

當PB5為低電平時,led亮;當PB5為高電平時,led滅。由于led的內(nèi)阻較小,而且有最大電流限制,所以需要串聯(lián)電阻調(diào)節(jié)電流,我選用的led的最大電流為20mA,所以我使用330Ω的電阻,使其電流為10mA,不會超過電流限制。

標簽:

上一篇:STM32F1命名規(guī)則及選型
下一篇:最后一頁