01. 概述, X6 g' Y. D5 L
系统配置控制器主要用于管理对可执行代码的存储区域的地址重映射、选择以太网 PHY 接口以及管理 GPIO 的外部中断线连接。* H8 Q3 a( ~2 g& N8 k
) P6 L- L/ J: J02. 相关类型
; U3 N, U8 r0 e) `- P8 l( OSYSCFG_EXTI_Port_Sources
2 e+ B4 y9 _, P! E4 W0 g) p# G6 @2 h8 s8 [6 |2 X4 b- `
- /** @defgroup SYSCFG_EXTI_Port_Sources
1 L2 `# Y% a3 L8 h- J9 @% | - * @{
5 L$ ?5 K) m, |. z J! K: Z4 @ - */
+ M! k1 c8 i. ~5 k& I - #define EXTI_PortSourceGPIOA ((uint8_t)0x00)) U7 d& i" G1 M6 F! E, G# S
- #define EXTI_PortSourceGPIOB ((uint8_t)0x01)% ?; f' t) J; i% c- O: W
- #define EXTI_PortSourceGPIOC ((uint8_t)0x02)
$ s, h8 f0 q6 q/ g( [ - #define EXTI_PortSourceGPIOD ((uint8_t)0x03)- [2 ^, L! U( t) n8 `8 g4 `
- #define EXTI_PortSourceGPIOE ((uint8_t)0x04)
7 ^: f" j( @& U' T5 e* C - #define EXTI_PortSourceGPIOF ((uint8_t)0x05)9 L! K8 F- i4 V5 f+ U, `
- #define EXTI_PortSourceGPIOG ((uint8_t)0x06)6 b' [2 D6 B7 o
- #define EXTI_PortSourceGPIOH ((uint8_t)0x07)( q0 O- Z! _3 K+ v/ M6 u' F
- #define EXTI_PortSourceGPIOI ((uint8_t)0x08)
3 @- F X$ P" n- D8 T - #define EXTI_PortSourceGPIOJ ((uint8_t)0x09)% }; I! Q+ y9 }' d( Y( y$ z. ?5 o( f
- #define EXTI_PortSourceGPIOK ((uint8_t)0x0A)
1 m) K. O. W# ]' A; |& e - & K# A( j8 |! M) n
- #define IS_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == EXTI_PortSourceGPIOA) || \
) G" j' `+ Z1 k* }; r" W0 U/ Q- y - ((PORTSOURCE) == EXTI_PortSourceGPIOB) || \
- s; |( a6 |+ l/ K9 |) e - ((PORTSOURCE) == EXTI_PortSourceGPIOC) || \# O& v& b9 Y" F6 U: a
- ((PORTSOURCE) == EXTI_PortSourceGPIOD) || \- R9 D& c; ~$ @' Z4 P4 h) l9 e
- ((PORTSOURCE) == EXTI_PortSourceGPIOE) || \8 w) K3 R9 d+ w. g$ p$ F+ G
- ((PORTSOURCE) == EXTI_PortSourceGPIOF) || \
( |* i3 L9 P& F - ((PORTSOURCE) == EXTI_PortSourceGPIOG) || \
) G! ]5 a7 g" `0 c: z# d7 y8 h - ((PORTSOURCE) == EXTI_PortSourceGPIOH) || \4 j. u" H0 g1 i8 F, ]/ q
- ((PORTSOURCE) == EXTI_PortSourceGPIOI) || \4 {, |/ ]9 H0 t" v! f* W6 I0 `
- ((PORTSOURCE) == EXTI_PortSourceGPIOJ) || \
: ?4 x; e6 ?. C5 B( f - ((PORTSOURCE) == EXTI_PortSourceGPIOK))
$ C2 V! v9 z; l9 H: v: B" s& @
复制代码 " }# X8 w8 R5 N2 E
SYSCFG_EXTI_Pin_Sources( k+ }% t" E0 H: g
; T" W l3 ~# i- /** @defgroup SYSCFG_EXTI_Pin_Sources , _: F* B' R1 H! K/ c9 z P
- * @{
2 h$ }* A% G$ ~& ^+ f2 ]9 M - */
3 T0 Y6 Q9 J3 h& A0 }1 [ - #define EXTI_PinSource0 ((uint8_t)0x00)
' t- {0 A! e }" y! o. e - #define EXTI_PinSource1 ((uint8_t)0x01)
5 [; L3 C9 E: `+ L E - #define EXTI_PinSource2 ((uint8_t)0x02)& U% j1 {; ^+ T" y: V( g- y
- #define EXTI_PinSource3 ((uint8_t)0x03)2 i0 F; ~4 K* y0 Q
- #define EXTI_PinSource4 ((uint8_t)0x04)' r( I$ Z' ~; O6 z f H: z, h
- #define EXTI_PinSource5 ((uint8_t)0x05)
) T4 r$ k1 V7 h/ t0 l* K+ T( Z - #define EXTI_PinSource6 ((uint8_t)0x06) `( u& M3 n I* r# Y" Q+ d
- #define EXTI_PinSource7 ((uint8_t)0x07)9 d: L4 \6 K# l; N& j
- #define EXTI_PinSource8 ((uint8_t)0x08)
5 i$ ]8 r/ F# W! l - #define EXTI_PinSource9 ((uint8_t)0x09)" j" e6 }; K: R
- #define EXTI_PinSource10 ((uint8_t)0x0A). T5 q9 g1 f b. y, T
- #define EXTI_PinSource11 ((uint8_t)0x0B)7 O; v! F% P+ F) \* b3 Q7 U
- #define EXTI_PinSource12 ((uint8_t)0x0C)! E9 z- O3 |2 C/ e
- #define EXTI_PinSource13 ((uint8_t)0x0D)
, |2 h& a9 O0 x5 ] - #define EXTI_PinSource14 ((uint8_t)0x0E)
7 A, i' O# A \3 u# g* o( R3 e3 v; x7 o - #define EXTI_PinSource15 ((uint8_t)0x0F)/ b% t# z* h) L7 |
- #define IS_EXTI_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == EXTI_PinSource0) || \
9 \ k3 o s1 t/ {8 ` - ((PINSOURCE) == EXTI_PinSource1) || \; y- C# p+ S. J% M/ ?' E0 N' z+ R
- ((PINSOURCE) == EXTI_PinSource2) || \
1 M( E ]. J5 ]9 D2 {( @; ~ - ((PINSOURCE) == EXTI_PinSource3) || \
: y/ W+ f7 G, c" a& u4 f - ((PINSOURCE) == EXTI_PinSource4) || \
+ |1 b2 X7 n' W7 Y9 D* E$ Q - ((PINSOURCE) == EXTI_PinSource5) || \: z; j, Y; V3 ]4 u1 z, ]+ n, @1 {
- ((PINSOURCE) == EXTI_PinSource6) || \
7 u1 ~" X" R! f3 X0 L - ((PINSOURCE) == EXTI_PinSource7) || \
$ y. t: T, ^. D, `7 i0 ? - ((PINSOURCE) == EXTI_PinSource8) || \
4 C0 n2 z; r) G- }5 |' [* i' ~& W - ((PINSOURCE) == EXTI_PinSource9) || \
3 [+ Q) w+ O* e* ^* E6 P - ((PINSOURCE) == EXTI_PinSource10) || \* `; Z1 K( h5 Q4 z+ v) y+ m: b0 s
- ((PINSOURCE) == EXTI_PinSource11) || \7 }6 ^3 u8 \! C' r% y
- ((PINSOURCE) == EXTI_PinSource12) || \
0 e# @5 X, s" F% ?' i3 y1 | - ((PINSOURCE) == EXTI_PinSource13) || \( E. e( r0 u3 V1 H; Q- s( I; k- D0 s
- ((PINSOURCE) == EXTI_PinSource14) || \ B' p4 z& {/ S- h$ Y% d3 V
- ((PINSOURCE) == EXTI_PinSource15))! ~! Y* A" j ~2 z" a9 \/ _: k
复制代码
8 v' U5 \. Q( u- S+ B- k$ ^( V# B9 MSYSCFG_Memory_Remap_Config
" ?6 _! ?& B; X* v3 P- ?
5 E" }( { x8 w$ H- /** @defgroup SYSCFG_Memory_Remap_Config 0 y5 f/ b) x% h0 |4 I
- * @{$ f$ |3 S/ H% n4 i# [' F
- */
( m) }$ c* Q) T# ^* j2 \ - #define SYSCFG_MemoryRemap_Flash ((uint8_t)0x00)1 T9 ?9 ~! `8 X1 x* j" N, G
- #define SYSCFG_MemoryRemap_SystemFlash ((uint8_t)0x01)
2 O, R+ X, G$ G* `9 u V - #define SYSCFG_MemoryRemap_SRAM ((uint8_t)0x03)
, L1 m: q% Q0 F* ^) P8 X& B - #define SYSCFG_MemoryRemap_SDRAM ((uint8_t)0x04)
复制代码 $ z2 w b" ?: D2 B
SYSCFG_ETHERNET_Media_Interface
. m. W3 c$ \) L: e2 Q3 @7 @
7 X5 L. m- @9 `6 W: P) V' z* B- 7 x% [% u. ?' G- a- F
- /** @defgroup SYSCFG_ETHERNET_Media_Interface - d) Y+ X# K/ `4 R7 d; M
- * @{
# _9 @8 Z, L8 e' w - */ - y9 Z4 b$ k, g/ h: w0 S T) n3 U
- #define SYSCFG_ETH_MediaInterface_MII ((uint32_t)0x00000000)
2 @$ ~3 t5 |% A9 `0 @# p& J2 ] - #define SYSCFG_ETH_MediaInterface_RMII ((uint32_t)0x00000001)* G" p6 X, ~8 T6 I% l$ u
- $ h( m0 X# M$ [' q( F* K2 |0 f
- #define IS_SYSCFG_ETH_MEDIA_INTERFACE(INTERFACE) (((INTERFACE) == SYSCFG_ETH_MediaInterface_MII) || \8 x( }0 |& Q# P) s
- ((INTERFACE) == SYSCFG_ETH_MediaInterface_RMII))
复制代码 & f; Z/ K5 [) E. Q. y. l2 y; E
03. 相关函数; q$ k& H7 z' q" l/ e% n) g1 H
- /* Exported macro ------------------------------------------------------------*/, S/ J: ^6 _; k, @( K, B5 r
- /* Exported functions --------------------------------------------------------*/ : H) F! q6 L) C
0 {% a( h2 w- \% J- void SYSCFG_DeInit(void);3 Y0 c4 h7 Z! S0 Y2 S3 R+ |% i
- void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap);, r, r1 Q# N! t2 H! w
- void SYSCFG_MemorySwappingBank(FunctionalState NewState);; i, {! `; R6 m: [1 w7 D* @
- void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex);
6 \0 h n+ w" V! [ - void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface);
9 K2 T6 ^: i$ o% E7 @ - void SYSCFG_CompensationCellCmd(FunctionalState NewState);
' C9 K. [! y/ o - FlagStatus SYSCFG_GetCompensationCellStatus(void);
% z4 C6 u- A) P' m7 K. C - 8 P% k/ m+ D" S" e/ u4 c$ L. W
- #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx)3 n# N" B9 u( g3 r0 \
- void SYSCFG_BreakConfig(uint32_t SYSCFG_Break);
: H+ z1 u% L {# S - #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx */( H( c0 m8 m, d2 O3 S4 Y
. K# V' M9 v5 `
# d3 `' l) |; l$ |0 P- #if defined(STM32F413_423xx)
9 ?( X7 @1 z5 V& T. e - void DFSDM_BitstreamClock_SourceSelection(uint32_t source);
3 J! e* S( L! Q8 F% m- r - void DFSDM_DisableDelayClock(uint32_t MCHDLY);
, d1 u0 f- `4 B6 Y, K- M( L - void DFSDM_EnableDelayClock(uint32_t MCHDLY);, Y* R }8 | ]
- void DFSDM_ClockIn_SourceSelection(uint32_t source);
5 s$ B2 J7 {! v* P/ i" \* S - void DFSDM_ClockOut_SourceSelection(uint32_t source);
, b; T+ q1 b1 I2 l - void DFSDM_DataIn0_SourceSelection(uint32_t source);7 m% W- @' Q7 T4 }
- void DFSDM_DataIn2_SourceSelection(uint32_t source);
6 C a9 l9 `# Q; H - void DFSDM_DataIn4_SourceSelection(uint32_t source);( m$ m0 W# [6 H; ?9 W, X( p
- void DFSDM_DataIn6_SourceSelection(uint32_t source);
8 F# J( D/ j' N: s9 |) M$ A, x$ Y - void DFSDM1_BitStreamClk_Config(uint32_t source);# B, M) l0 {7 _+ T6 d, R' e
- void DFSDM2_BitStreamClk_Config(uint32_t source);6 Q" f" ]. x/ {% X. s) f U
- #endif /* STM32F413_423xx */
复制代码
+ q2 i1 G) z; i H' N$ {: ~6 I04. 结构体封装9 ~6 a* Q" P& ^
系统配置控制器结构体封装" u2 F1 x$ X: L
$ Q- D* u/ t+ c& X7 w: y. j& i- /**
, y( M& e! B6 Q E& \% W( c$ Z" f1 N - * @brief System configuration controller
; {& H% o1 ]6 g; H' B% k7 C - */$ f5 k& X& B/ d+ t: T' V
- 0 w, s& V( l2 N# t
- typedef struct H$ N1 \; [ C! G. `4 |5 h# q
- {
9 Y4 s3 C* [" ?# f' K - __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register,
; U/ k0 Y. T O - Address offset: 0x00 */! B" E# X4 g3 ~& }: K+ `
- __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register,+ X) S7 B+ w- q. k. Y8 J) q
- Address offset: 0x04 */' x. D/ F, y0 q( f) ], \/ h
- __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers,! c7 H( J* b. i
- Address offset: 0x08-0x14 */
; J! |! C0 u* f! V - #if defined (STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx)
; `! i; o w' Z+ W - uint32_t RESERVED; /*!< Reserved, 0x18 */
8 F& x& }( a+ p# |9 U - __IO uint32_t CFGR2; /*!< Reserved, 0x1C */3 R% @) u7 o6 ]$ j
- __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register,- @* R( A: T0 @0 p8 X" q
- Address offset: 0x20 */
0 u3 n4 s8 _8 s - uint32_t RESERVED1[2]; /*!< Reserved, 0x24-0x28 */
- k. z7 b+ X, G1 \: H( t# ?' K9 r( ` - __IO uint32_t CFGR; /*!< SYSCFG Configuration register,; J q' I# v: R6 Z& ~5 K- n3 l
- Address offset: 0x2C */( |8 ~" u$ E$ Z1 p# N; I/ P. w
- #else /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx ||. M- U5 a6 C9 c( g' \8 w1 U4 E) g; J
- STM32F401xx || STM32F411xE || STM32F446xx || STM32F469_479xx */
$ T+ u0 W2 t, T" G - uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */
- {) V; Z5 l7 o8 Z - __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register," K, G f$ g7 X& T
- Address offset: 0x20 */2 g, M. _2 {# v' M, ?/ s% e
- #endif /* STM32F410xx || defined(STM32F412xG) || defined(STM32F413_423xx) */
, m" [+ z; @, X& v4 `5 C - #if defined(STM32F413_423xx)
6 C4 J7 B- I* H% | - __IO uint32_t MCHDLYCR; /*!< SYSCFG multi-channel delay register,
- @& b7 K7 M2 z; o L - Address offset: 0x30 */
3 C1 s/ `8 G C2 P1 o - #endif /* STM32F413_423xx */5 }+ v, W; k1 \# y
- } SYSCFG_TypeDef;
复制代码
: o/ e$ E5 r, ^6 V+ U) f* F1 C
5 _ d; b& x% O, O1 r' A* Z; R
$ S3 U; l% a6 ^4 M9 d0 ~3 m/ l1 x+ B
# l) H N6 H$ o |