STM32 通用IO讀寫
STM32是基于ARM Cortex-M3內(nèi)核的芯片,專為要求高性能、低成本、低功耗的嵌入式應(yīng)用設(shè)計的芯片。1μs的雙12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻轉(zhuǎn)速度。
我學(xué)的是STM32F103。它的內(nèi)核為:ARM 32位的Cortex -M3 CPU,它的工作頻率最高可以達到72MHZ。2個12位AD(16路通道),80個通用I/O接口,7個定時器,9個通信接口。
(一)通用I/O接口
主要要達到的目的是:1、了解通用I/O接口的接口和性能。2、了解復(fù)用功能和重映射。3、掌握通用I/O接口的程序設(shè)計方法。
1.1.1通用I/O(GPIO)接口的結(jié)構(gòu):
一個GPIO引腳包含以下幾個寄存器:①兩個32位的配置寄存器(GPIOx_CRL,GPIOx_CRH),②兩個32位的數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR),③一個16位的復(fù)位寄存器(GPIOx_BRR),④一個32位的置位/復(fù)位寄存器(GPIOx_BSRR),⑤一個32位的鎖定寄存器(GPIOx_LCKR)。所有寄存器不允許按照半字節(jié)或字節(jié)訪問,必須按32位字訪問。
1.1.2每一個GPIO引腳都可以在程序中配置成如下幾種模式:輸入懸空,輸入上拉,輸入下拉,模擬輸入,開漏輸出,推挽式輸出,,推挽式復(fù)用功能,開漏復(fù)用功能。
這些模式通過CNF[1:0]和MODE[1:0]來完成配置
1.2.1通用I/O(GPIO)接口的功能
GPIO有四種功能:1通用的I/O接口。2單獨的為設(shè)置或者位刪除。3外中斷/喚醒線、4復(fù)用功能(AF)和重映射、5GPIO的功能鎖定
1.2.11通用I/O:在復(fù)位期間和剛復(fù)位之后,復(fù)位功能未開啟,I/O口被配置成浮空輸入模式(CNFx[1:0]=01b,MODE[1:0]=00b)
1.2.12單獨的位設(shè)置和位清除:當(dāng)對GPIOx_ODR的個別位進行設(shè)置時,在單次APB2寫操作里,可以改變一個或多個位。這是通過對GPIOx_BSRR和GPIOx_BRR來實現(xiàn)的。想改變某一位可以單獨對這位寫1,寫0則此位不被更改。
1.2.13外部中斷:當(dāng)使用外部中斷線時,相應(yīng)引腳必須配置成“輸入模式”。
1.2.14復(fù)用功能(AF)和重映射:
復(fù)用輸入:端口可以配置成輸入模式和輸出模式
復(fù)用輸出:端口必須配置成復(fù)用功能輸出模式(推挽或開漏),這樣使引腳和輸出寄存器斷開,并和片上外設(shè)的輸出信號連接。
雙向復(fù)用功能:端口必須配置成復(fù)用模式功能輸出模式(推挽和開漏)
1.2.15GPIO的鎖定機制:為了防止I/O配置被更改,可以單獨對某個位進行鎖定使其在下一次復(fù)位之前不可以在被更改。
1.2.2GPIO的功能配置
1.2.21輸入配置
1.2.22輸出配置
1.2.23復(fù)用功能配置
1.2.24模擬輸入配置
1.2.3復(fù)用功能與重映射
①OSC_IN和OSC_OUT引腳通過AFIO_MAPR來實現(xiàn)對他們的重映射。
②BXCAN可以被映射到端A、B、D上,由CAN_REMAP[1:0]來設(shè)置
③調(diào)試接口信號的映射
④定時器的重映射分別由TIM1_REMAP[1:0],TIM2_REMAP[1:0],TIM3_REMAP[1:0],TIM4_REMAP[1:0]來設(shè)置
⑤USART1的重映射由寄存器USART1_REMAP[1:0];來設(shè)置=0為PA9和PA10,=1為PB6和PB7。
USART2的重映射寄存器為USART2_REMAP[1:0].
USART3的重映射寄存器為USART3_REMAP[1:0]
⑥I2C的重映射寄存器為I2C_REMAP=0為PB6和PB7,=1為PB8和PB9,
⑦SPI1的重映射寄存器為SPI1_REMAP=0為PA4,PA5,PA6,PA7.SPI1_REMAP=1為PA15,PB3,PB4,PB5
2.1.1通用I/O接口的編程方法
ST公司已經(jīng)提供了比較完善的通用I/O的接口庫,其位于“stm32f10x_gpio.c”中對應(yīng)的頭文件為“stm32f10x_gpio.h”
GPIO_DeInit函數(shù):GPIO寄存器復(fù)位為默認(rèn)值
GPIO_AFIODeInit函數(shù):復(fù)用功能寄存器復(fù)位為默認(rèn)值
GPIO_Init函數(shù):用于按照指定參數(shù)初始化GPIO部件
GPIO_StructInit函數(shù):用于為GPIO_InitStruct各個成員賦默認(rèn)值
GPIO_ReadInputDataBit函數(shù):用以讀取特定輸入端口引腳
GPIO_ReadInputData函數(shù):用于讀取特定GPIO輸入端口引腳
GPIO_ReadOutputDataBit函數(shù):用于讀取特定輸出數(shù)據(jù)端口位
GPIO_ReadOutputData函數(shù):用于讀取特定GPIO輸出數(shù)據(jù)端口
GPIO_SetBits函數(shù):用于置位選定的STM32數(shù)據(jù)端口位
GPIO_ResetBits函數(shù):用于清除選定的數(shù)據(jù)端口位
GPIO_WriteBit函數(shù):
GPIO_Write函數(shù):用于寫數(shù)據(jù)到特定的端口
GPIO_PinLockConfig函數(shù):用于鎖定GPIO引腳配置寄存器
GPIO_EventOutputConfig函數(shù):用于選擇GPIO引腳用作事件輸出
GPIO_EventOutputCmd函數(shù):GPIO使能(禁用)STM32事件輸出
GPIO_PinRemapConfig函數(shù):用于改變特定引腳的映射
GPIO_EXTILineCongig函數(shù):用于選擇GPIO引腳作為EXTI線
GPIO寄存器結(jié)構(gòu)
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
}GPIO_TypeDef;
復(fù)用功能寄存器結(jié)構(gòu):
typedef struct
{
vu32 EVCR;
vu32 MAPR;
vu32 EXTICR[4];
}AFIO_TypeDef;
- STM32單片機中文官網(wǎng)
- STM32單片機官方開發(fā)工具
- STM32單片機參考設(shè)計
評論