在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的GPIO操作配置和使用方法

冬至子 ? 來(lái)源:明解嵌入式 ? 作者:Sharemaker001 ? 2023-07-07 16:50 ? 次閱讀

一、前言

本篇開(kāi)始對(duì)STM32的GPIO在實(shí)際開(kāi)發(fā)設(shè)計(jì)中的使用配置和技巧進(jìn)行探討,可以先去回顧下之前介紹的GPIO的相關(guān)理論基礎(chǔ)知識(shí)包括基本結(jié)構(gòu),工作模式和寄存器原理。

了解過(guò)STM32的GPIO相關(guān)的理論知識(shí),這樣在應(yīng)用GPIO開(kāi)發(fā)過(guò)程中,能更好的理解GPIO的特點(diǎn),應(yīng)用起來(lái)會(huì)更加的得心應(yīng)手。

后續(xù)將從以下圖1中所示的幾個(gè)方面對(duì)GPIO應(yīng)用設(shè)計(jì)中的步驟展開(kāi)介紹。本篇先介紹GPIO的基本API函數(shù)定義,配置初始化的流程,以及使用技巧;針對(duì)將GPIO的引腳用于外部中斷的功能將作為單獨(dú)的一篇進(jìn)行詳細(xì)的討論介紹。

圖片

圖1 GPIO應(yīng)用設(shè)計(jì)

二、API函數(shù)

STM32有多種類(lèi)型的庫(kù),本節(jié)所介紹的STM32的GPIO函數(shù)接口是STM32標(biāo)準(zhǔn)庫(kù)的函數(shù)接口,接口總共分為4種類(lèi)型,如圖2所示。

圖片

圖2 GPIO庫(kù)函數(shù)接口分類(lèi)

1、關(guān)鍵參數(shù)

在詳細(xì)介紹各個(gè)API函數(shù)接口功能之前,我們需要對(duì)函數(shù)接口中使用到的關(guān)鍵的幾個(gè)參數(shù)進(jìn)行分析。

(1)、GPIO_TypeDef GPIOx *

這個(gè)參數(shù)是用于指定需要具體的GPIO端口號(hào)定義,參數(shù)的范圍為GPIOA~GPIOK。

(2)、GPIO_InitTypeDef GPIO_InitStruct *

這個(gè)參數(shù)是GPIO端口需要初始化的功能參數(shù)的結(jié)構(gòu)體指針,下面我們看看這個(gè)結(jié)構(gòu)體的定義。

typedef struct
{
    uint32_t GPIO_Pin;            //GPIO端口的引腳
    GPIOMode_TypeDef GPIO_Mode;   //GPIO的端口模式                                         
    GPIOSpeed_TypeDef GPIO_Speed; //GPIO的輸出速度頻率
    GPIOOType_TypeDef GPIO_OType; //GPIO輸出時(shí)的類(lèi)型
    GPIOPuPd_TypeDef GPIO_PuPd;   //GPIO上下拉電阻設(shè)置                                       
}GPIO_InitTypeDef;

(a)、GPIO端口的引腳:可選范圍為GPIO_Pin_0~GPIO_Pin_15,也可以選所有引腳GPIO_Pin_All。

(b)、GPIO的端口模式:用于設(shè)置GPIO的端口模式,可選的端口模式如下。

typedef enum
{
    GPIO_Mode_IN  = 0x00, //普通IO口輸入
    GPIO_Mode_OUT = 0x01, //普通IO口輸出
    GPIO_Mode_AF  = 0x02, //管腳復(fù)用功能
    GPIO_Mode_AN  = 0x03  //模擬輸入,用于ADC功能
}GPIOMode_TypeDef;

(c)、GPIO的輸出速度頻率:當(dāng)GPIO引腳用于普通功能輸出或復(fù)用功能輸出時(shí),GPIO的輸出速度頻率,可選的輸出速率如下。

