STM32 通用IO讀寫(xiě)
STM32是基于ARM Cortex-M3內(nèi)核的芯片,專(zhuān)為要求高性能、低成本、低功耗的嵌入式應(yīng)用設(shè)計(jì)的芯片。1μs的雙12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻轉(zhuǎn)速度。
我學(xué)的是STM32F103。它的內(nèi)核為:ARM 32位的Cortex -M3 CPU,它的工作頻率最高可以達(dá)到72MHZ。2個(gè)12位AD(16路通道),80個(gè)通用I/O接口,7個(gè)定時(shí)器,9個(gè)通信接口。
(一)通用I/O接口
主要要達(dá)到的目的是:1、了解通用I/O接口的接口和性能。2、了解復(fù)用功能和重映射。3、掌握通用I/O接口的程序設(shè)計(jì)方法。
1.1.1通用I/O(GPIO)接口的結(jié)構(gòu):
一個(gè)GPIO引腳包含以下幾個(gè)寄存器:①兩個(gè)32位的配置寄存器(GPIOx_CRL,GPIOx_CRH),②兩個(gè)32位的數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR),③一個(gè)16位的復(fù)位寄存器(GPIOx_BRR),④一個(gè)32位的置位/復(fù)位寄存器(GPIOx_BSRR),⑤一個(gè)32位的鎖定寄存器(GPIOx_LCKR)。所有寄存器不允許按照半字節(jié)或字節(jié)訪問(wèn),必須按32位字訪問(wèn)。
1.1.2每一個(gè)GPIO引腳都可以在程序中配置成如下幾種模式:輸入懸空,輸入上拉,輸入下拉,模擬輸入,開(kāi)漏輸出,推挽式輸出,,推挽式復(fù)用功能,開(kāi)漏復(fù)用功能。
這些模式通過(guò)CNF[1:0]和MODE[1:0]來(lái)完成配置
1.2.1通用I/O(GPIO)接口的功能
GPIO有四種功能:1通用的I/O接口。2單獨(dú)的為設(shè)置或者位刪除。3外中斷/喚醒線、4復(fù)用功能(AF)和重映射、5GPIO的功能鎖定
1.2.11通用I/O:在復(fù)位期間和剛復(fù)位之后,復(fù)位功能未開(kāi)啟,I/O口被配置成浮空輸入模式(CNFx[1:0]=01b,MODE[1:0]=00b)
1.2.12單獨(dú)的位設(shè)置和位清除:當(dāng)對(duì)GPIOx_ODR的個(gè)別位進(jìn)行設(shè)置時(shí),在單次APB2寫(xiě)操作里,可以改變一個(gè)或多個(gè)位。這是通過(guò)對(duì)GPIOx_BSRR和GPIOx_BRR來(lái)實(shí)現(xiàn)的。想改變某一位可以單獨(dú)對(duì)這位寫(xiě)1,寫(xiě)0則此位不被更改。
1.2.13外部中斷:當(dāng)使用外部中斷線時(shí),相應(yīng)引腳必須配置成“輸入模式”。
1.2.14復(fù)用功能(AF)和重映射:
復(fù)用輸入:端口可以配置成輸入模式和輸出模式
復(fù)用輸出:端口必須配置成復(fù)用功能輸出模式(推挽或開(kāi)漏),這樣使引腳和輸出寄存器斷開(kāi),并和片上外設(shè)的輸出信號(hào)連接。
雙向復(fù)用功能:端口必須配置成復(fù)用模式功能輸出模式(推挽和開(kāi)漏)
1.2.15GPIO的鎖定機(jī)制:為了防止I/O配置被更改,可以單獨(dú)對(duì)某個(gè)位進(jìn)行鎖定使其在下一次復(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引腳通過(guò)AFIO_MAPR來(lái)實(shí)現(xiàn)對(duì)他們的重映射。
②BXCAN可以被映射到端A、B、D上,由CAN_REMAP[1:0]來(lái)設(shè)置
③調(diào)試接口信號(hào)的映射
④定時(shí)器的重映射分別由TIM1_REMAP[1:0],TIM2_REMAP[1:0],TIM3_REMAP[1:0],TIM4_REMAP[1:0]來(lái)設(shè)置
⑤USART1的重映射由寄存器USART1_REMAP[1:0];來(lái)設(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的接口庫(kù),其位于“stm32f10x_gpio.c”中對(duì)應(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各個(gè)成員賦默認(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ù):用于寫(xiě)數(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單片機(jī)中文官網(wǎng)
- STM32單片機(jī)官方開(kāi)發(fā)工具
- STM32單片機(jī)參考設(shè)計(jì)
評(píng)論