
参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的# I- n( l2 S1 ^ K; t' \8 l 代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED8 x, z, o; b5 L h8 _ + f. i7 `6 t; X# C- x. S // Header :, E' y+ T( i7 | // File Name:bit_banding.h // Author :*** // Date :2014/04/04) ~$ c$ T( q2 |- L // Explain : #ifndef __BIT_BANDING_H__0 T" a; ]# Y2 J1 J# d7 P2 P #define __BIT_BANDING_H__ 0 h# W) F8 @9 D. h$ \& y6 x1 K1 | //M4内核的GPIO寄存器基地址等) x9 R/ o0 |& Q. w+ r #if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F40XX) || defined (STM32F427X)) Z, ?7 P0 `+ W8 g //这些宏定义在使用最新库函数时,都会有定义4 C# P0 D; r0 L5 J$ B) P; ?; Q+ L. p #include "stm32f4xx.h" #define GPIO_REG_ADDR_BASE 0x40020000ul #define GPIO_REG_ADDR_OFFSET 0x400ul 6 q8 `/ T& ~6 @ W8 F #define GPIO_ODR_OFFSET 0x14ul6 _2 ?2 p+ z9 n) q, } O #define GPIO_IDR_OFFSET 0x10ul0 Y7 C$ l3 |# ~- B$ c #endif & `2 U' Q7 V% C //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) + x/ y. y4 T2 Y9 B6 U$ A #include "stm32f10x.h" #define GPIO_REG_ADDR_BASE 0x40010800ul #define GPIO_REG_ADDR_OFFSET 0x400ul $ ?) }2 j9 `( U; w' b9 u; i #define GPIO_ODR_OFFSET 0x0Cul #define GPIO_IDR_OFFSET 0x08ul #endif) O+ t1 J, C b ! K+ F3 p+ }8 d7 F //别名区的基地址的末地址,在M3和M4中是一样的,位地址的计算公式也是一样的: b5 U. E6 J: Q4 @" {& ^ //外设别名区的基地址 #define BIT_BAND_ALIAS_PERIPHERAL_BASE 0x42000000ul' d d( |. B+ V$ p& O #define BIT_BAND_ALIAS_PERIPHERAL_END 0x43FFFFFFul5 N8 w. ]. |% D. \2 i* ?% a 9 ?0 j* s* I3 u2 ^- K- `) k //SRAM别名区基地址* [& r# J! I% W& R3 r# ^ #define BIT_BAND_ALIAS_SRAM_BASE 0x22000000ul7 P8 k" m0 n* e, H- e0 M; u! [; k //% v- X* }7 R: `- j #define BIT_BAND_ALIAS_SRAM_END 0x23FFFFFFul3 e( n/ b9 }1 z& o/ o, ? 3 |8 e+ G# r# S- t //在bitband区中 位地址的计算公式 #define BIT_WORD_ADDR(ByteAddr, BitNumber) ((ByteAddr&0xF0000000) + 0x2000000 + (ByteAddr&0x000FFFFF)*32 + (BitNumber&0x0000000F)*4)! i7 I, X, i7 s( f1 V ; n, r& K% u3 q* Q //将地址转换成指针,这样才能读写地址中的值 #define CONVERT_TO_PTR(BitWordAddr) ( *( (volatile unsigned long *)BitWordAddr ) ). g( c6 s9 \1 Z' t& a0 y. E //BitNumber |
STM32F40xTemplate.rar
下载686.02 KB, 下载次数: 18