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

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

[复制链接]
scotthsl 发布时间:2014-4-21 10:03
 参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的( K% }) \" ]! Q- o2 J5 b
 
% E; f4 m; T" H- Y0 r代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED
7 I6 [) w! c" v" O' p8 W1 S 6 [- {: U4 A5 j+ R
 # W) k1 ]. F6 F$ P' h" Y
// Header        :
" H3 ~/ {) c* y! F9 e// File Name:bit_banding.h
8 ^* [+ H5 P% V8 m# u" [% v) n// Author        :***& U  q1 {3 R4 i( r
// Date                :2014/04/04
- p* A/ c8 ?& D5 ]& v  z// Explain        :       
! s3 U( o& Q9 O: W. k# S#ifndef __BIT_BANDING_H__
% u* B5 r0 ^1 _: g/ {* ^#define __BIT_BANDING_H__. [( q& |* Z1 Q% a6 c
 ) V2 ?3 a7 X4 P8 ~
 
, _, p' V, J3 m0 @+ O4 F9 f1 g//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: @
 
7 H+ [+ F# ?6 x  L#include "stm32f4xx.h"
, Y, h/ L/ X" b* m 
  H9 H0 F& J& R#define GPIO_REG_ADDR_BASE                0x40020000ul) d7 N3 W2 s5 @3 m- u! S/ H
#define GPIO_REG_ADDR_OFFSET        0x400ul
$ d( G* C, F5 Z7 f/ o" `- D( ` ( \+ D! I8 U! @1 I! x. A# n; b! r. F
#define GPIO_ODR_OFFSET                        0x14ul
% @( `2 i7 l, ]. c#define GPIO_IDR_OFFSET                        0x10ul
9 U1 U" T, W4 I! `# \' K4 s6 G * Z0 _7 r; C9 D2 T; c+ f9 O9 g
#endif
9 ]8 Q) t* [2 U% w6 | 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
 
" K* A! y" p) T2 m  H% T#include "stm32f10x.h"
. L1 ^4 q" H- a2 d7 a" k& p4 j ! _' N; I3 @: z: e
#define GPIO_REG_ADDR_BASE                0x40010800ul
3 @/ r: I* t7 [5 s* S& [% l#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
; ^2 I: r1 {7 `3 n2 [#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- \
 
( g% I* X7 Q8 ?3 Q0 t4 ]//别名区的基地址的末地址,在M3和M4中是一样的,位地址的计算公式也是一样的) T- V: A0 u: D1 x1 Z) q6 W$ ?9 z
 9 B( b  o3 t* d
//外设别名区的基地址
& y7 P6 I/ u! U% D* c5 N#define BIT_BAND_ALIAS_PERIPHERAL_BASE        0x42000000ul
6 e2 k) B5 U. L  g - d+ I, R. w9 D& [3 _! E2 b- K
#define BIT_BAND_ALIAS_PERIPHERAL_END        0x43FFFFFFul
: B2 k0 W# \- M' ?. l 
+ b) `! M7 D  c5 e//SRAM别名区基地址
2 j7 C! s$ y) ^# o* [8 H#define BIT_BAND_ALIAS_SRAM_BASE                0x22000000ul5 M5 }6 X+ V4 }3 S' ?; R% E
//
  A. A- C- D8 D& t#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
 
, C4 g& {, A, t' v$ @0 [* } * 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
 
1 I& H1 f/ \% W( [4 m: h* b
) {6 N, c' z+ J' ^2 O//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 手机版