typedef enum
{
    GPIO_Low_Speed     = 0x00, //GPIO_Speed_2MHz
    GPIO_Medium_Speed  = 0x01, //GPIO_Speed_25MHz
    GPIO_Fast_Speed    = 0x02, //GPIO_Speed_50MHz
    GPIO_High_Speed    = 0x03  //GPIO_Speed_100MHz
}GPIOSpeed_TypeDef;

速度高的IO耗電大、噪聲也大,速度低的IO耗電小、噪聲也小。使用合適的速度可以降低功耗和噪聲。高頻的驅(qū)動(dòng)電路,噪聲也高,當(dāng)不需要高的輸出頻率時(shí),請(qǐng)選用低頻驅(qū)動(dòng)電路,這樣非常有利于提高系統(tǒng)的EMI性能,也可以降低功耗。當(dāng)然如果要輸出較高頻率的信號(hào),但卻選用了較低頻率的速度,很可能會(huì)得到失真的輸出信號(hào)。關(guān)鍵是GPIO的引腳速度跟應(yīng)用匹配。

(d)、GPIO輸出時(shí)的類(lèi)型:當(dāng)GPIO引腳用于普通功能輸出或復(fù)用功能輸出時(shí),可選擇設(shè)置的GPIO的輸出結(jié)構(gòu)類(lèi)型有如下。

typedef enum
{
    GPIO_OType_PP = 0x00, //推挽結(jié)構(gòu)
    GPIO_OType_OD = 0x01 //開(kāi)漏結(jié)構(gòu)
}GPIOOType_TypeDef;

推挽輸出時(shí),可以輸出高或者低電平;開(kāi)漏輸出時(shí),如果要輸出高電平,則需要在芯片內(nèi)部配置上拉電阻(弱上拉)或者在芯片IO外部連接上拉電阻。

(e)、GPIO上下拉電阻設(shè)置:可以為GPIO端口的引腳選擇設(shè)置是否具備帶上拉或下拉電阻功能。

typedef enum
{
    GPIO_PuPd_NOPULL = 0x00, //無(wú)上拉或者下拉
    GPIO_PuPd_UP     = 0x01, //帶上拉電阻
    GPIO_PuPd_DOWN   = 0x02 //帶下拉電阻
}GPIOPuPd_TypeDef;

STM32芯片GPIO的上拉電阻和下拉電阻最小值,典型值和最大值如下:

圖片

(3)、uint16_t GPIO_PinSource和uint8_t GPIO_AF

這兩個(gè)參數(shù)都是GPIO端口引腳需要配置成復(fù)用功能引腳用到的參數(shù)。

GPIO_PinSource:指需配置的復(fù)用功能引腳源,可選范圍GPIO_PinSource0

~GPIO_PinSource15。

GPIO_AF:指該引腳具體需要配置的功能,具體配置功能要看實(shí)際應(yīng)用需求,例如需要配置成SPI1功能的引腳,那么就選GPIO_AF_SPI1。

2、函數(shù)接口

下面就對(duì)具體的函數(shù)接口進(jìn)行逐個(gè)的介紹。由于使用的是STM32的標(biāo)準(zhǔn)庫(kù),GPIO 相關(guān)的函數(shù)及配置定義和可以調(diào)用的接口放置在官方提供的標(biāo)準(zhǔn)庫(kù)文件 stm32fxx_gpio.c和頭文件 stm32fxx_gpio.h 文件中。

(1)、void GPIO_DeInit(GPIO_TypeDef GPIOx); *

作用:將GPIO端口設(shè)置成初始的默認(rèn)狀態(tài),相當(dāng)于復(fù)位GPIO端口,默認(rèn)的狀態(tài)為輸入浮空的狀態(tài)。

舉例:GPIO_DeInit(GPIOA),將GPIOA端口所有引腳復(fù)位到默認(rèn)狀態(tài)。

(2)、void GPIO_Init(GPIO_TypeDef GPIOx, GPIO_InitTypeDef GPIO_InitStruct);**

作用:將GPIO端口引腳進(jìn)行功能狀態(tài)初始化。

