|
参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的1 ?# {: Q6 w: H/ L6 Y q5 h. | 代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED7 ?& U5 o+ Y9 ]5 ~" l$ I) l // Header : // File Name:bit_banding.h" {+ l+ c4 a2 b4 I // Author :***8 [, ^$ K3 x( Z0 l5 @ // Date :2014/04/04 // Explain : " N$ h: L4 k: _4 ? #ifndef __BIT_BANDING_H__3 c; J& L; a2 ] D #define __BIT_BANDING_H__* W' O% l8 a7 |' i+ M ( [/ k) o* m3 V9 E7 _( @ 6 Y' Z$ H4 K6 x: _6 l8 o+ } //M4内核的GPIO寄存器基地址等' H% \4 z+ [' e1 c! X' H# q #if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F40XX) || defined (STM32F427X) //这些宏定义在使用最新库函数时,都会有定义1 T2 ~- k0 k n# s3 p * t K. F& ~7 S8 l. S6 F #include "stm32f4xx.h". z [$ s5 w$ p0 n 8 M6 z- d7 g) P4 @. B6 i #define GPIO_REG_ADDR_BASE 0x40020000ul #define GPIO_REG_ADDR_OFFSET 0x400ul( t8 A9 y4 d( V) g* h9 u5 } #define GPIO_ODR_OFFSET 0x14ul #define GPIO_IDR_OFFSET 0x10ul( G0 e2 A* \) ]! w0 L* {" `- k$ f ! L( ?9 D! ^4 ^ #endif8 }8 m" _$ D+ y' O* n0 d //M3内核的GPIO寄存器基地址2 Y1 W( [$ w4 m #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) . ^! ?/ S7 ^# q( n) v9 D7 }$ Y ) [$ n) T5 s6 _2 E) Y #include "stm32f10x.h"7 K7 W& ?! s) {( S+ i, G' k8 K, j+ j& } #define GPIO_REG_ADDR_BASE 0x40010800ul, Z0 [1 f* B; f: P" E @" a/ c8 u #define GPIO_REG_ADDR_OFFSET 0x400ul 1 F! ~" {) A! b; V# V0 {+ } #define GPIO_ODR_OFFSET 0x0Cul" Z# k% b* z2 o) y9 p #define GPIO_IDR_OFFSET 0x08ul #endif! Z, G9 y2 k% n" P% }. {+ C+ E //别名区的基地址的末地址,在M3和M4中是一样的,位地址的计算公式也是一样的8 S& V& f1 r* A+ n 6 W9 \' _) v3 A! D& j8 Z //外设别名区的基地址) ~$ h$ N, l; g; F/ E #define BIT_BAND_ALIAS_PERIPHERAL_BASE 0x42000000ul # a3 I- f: J. m) R8 i #define BIT_BAND_ALIAS_PERIPHERAL_END 0x43FFFFFFul6 L4 e2 c! r4 n4 y( r% T- P , S5 E' Y6 m$ i //SRAM别名区基地址 #define BIT_BAND_ALIAS_SRAM_BASE 0x22000000ul6 d; ]' h, u% b" x: l // #define BIT_BAND_ALIAS_SRAM_END 0x23FFFFFFul3 ^; w! D4 o5 Z3 J9 o- k& ^ _7 ~4 ]9 ]- @8 ], |. I: i/ |7 ? //在bitband区中 位地址的计算公式 #define BIT_WORD_ADDR(ByteAddr, BitNumber) ((ByteAddr&0xF0000000) + 0x2000000 + (ByteAddr&0x000FFFFF)*32 + (BitNumber&0x0000000F)*4)' d. e9 A4 j) \, M " y [4 e$ b# ?) w @ //将地址转换成指针,这样才能读写地址中的值 #define CONVERT_TO_PTR(BitWordAddr) ( *( (volatile unsigned long *)BitWordAddr ) ) 0 ~2 L: s6 F$ @" ]1 y //BitNumber |
STM32F40xTemplate.rar
下载686.02 KB, 下载次数: 18
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版