9 GPIO:通用I/O口 AFIO:可供選擇的I/O口
9.1 GPIO功能描述
每一個通用的I/O口都有:
兩個32位的配置寄存器(配置寄存器低和配置寄存器高);
兩個32位的數據寄存器(輸入數據寄存器,輸出數據寄存器);
一個32位的位設置/復位寄存器;
一個16位的復位寄存器和1個32位鎖定寄存器。
每個I/O口可以被軟件配置為一下幾種模式:
- 浮點輸入
- 上拉輸入
- 下拉輸入
- 模擬
- 開漏輸出
- 推挽輸出
- 推挽復用
- 開漏復用
每個端口位可自由編程,但是端口寄存器必須以32位進行訪問(不允許使用32位或8位進行訪問)。
位設置復位寄存器和位復位寄存器的作用是允許對任何的GPIO寄存器進行原子讀或修改。
這樣的話,在讀取和修改進入之間就不會有IRQ的風險。
上圖是標准的I/O口的基本結構
該圖中有三個基本的模塊:輸入驅動;輸出驅動;寄存器。
在輸入中改變兩個開關決定是上拉還是下拉,不經過TTL施密特觸發器就是模擬輸入信號,
經過TTL施密特觸發器就是復用功能輸入,這些輸入量可以流進片內外設。
通過輸入數據寄存器可以讀取輸入的數據。
在輸出驅動中,改變P-MOS和N-MOS決定是開漏還是推挽,輸入信號的源頭也是來自於片內外設。
通過位設置/復位寄存器和數據輸出寄存器可以控制輸出數據。
9.1.1 通用的I/O口
9.1.2 原子位置位或復位
9.1.3 外部中斷喚醒
9.1.4 可以復用的功能
9.1.5 I/O復用功能的軟件重新映射
9.1.6 GPIO鎖定機制
9.1.7 輸入配置
9.1.8 輸出配置
9.1.9 復用功能配置
9.1.10 模擬配置
9.1.11 設備外設的GPIO配置
9.2 GPIO寄存器
9.2.1 端口配置寄存器低(GPIOx_CRL)(x=A..G)
9.2.2 端口配置寄存器高(GPIOx_CRH)(x=A..G)
9.2.3 端口輸入數據寄存器(GPIOx_IDR)(x=A..G)
9.2.4 端口輸出數據寄存器(GPIOx_ODR)(x=A..G)
9.2.5 端口位設置/復位寄存器(GPIOx_BSRR)(x = A..G)
9.2.6 端口位復位寄存器 (GPIOx_BRR)(x=A..G)
9.2.7 端口配置鎖定寄存器(GPIOx_LCKP)(x=A..G)
9.3 可選功能I/O口以及調試配置
9.3.1 外部低速引腳
9.3.2 外部高速引腳
9.3.3 CAN1復用功能映射
9.3.4 CAN2復用功能映射
9.3.5 JTAG/SWD復用功能映射
9.3.6 ADC復用功能映射
9.3.7 Timer復用功能映射
9.3.8 USART復用功能映射
9.3.9 I2C1復用功能映射
9.3.10 SPI1復用功能映射
9.3.11 SPI3/I2S3復用功能映射
9.3.12 以太網復用功能映射
9.4 AFIO寄存器
9.4.1 事件控制寄存器(AFIO_EVCR)
9.4.2 AF重新映射和調試I/O配置寄存器(AFIO_MAPR)
9.4.3 外圍中斷配置寄存器1(AFIO_EXTICR1)
9.4.4 外圍中斷配置寄存器2(AFIO_EXTICR2)
9.4.5 外圍中斷配置寄存器3(AFIO_EXTICR3)
9.4.6 外圍中斷配置寄存器4(AFIO_EXTICR4)
9.4.7 AF重新映射和調試I/O配置寄存器2(AFIO_MAPR2)
9.5 GPIO和AFIO的寄存器圖