舉例:將GPIOA的pin1引腳設(shè)為普通輸出功能,IO驅(qū)動(dòng)速率可達(dá)50MHz,推挽模式,帶上拉電阻。

gpio_InitStruct.GPIO_Pin = GPIO_Pin_1;
gpio_InitStruct. GPIO_Mode = GPIO_Mode_OUT;
gpio_InitStruct.GPIO_Speed = GPIO_Fast_Speed;
gpio_InitStruct. GPIO_OType = GPIO_OType_PP;
gpio_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &gpio_InitStruct);

(3)、void GPIO_StructInit(GPIO_InitTypeDef GPIO_InitStruct); *

作用:獲取GPIO端口的所有引腳的一個(gè)默認(rèn)狀態(tài),可應(yīng)用于某個(gè)GPIO端口上。該函數(shù)內(nèi)部默認(rèn)的引腳默認(rèn)狀態(tài)如下。

GPIO_InitStruct- >GPIO_Pin  = GPIO_Pin_All;
GPIO_InitStruct- >GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct- >GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStruct- >GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct- >GPIO_PuPd = GPIO_PuPd_NOPULL;

舉例:使用gpio_InitStruct快速獲取到了引腳的默認(rèn)狀態(tài)值。

GPIO_StructInit(&gpio_InitStruct);

(4)、void GPIO_PinLockConfig(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); *

作用:將指定GPIO端口引腳當(dāng)前的配置進(jìn)行鎖定,鎖定后該引腳配置不能被修改,只有等下次MCU復(fù)位鎖定才能釋放。

舉例:鎖定GPIOA的管腳pin1配置不被修改。

GPIO_PinLockConfig(GPIOA, GPIO_Pin_1);

(5)、uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); *

作用:為當(dāng)GPIO的相應(yīng)管腳配置成輸入時(shí),讀取該GPIO端口下的相應(yīng)引腳輸入電平值。

舉例:讀取GPIOA的pin1引腳輸入電平值。

status = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);

(6)、uint16_t GPIO_ReadInputData(GPIO_TypeDef GPIOx); *

作用:為當(dāng)GPIO配置成輸入時(shí),讀取該GPIO端口下的所有引腳輸入電平值。

舉例:讀取GPIOA端口所有引腳的輸入電平值。

status = GPIO_ReadInputData(GPIOA);

(7)、uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); *

作用:為當(dāng)GPIO的相應(yīng)管腳配置成輸出時(shí),讀取該GPIO端口下的相應(yīng)引腳輸出電平值。

舉例:讀取GPIOA的pin1引腳輸出電平值。

status = GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1);

(8)、uint16_t GPIO_ReadOutputData(GPIO_TypeDef GPIOx); *

作用:為當(dāng)GPIO配置成輸出時(shí),讀取該GPIO端口下的所有引腳輸出電平值。

舉例:讀取GPIOA端口所有引腳的輸出電平值。

status = GPIO_ReadOutputData(GPIOA);

(9)、void GPIO_SetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); *

作用:置位相應(yīng)GPIO端口引腳的電平值。

舉例:將GPIOA的pin1管腳電平置為1。

GPIO_SetBits(GPIOA, GPIO_Pin_1);

也可以用于多個(gè)引腳電平的置位,

GPIO_SetBits(GPIOA, GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);

(10)、void GPIO_ResetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); *

作用:清零相應(yīng)GPIO端口引腳的電平值。

舉例:將GPIOA的pin1管腳電平置為0,

GPIO_ResetBits(GPIOA, GPIO_Pin_1);

也可以用于多個(gè)引腳電平的清零。

GPIO_ResetBits(GPIOA, GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);

(11)、void GPIO_WriteBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, BitAction BitVal); *

作用:將GPIO端口的指定管腳電平置1或置0。

舉例:將GPIOA的pin1管腳電平置為1。

GPIO_WriteBit(GPIOA, GPIO_Pin_1, 1);

