
参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的( K% }) \" ]! Q- o2 J5 b 代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED 6 [- {: U4 A5 j+ R # W) k1 ]. F6 F$ P' h" Y // Header : // File Name:bit_banding.h // Author :***& U q1 {3 R4 i( r // Date :2014/04/04 // Explain : #ifndef __BIT_BANDING_H__ #define __BIT_BANDING_H__. [( q& |* Z1 Q% a6 c ) V2 ?3 a7 X4 P8 ~ //M4内核的GPIO寄存器基地址等1 S' K. L- Z- J #if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F40XX) || defined (STM32F427X)* x7 |- c! r1 Y4 x7 p0 f$ P& e //这些宏定义在使用最新库函数时,都会有定义" p, o; k, [1 [4 D& V: @ #include "stm32f4xx.h" #define GPIO_REG_ADDR_BASE 0x40020000ul) d7 N3 W2 s5 @3 m- u! S/ H #define GPIO_REG_ADDR_OFFSET 0x400ul ( \+ D! I8 U! @1 I! x. A# n; b! r. F #define GPIO_ODR_OFFSET 0x14ul #define GPIO_IDR_OFFSET 0x10ul * Z0 _7 r; C9 D2 T; c+ f9 O9 g #endif 8 a9 E. M$ V0 k. n5 A4 V //M3内核的GPIO寄存器基地址( ]5 R: W4 O$ k4 K) \/ [; c #if defined (STM32F10X_LD) || defined (STM32F10X_LD_VL) || defined (STM32F10X_MD) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD) || defined (STM32F10X_HD_VL) || defined (STM32F10X_XL) || defined (STM32F10X_CL) 2 Q0 P# p1 U/ _2 K #include "stm32f10x.h" ! _' N; I3 @: z: e #define GPIO_REG_ADDR_BASE 0x40010800ul #define GPIO_REG_ADDR_OFFSET 0x400ul: p" C0 t! Z! O7 c/ l: \" C 4 \6 W9 M6 M/ l* }7 h, S #define GPIO_ODR_OFFSET 0x0Cul #define GPIO_IDR_OFFSET 0x08ul) j7 U4 O% H2 C+ ]- F& Q 3 y% C& N: @- ?1 `$ v n2 L, j #endif% }5 ~ B* |& T2 q$ {9 j 2 d) @9 r) y& ?. ?" a- \ //别名区的基地址的末地址,在M3和M4中是一样的,位地址的计算公式也是一样的) T- V: A0 u: D1 x1 Z) q6 W$ ?9 z 9 B( b o3 t* d //外设别名区的基地址 #define BIT_BAND_ALIAS_PERIPHERAL_BASE 0x42000000ul - d+ I, R. w9 D& [3 _! E2 b- K #define BIT_BAND_ALIAS_PERIPHERAL_END 0x43FFFFFFul //SRAM别名区基地址 #define BIT_BAND_ALIAS_SRAM_BASE 0x22000000ul5 M5 }6 X+ V4 }3 S' ?; R% E // #define BIT_BAND_ALIAS_SRAM_END 0x23FFFFFFul- `2 z: q* z3 q5 _. f7 f# x) g3 G / ~/ T9 V3 p# d3 l - q. k& \, x! I" ?9 X, D0 W //在bitband区中 位地址的计算公式& ~/ Q8 ^# U; H, h; z/ R/ [& A& t #define BIT_WORD_ADDR(ByteAddr, BitNumber) ((ByteAddr&0xF0000000) + 0x2000000 + (ByteAddr&0x000FFFFF)*32 + (BitNumber&0x0000000F)*4)) O1 V% p! v( R5 d H * F, D* X4 r) V7 m. Y //将地址转换成指针,这样才能读写地址中的值7 Q& h* |2 v6 f/ P9 {3 P #define CONVERT_TO_PTR(BitWordAddr) ( *( (volatile unsigned long *)BitWordAddr ) )0 g* b; V4 T1 B //BitNumber |
STM32F40xTemplate.rar
下载686.02 KB, 下载次数: 18