
参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的3 ^0 Q; j- c( r, J( ] Q. } 代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED _& S" l2 ?" E" D* {6 E- H) t, d " W( y* _+ p% i" ?& \( J // Header :! h4 Q$ w) E2 z // File Name:bit_banding.h // Author :*** // Date :2014/04/04 // Explain : - C8 I) K) B7 e9 i4 ]3 x #ifndef __BIT_BANDING_H__ #define __BIT_BANDING_H__5 Y# F4 `9 r8 K. V r3 E6 U( m ; G) d" C. {; R4 H //M4内核的GPIO寄存器基地址等. v) i( W5 [7 F" v #if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F40XX) || defined (STM32F427X)' E2 T5 Y' `0 d- \- i' U //这些宏定义在使用最新库函数时,都会有定义2 ~% t# F2 a" f8 J' J; N2 R+ o4 E #include "stm32f4xx.h" % h) A& a/ X3 ]; c1 h #define GPIO_REG_ADDR_BASE 0x40020000ul #define GPIO_REG_ADDR_OFFSET 0x400ul : T( l8 {0 L; Z/ r #define GPIO_ODR_OFFSET 0x14ul #define GPIO_IDR_OFFSET 0x10ul) p# t& g! F: ?. ^- Q, x9 w8 c #endif //M3内核的GPIO寄存器基地址 #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) #include "stm32f10x.h" #define GPIO_REG_ADDR_BASE 0x40010800ul #define GPIO_REG_ADDR_OFFSET 0x400ul; H1 b' `; T$ Y I% m #define GPIO_ODR_OFFSET 0x0Cul- v6 \/ ?. l* h3 }7 N6 T& s! O #define GPIO_IDR_OFFSET 0x08ul/ I5 x6 F: f8 B' ] y #endif 9 F/ n0 f; t1 P- D. \' M9 s. \5 } //别名区的基地址的末地址,在M3和M4中是一样的,位地址的计算公式也是一样的- y% W6 W: b4 \ & T6 L/ \/ {/ u D //外设别名区的基地址 `5 O, }2 k) Y- O7 [ #define BIT_BAND_ALIAS_PERIPHERAL_BASE 0x42000000ul0 R. I+ q! n/ c& g5 c8 T #define BIT_BAND_ALIAS_PERIPHERAL_END 0x43FFFFFFul . {" c* C4 ?- A //SRAM别名区基地址! y" d! z% g) s# r5 H #define BIT_BAND_ALIAS_SRAM_BASE 0x22000000ul // #define BIT_BAND_ALIAS_SRAM_END 0x23FFFFFFul 6 V- K9 o3 I- t5 `2 K2 i , _2 S1 E# F' [3 S3 r" F/ H# V //在bitband区中 位地址的计算公式 #define BIT_WORD_ADDR(ByteAddr, BitNumber) ((ByteAddr&0xF0000000) + 0x2000000 + (ByteAddr&0x000FFFFF)*32 + (BitNumber&0x0000000F)*4)( \6 z$ e7 ]8 V0 W" o0 ?! [& s 7 b' H( D# c/ W0 K$ s' A4 I 3 Z' g; r: t' g6 U+ ] //将地址转换成指针,这样才能读写地址中的值9 `% s( c4 P, H. h" u7 u# z #define CONVERT_TO_PTR(BitWordAddr) ( *( (volatile unsigned long *)BitWordAddr ) )+ A! }1 V/ [8 k$ |" m + a B) l; t8 h2 y% D2 d # \; p' r: K, P1 N+ W$ l- A //BitNumber |
STM32F40xTemplate.rar
下载686.02 KB, 下载次数: 18