也可以用于多個(gè)引腳電平操作。

GPIO_WriteBit(GPIOA, GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3, 1)

(12)、void GPIO_Write(GPIO_TypeDef GPIOx, uint16_t PortVal); *

作用:將GPIO端口的所有管腳電平置1或置0。

舉例:將GPIOA端口的所有管腳電平置為1。

GPIO_Write(GPIOA, 1);

(13)、void GPIO_ToggleBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); *

作用:翻轉(zhuǎn)指定GPIO引腳的輸出電平,即0變?yōu)?,1變?yōu)?。

舉例:翻轉(zhuǎn)GPIOA的pin1管腳電平值。

GPIO_ToggleBits(GPIOA , GPIO_Pin_1);

(14)、void GPIO_PinAFConfig(GPIO_TypeDef GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF); *

作用:將GPIO的指定管腳配置成復(fù)用功能管腳。

舉例:將GPIOA的pin9管腳配置成串口USART1的功能管腳。

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);

三、配置流程

配置流程主要在實(shí)際的驅(qū)動(dòng)配置中對(duì)GPIO進(jìn)行初始化的操作,根據(jù)實(shí)際項(xiàng)目應(yīng)用開(kāi)發(fā)中的芯片GPIO引腳的定義,進(jìn)行合理的配置。圖3所示為GPIO的基本配置操作流程。

圖片

圖3 GPIO配置流程

(1)、使能對(duì)應(yīng)GPIO的時(shí)鐘

在配置GPIO的開(kāi)始,首先需要將對(duì)應(yīng)的GPIO模塊的時(shí)鐘打開(kāi),這樣才能為GPIO工作提供動(dòng)力源,因此只有先將GPIO的時(shí)鐘打開(kāi)才能使GPIO正常的工作。

關(guān)于STM32芯片內(nèi)部整體的時(shí)鐘系統(tǒng),可以回顧之前明解STM32時(shí)鐘系統(tǒng)的文章介紹。STM32的GPIO模塊是掛載在芯片內(nèi)部AHB1總線(AHB:高級(jí)高性能總線)上的外設(shè),因此就需要打開(kāi)GPIO在AHB1總線上對(duì)應(yīng)的時(shí)鐘。AHB1總線上的外設(shè)時(shí)鐘開(kāi)關(guān)在STM32提供的標(biāo)準(zhǔn)庫(kù)函數(shù)中通過(guò)函數(shù) RCC_AHB1PeriphClockCmd ()來(lái)實(shí)現(xiàn)的。例如調(diào)用:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

這樣就將GPIOA的時(shí)鐘打開(kāi),也可以同時(shí)打開(kāi)多個(gè)GPIO端口的時(shí)鐘:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);

(2)、引腳功能配置

接下來(lái)對(duì)GPIO引腳的配置是需要根據(jù)實(shí)際的項(xiàng)目應(yīng)用要求,根據(jù)各個(gè)芯片管腳的定義來(lái)對(duì)引腳的功能進(jìn)行合理的配置,主要是根據(jù)引腳是使用成普通IO輸出還是輸入,復(fù)用功能還是模擬管腳來(lái)調(diào)用GPIO_Init()函數(shù)進(jìn)行配置。舉例說(shuō)明:

用于普通IO輸出時(shí):

GPIO_WriteBit(GPIOA, GPIO_Pin_1, 1);//向引腳輸出0或1電平,在GPIO_Init前調(diào)用
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//設(shè)置使用引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通IO輸出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//根據(jù)實(shí)際應(yīng)用配置輸出結(jié)構(gòu)類(lèi)型
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//根據(jù)實(shí)際應(yīng)用配置輸出速度
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//根據(jù)實(shí)際應(yīng)用配置上拉或下拉電阻
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA1引腳

