你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MCU实战经验】STM32F407使用位绑定区操作IO引脚

[复制链接]
scotthsl 发布时间:2014-4-21 10:03
 参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的# I- n( l2 S1 ^  K; t' \8 l
 
- W: `8 Q' M0 Y4 ]  i. R代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED8 x, z, o; b5 L  h8 _
 
# h9 ?. M; a2 k7 N) l' e) U + f. i7 `6 t; X# C- x. S
// Header        :, E' y+ T( i7 |
// File Name:bit_banding.h
" u& F  T7 g( ]" P9 A// Author        :***
( T" S: k' A* u8 I- B// Date                :2014/04/04) ~$ c$ T( q2 |- L
// Explain        :       
0 C& |, C& B" M8 |% J: q#ifndef __BIT_BANDING_H__0 T" a; ]# Y2 J1 J# d7 P2 P
#define __BIT_BANDING_H__
6 V3 i+ }0 {, D9 Y; @% X 
" A1 F% c% a5 ^3 y5 ]( S1 O 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
 
# o1 q, I9 V4 a+ j3 \#include "stm32f4xx.h"
' j& @% |2 Q; P( C; e2 s8 L 
: T+ _  [5 T' ]& B! M6 Q! k7 S5 X#define GPIO_REG_ADDR_BASE                0x40020000ul
" V6 m# j/ v) h, l3 O#define GPIO_REG_ADDR_OFFSET        0x400ul
7 I% E) X; s3 y* @ 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
 
* U1 C( L& A* b, X( f) B+ a9 Y9 F#endif
! R$ s8 V/ F# P0 Y6 | & `2 U' Q7 V% C
//M3内核的GPIO寄存器基地址
, f- ]/ L5 c$ H3 d) }9 O* z#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
 
, v4 t! `: o, \% Z#include "stm32f10x.h"
& N2 n$ k: p; l4 O6 a0 A, E 
$ r2 ?3 g7 j( E8 i% u, O* i! ]/ U, z#define GPIO_REG_ADDR_BASE                0x40010800ul
$ J! D# R8 E8 J#define GPIO_REG_ADDR_OFFSET        0x400ul
) i- t0 \2 l# d9 x% ^4 t $ ?) }2 j9 `( U; w' b9 u; i
#define GPIO_ODR_OFFSET                        0x0Cul
- b# k3 U) M- i1 y" A- g' {#define GPIO_IDR_OFFSET                        0x08ul
+ F3 f3 g, N- ^* n1 V3 ^ 
' O# ~4 R( Y* D- W- X#endif) O+ t1 J, C  b
 ! K+ F3 p+ }8 d7 F
 
! a. m0 F5 U7 o! q, Q' K: N//别名区的基地址的末地址,在M3和M4中是一样的,位地址的计算公式也是一样的: b5 U. E6 J: Q4 @" {& ^
 
7 l$ k% A+ w  n2 _4 [//外设别名区的基地址
+ K/ u! R0 \2 j5 M+ P+ H#define BIT_BAND_ALIAS_PERIPHERAL_BASE        0x42000000ul' d  d( |. B+ V$ p& O
 
0 @- i- w9 _$ K9 A9 S! E#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, ?
 
1 Q9 l8 g- ^- y# _: I/ a6 c: W 3 |8 e+ G# r# S- t
//在bitband区中 位地址的计算公式
( r: }& n2 a" O4 u$ `/ c* c#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
 
3 J3 i1 I9 l2 ~1 H% s' }: T( A. |//将地址转换成指针,这样才能读写地址中的值
2 @& L  k4 ~1 t' l& d#define CONVERT_TO_PTR(BitWordAddr)                ( *( (volatile unsigned long *)BitWordAddr ) ). g( c6 s9 \1 Z' t& a0 y. E
 
3 f7 r+ g- {9 G5 w3 [9 F
8 L7 Q  z. A3 u# J: Z% z3 j/ I//BitNumber

STM32F40xTemplate.rar

下载

686.02 KB, 下载次数: 18

收藏 评论0 发布时间:2014-4-21 10:03

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版