1、用函数RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)使能所有GPIO的时钟
( h: k, n, E# K: X p' d! v5 S+ H% ^4 F& p+ P: L
2、普通IO口的配置% F8 t# \( q y7 k# X0 y
(1)声明 GPIO_InitTypeDef GPIO_InitStructure. P+ I% l1 [: X7 Z# C/ \% T
(2)配置引脚* V. t5 j. Z) M1 C1 S
- GPIO_InitStructure.GPIO_Pin = CLK595_PIN | LOCK595_PIN | EN595_PIN | DATA595_PIN;7 l7 Q8 B& d( |, p
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
1 \: O2 x `: m6 T5 I. C4 _ - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;) c6 c- m6 h: V7 X/ w8 [
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
2 w$ l' R' ?+ X! s. q - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
复制代码
0 ?. j: t& N/ \3 \1 T. h(3)初始化# D: w' M6 F b6 T
GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);# |% y+ K7 @+ A7 D; d
3、IO口备用功能的配置
, S# Q8 M2 S- X, f(1)、先定义备用功能+ U1 T+ K8 t5 [2 I9 z4 \ A
- #define SPI1_CLK RCC_APB2Periph_SPI17 d' ~: Y# T- i) U9 e0 v
; a: O8 v% m( c* V9 J7 T! O- #define SPI1_CS_Pin GPIO_Pin15
! i7 w# ]& O5 R6 F4 ?( d J3 U - #define SPI1_CS_SourceGPIO_PinSource15
+ x# \4 h. {: |7 [- ] - #define SPI1_CS_Port GPIOA' p* D5 a2 [, Q) i& D
- #define SPI1_CS_AF GPIO_AF_SPI1
* Q2 S7 b! b0 s( W - 0 t9 ]& c0 z' w) m$ ], Q- R5 i
- #define SPI1_CLK_Pin GPIO_Pin3( F' T R7 h/ L, V
- #define SPI1_CLK_SourceGPIO_PinSource3% D U I1 b( c3 d* U7 }! Y
- #define SPI1_CLK_Port GPIOB
t, a2 f8 U/ H! l' ^ - #define SPI1_CLK_AF GPIO_AF_SPI1
$ E$ K: b+ n* Z! Q- _% ^ - ) v) L* C D, {1 d6 a
- #define SPI1_MISO_PinGPIO_Pin4
+ K3 W3 i: |/ A& R" J6 A - #define SPI1_MISO_SourceGPIO_PinSource4: c' f$ d4 h: ?" U& } J% I, ]
- #define SPI1_MISO_Port GPIOB3 s0 |- _& K) ?, u& b" h- `
- #define SPI1_MISO_AF GPIO_AF_SPI1
( [; D3 u0 {+ |, d* {- V/ z2 |2 a. E - ! O& x. P, p1 N$ v/ ?5 V6 [
- #define SPI1_MOSI_Pin GPIO_Pin5$ T2 M! D9 Z) G. h/ k( b
- #define SPI1_MOSI_SourceGPIO_PinSource5
; b/ x& Y) ]" a - #define SPI1_MOSI_Port GPIOB
, l N/ \& R- h2 m6 P, P# f - #define SPI1_MOSI_AF GPIO_AF_SPI1
复制代码
- M4 g# h F J5 {( N7 X(2)、使能备用功能的时钟 z; x8 T7 l5 x# |. g
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE) for SPI1
复制代码 % L, @7 \) C& x/ U8 u
( U s* L- f* w8 {! e; ~; {
(3)、配置引脚及初始化
! Q8 l7 S0 d! L+ K: `0 C- GPIO_InitTypeDef GPIO_InitStructure
& C& d8 T% h/ E3 N n# F2 Z
- m1 n" j' {& S* T: ?, S- GPIO_InitStructure.GPIO_Pin = SPI1_MOSI_Pin ;
: G% }4 k* Y0 E/ s$ e$ P - ( z/ {% V* e+ w ?9 L0 R0 D
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //GPIO_Mode必须配置为GPIO_Mode_AF(备用功能)
3 V- q, p" P0 p, K4 o u0 A - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
3 M1 p$ G: _& u+ Q" f% n - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
$ c7 m" g% Q- A( I- p& x - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
5 J) i6 e$ W/ @$ B4 t- N% @
5 s E( J" n( W1 |4 I; D# N h- GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
复制代码 " u" ^& r3 o- a' a/ y3 W F
(4)、连接引脚到备用功能
% I8 W, j% P& W- GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
复制代码
$ \6 I) x H' u2 ~( O9 r* [1 q. J, q7 g
7 s3 R* I1 g( j' H& Z/ s |