需要注意的是,初始化輸出電平時(shí),需要先調(diào)用寫(xiě)引腳電平接口,再做初始化操作,這是因?yàn)镚PIO_WriteBit是將輸出的值寫(xiě)入寄存器輸出置位/復(fù)位寄存器BSRR,BSRR寄存器復(fù)位值是0,GPIO_Init相當(dāng)于將GPIO引腳初始化完打開(kāi)輸出開(kāi)關(guān)。如果需要輸出的是高電平,GPIO_WriteBit在前,GPIO_Init在后相當(dāng)于在沒(méi)打開(kāi)開(kāi)關(guān)之前就將1在BSRR中放置好,GPIO_Init將開(kāi)關(guān)一打開(kāi)就可以輸出高電平;如果GPIO_Init在前,GPIO_WriteBit在后,GPIO_Init完會(huì)將BSRR中的0先輸出,過(guò)了一個(gè)函數(shù)指令周期后調(diào)用GPIO_WriteBit才輸出高電平,因此若驅(qū)動(dòng)時(shí)序?qū)瘮?shù)指令周期敏感的外圍器件時(shí),可能帶來(lái)驅(qū)動(dòng)時(shí)序問(wèn)題!

用于普通IO輸入時(shí):

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//設(shè)置使用引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通IO輸入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//根據(jù)實(shí)際應(yīng)用配置輸出速度
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//根據(jù)實(shí)際應(yīng)用配置上拉或下拉電阻
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA1引腳

用于復(fù)用功能時(shí):

在管腳應(yīng)用于復(fù)用功能時(shí),需要調(diào)用GPIO_PinAFConfig()接口來(lái)將管腳配置成具體的外設(shè)管腳。

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //PA9 復(fù)用為 USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //PA10復(fù)用為USART1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //設(shè)置使用引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//復(fù)用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //根據(jù)實(shí)際應(yīng)用配置輸出速度
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //根據(jù)實(shí)際應(yīng)用配置輸出結(jié)構(gòu)類(lèi)型
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //根據(jù)實(shí)際應(yīng)用配置上拉或下拉電阻
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9和PA10引腳

用于模擬管腳時(shí):

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 通道 5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模擬輸入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不帶上下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA5引腳

當(dāng)STM32需要進(jìn)行 AD( 模數(shù) ) 轉(zhuǎn)換采樣時(shí),需要把引腳設(shè)置為模擬輸入模式,模擬輸入模式下,不需要連接上拉和下拉電阻,因?yàn)镚PIO用于模擬功能時(shí),引腳的上、下拉電阻是不起作用的。這個(gè)時(shí)候即使在配置了上拉或下拉電阻,也不會(huì)影響到模擬信號(hào)的輸入。

(3)、對(duì)GPIO引腳進(jìn)行操作

在初始化完GPIO引腳的具體配置后,就可以對(duì)GPIO引腳進(jìn)行具體的操作使用了。

用于普通IO輸出時(shí):

可以調(diào)用相關(guān)GPIO相關(guān)寫(xiě)操作接口對(duì)引腳進(jìn)行輸出0或者1的操作:GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit、GPIO_ToggleBits。

也可以調(diào)用相關(guān)GPIO讀接口對(duì)輸出類(lèi)型的GPIO進(jìn)行讀取引腳電平的操作GPIO_ReadOutputDataBit。

用于普通IO輸入時(shí):

可以調(diào)用相關(guān)GPIO讀接口對(duì)輸入類(lèi)型的GPIO進(jìn)行讀取引腳電平的操作:GPIO_ReadInputDataBit。

用于復(fù)用功能時(shí):

需要根據(jù)實(shí)際使用時(shí)的具體外設(shè)配置,接著初始化相應(yīng)的片上外設(shè)后,調(diào)用具體的外設(shè)信號(hào)讀或者寫(xiě)接口進(jìn)行信號(hào)的讀寫(xiě)操作。

用于模擬管腳時(shí):

由于模擬管腳功能是用芯片上的ADC對(duì)芯片外部的模擬信號(hào)進(jìn)行采樣,因此還需要初始化完ADC外設(shè)后,調(diào)用ADC外設(shè)采樣的接口進(jìn)行信號(hào)讀取。

四、使用技巧

在日常程序開(kāi)發(fā)調(diào)試的過(guò)程中,可以簡(jiǎn)單有效的利用GPIO驅(qū)動(dòng)輸出高低電平來(lái)進(jìn)行輔助的測(cè)試及驗(yàn)證工作。下面介紹幾個(gè)較為常用的使用場(chǎng)景,如果有其它可以利用GPIO的方法和技巧,也請(qǐng)大家積極留言,我們一起探討。

(1)、在boot程序階段使用IO翻轉(zhuǎn)輸出信號(hào)的頻率可以和APP程序階段使用IO翻轉(zhuǎn)輸出信號(hào)的頻率相異,通過(guò)使用示波器測(cè)量波形,用于區(qū)分程序是運(yùn)行在boot程序階段還是APP程序階段,即不同程序階段。

(2)、在使用定時(shí)器中斷的時(shí)候,為了確保定時(shí)器時(shí)基設(shè)置的正確性,測(cè)試是可以定時(shí)器中斷中增加IO口信號(hào)翻轉(zhuǎn)邏輯,通過(guò)使用示波器測(cè)量翻轉(zhuǎn)的頻率來(lái)測(cè)試驗(yàn)證定時(shí)器中斷的周期。

void TIM1_IRQHandler(void) //定時(shí)器 1 中斷服務(wù)函數(shù)
{
    if(TIM_GetITStatus(TIM1,TIM_IT_Update)==SET) //溢出中斷
    {
        GPIO_ToggleBits(); //IO口信號(hào)翻轉(zhuǎn)操作邏輯,用于驗(yàn)證定時(shí)器中斷頻率
    }
    TIM_ClearITPendingBit(TIM1,TIM_IT_Update); //清除中斷標(biāo)志位
}

(3)、在不同的程序段中使用多個(gè)IO,輸出高電平,通過(guò)示波器測(cè)量IO口之間輸出高電平的間隔,可以確定兩個(gè)程序段之間運(yùn)行的準(zhǔn)確時(shí)間。

(4)、在板卡上沒(méi)有LED進(jìn)行閃爍指示的情況或沒(méi)有使用外部看門(mén)狗芯片的情況下,為了確認(rèn)程序是否仍然在正常運(yùn)行,需要留出一個(gè)IO口,用于翻轉(zhuǎn)高低電平輸出,后續(xù)就可以用示波器測(cè)量該信號(hào)的有無(wú)來(lái)判斷程序是否死機(jī)。

(5)、在沒(méi)有調(diào)試打印程序信息的串口時(shí),查找死機(jī)問(wèn)題的時(shí)候,放置不同的IO輸出高電平的在不同的程序段,這樣類(lèi)似的進(jìn)行插樁驅(qū)動(dòng)測(cè)試,通過(guò)示波器測(cè)量信號(hào),可以大體的定位在程序運(yùn)行的哪一塊發(fā)生了死機(jī)的問(wèn)題。

(6)、在測(cè)試驗(yàn)證階段,可以將某個(gè)IO引腳配置成輸入模式,利用外部給的激勵(lì)信號(hào),在程序中判斷讀到的信號(hào)電平的高低狀態(tài),去作為邏輯判斷條件進(jìn)行一些代碼段的驗(yàn)證測(cè)試。

五、總結(jié)

本篇主要主要是對(duì)STM32的GPIO在日常基本應(yīng)用開(kāi)發(fā)中的具體的操作配置和使用方法進(jìn)行了說(shuō)明,包括API功能函數(shù)的定義,驅(qū)動(dòng)初始化的配置流程以及一些利用GPIO操作的相關(guān)技巧,后續(xù)將對(duì)GPIO使用成外部中斷時(shí)進(jìn)行詳細(xì)的介紹。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 上拉電阻
    +關(guān)注

    關(guān)注

    5

    文章

    360

    瀏覽量

    30621
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120377
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52104
  • AHB總線
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    9484
  • STM32芯片
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    4382
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32 GPIO的API函數(shù)配置和使用技巧

    本篇開(kāi)始對(duì)STM32GPIO在實(shí)際開(kāi)發(fā)設(shè)計(jì)中的使用配置和技巧進(jìn)行探討,可以先去回顧下之前介紹的GPIO的相關(guān)理論基礎(chǔ)知識(shí)包括基本結(jié)構(gòu),工作模式和寄存器原理。
    發(fā)表于 04-14 10:46 ?1357次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b>的API函數(shù)<b class='flag-5'>配置</b>和使用技巧

    GPIO的常用庫(kù)函數(shù)使用方法總結(jié)

    +GPIOx_LCKR作用和配置STM32F103五分鐘入門(mén)系列(三)GPIO的常用庫(kù)函數(shù)使用方法總結(jié)+一個(gè)網(wǎng)絡(luò)上的誤區(qū)各類(lèi)時(shí)鐘的實(shí)現(xiàn)+各類(lèi)時(shí)鐘寄存器總結(jié)前言一、
    發(fā)表于 08-23 09:19

    STM32固件庫(kù)的使用方法

    一.實(shí)驗(yàn)?zāi)康恼莆?b class='flag-5'>STM32固件庫(kù)的使用方法;掌握基于庫(kù)函數(shù)模板的開(kāi)發(fā)方法;掌握基于固件庫(kù)進(jìn)行GPIO端口編程的方法;4、規(guī)范編程格式。二.實(shí)
    發(fā)表于 10-27 06:37

    STM32CubeMX的HAL庫(kù)對(duì)F103和F411的GPIO配置使用方法

    文章目錄STM32CubeMX第一章GPIO前言一、GPIO的工作模式二、使用步驟1.引入庫(kù)2.讀入數(shù)據(jù)總結(jié)前言??本文使用STM32CubeMX的HAL庫(kù)對(duì)F103和F411的
    發(fā)表于 01-26 06:28

    關(guān)于STM32GPIO配置不同輸出速度會(huì)有什么影響?

    STM32GPIO配置不同輸出速度會(huì)有什么影響?
    的頭像 發(fā)表于 03-01 11:53 ?1.2w次閱讀
    關(guān)于<b class='flag-5'>STM32</b>的<b class='flag-5'>GPIO</b><b class='flag-5'>配置</b>不同輸出速度會(huì)有什么影響?

    STM32F0xx_ GPIO配置詳細(xì)過(guò)程

    STM32F0xx_GPIO配置詳細(xì)過(guò)程
    的頭像 發(fā)表于 04-08 09:31 ?4659次閱讀
    <b class='flag-5'>STM32</b>F0xx_ <b class='flag-5'>GPIO</b><b class='flag-5'>配置</b>詳細(xì)過(guò)程

    STM32GPIO操作例程免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是KEIL官方STM32GPIO操作例程免費(fèi)下載。
    發(fā)表于 01-23 08:00 ?0次下載

    STM32CubeMX應(yīng)用教程 第一章 GPIO

    F103???Nucleo-F411RE文章目錄STM32CubeMX第一章 GPIO前言一、GPIO的工作模式二、使用步驟1.引入庫(kù)2.讀入數(shù)據(jù)總結(jié)前言??本文使用STM32Cu
    發(fā)表于 12-02 13:51 ?9次下載
    <b class='flag-5'>STM32</b>CubeMX應(yīng)用教程 第一章 <b class='flag-5'>GPIO</b>

    STM32CubeMX配置GPIO與USB簡(jiǎn)介

    目錄目的工具版本使用方法時(shí)鐘配置SYS配置GPIO配置USB配置Clock Configurat
    發(fā)表于 12-14 18:42 ?5次下載
    <b class='flag-5'>STM32</b>CubeMX<b class='flag-5'>配置</b><b class='flag-5'>GPIO</b>與USB簡(jiǎn)介

    關(guān)于STM32 GPIO配置等問(wèn)題

    關(guān)于STM32 GPIO配置等問(wèn)題一、GPIO的基本結(jié)構(gòu)圖示二、模式直接上圖:圖表數(shù)據(jù)解析:三、配置等問(wèn)題問(wèn)題一、
    發(fā)表于 01-13 16:22 ?3次下載
    關(guān)于<b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b>的<b class='flag-5'>配置</b>等問(wèn)題

    AN4899_STM32GPIO配置

    AN4899_STM32GPIO配置
    發(fā)表于 11-21 17:07 ?2次下載
    AN4899_<b class='flag-5'>STM32</b>的<b class='flag-5'>GPIO</b><b class='flag-5'>配置</b>

    STM32GPIO在實(shí)際開(kāi)發(fā)設(shè)計(jì)的使用配置和技巧

    一、前言 本篇開(kāi)始對(duì)STM32GPIO在實(shí)際開(kāi)發(fā)設(shè)計(jì)中的使用配置和技巧進(jìn)行探討,可以先去回顧下之前介紹的GPIO的相關(guān)理論基礎(chǔ)知識(shí)包括基本結(jié)構(gòu),工作模式和寄存器原理。 了解過(guò)
    的頭像 發(fā)表于 06-22 10:22 ?902次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>GPIO</b>在實(shí)際開(kāi)發(fā)設(shè)計(jì)的使用<b class='flag-5'>配置</b>和技巧

    STM32單片機(jī)的GPIO輸入、輸出模式與配置方法

    STM32 單片機(jī)是一款高性能、低功耗的 32 位微控制器,具有強(qiáng)大的計(jì)算能力、靈活的外設(shè)模塊和實(shí)現(xiàn)微控制器應(yīng)用所需的社區(qū)支持。在單片機(jī)應(yīng)用中,GPIO 輸入輸出模式是必不可少的硬件接口之一。本文將介紹 STM32 單片機(jī)的
    發(fā)表于 08-15 18:23 ?8354次閱讀

    STM32GPIO配置

    STM32微控制器通用輸入/輸出引腳(GPIO)提供許多與應(yīng)用框架內(nèi)外部電路相連接的方法。本應(yīng)用筆記提供有關(guān)GPIO配置的基本信息,以及硬件
    發(fā)表于 08-31 10:50 ?1次下載

    STM32使用GPIO配置的5種方式

    STM32使用GPIO配置的5種方式 STM32是常見(jiàn)的一種微控制器,其GPIO模塊可以實(shí)現(xiàn)對(duì)外部設(shè)備的控制和數(shù)據(jù)傳輸,包括數(shù)字I/O口、模
    的頭像 發(fā)表于 10-26 17:42 ?1473次閱讀
    主站蜘蛛池模板: 国产裸露片段精华合集链接| 在线观看你懂的视频| 狠狠成人| 国产美女精品一区二区三区| 色天网站| 99热这里只有精品一区二区三区| 黄色日批网站| 中国一级毛片aaa片| 美女一级毛片毛片在线播放| 天天综合久久久网| 亚洲国产一区二区三区a毛片| 日韩一级特黄毛片在线看| 操操久久| 91视频观看免费| 欧美在线观看一区二区三| 午夜视频吧| 亚洲91色| 久久综合婷婷| 久久久久久久国产| 一个人看aaaa免费中文| 欧美日韩亚洲一区| 色多多拼多多网站| 午夜毛片网站| 日本一区二区视频| 噜噜吧噜噜色| 狠狠干天天色| 五月婷婷综合激情网| 你懂的国产| 理论视频在线观看| 日本高清一区二区三区不卡免费| 欧美三级大片在线观看| 人人玩人人添天天爽| 在线综合网| brazzersvideosexhd欧美高清| 91pao强力打造免费高清| 欧洲人体超大胆露私视频| 日日久| 亚洲欧美高清在线| 97久久伊人精品影院| 日本视频三区| 国产美女特级嫩嫩嫩bbb|