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

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

[复制链接]
scotthsl 发布时间:2014-4-21 10:03
 参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的1 ?# {: Q6 w: H/ L6 Y  q5 h. |
 
' [* n1 `+ f$ D4 o% q9 c代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED7 ?& U5 o+ Y9 ]5 ~" l$ I) l
 
8 t1 c% ]6 ~! o$ D 
: _, B7 T# f. \' f// Header        :
- p% I$ I( _: v// File Name:bit_banding.h" {+ l+ c4 a2 b4 I
// Author        :***8 [, ^$ K3 x( Z0 l5 @
// Date                :2014/04/04
- ?4 f/ o! D* [5 J6 V( X// 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)
4 a8 e: {% e" [) o- `8 H' Z) I+ U//这些宏定义在使用最新库函数时,都会有定义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
7 j1 N& h3 S% o#define GPIO_REG_ADDR_OFFSET        0x400ul( t8 A9 y4 d( V) g* h9 u5 }
 
. R- ^8 Z* o2 u: D% I( z#define GPIO_ODR_OFFSET                        0x14ul
4 ~4 _; b. _, U#define GPIO_IDR_OFFSET                        0x10ul( G0 e2 A* \) ]! w0 L* {" `- k$ f
 ! L( ?9 D! ^4 ^
#endif8 }8 m" _$ D+ y' O* n0 d
 
7 L9 ^  G9 N2 _" d' u/ [//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& }
 
1 X( u$ D3 C; a8 }0 H- {+ s#define GPIO_REG_ADDR_BASE                0x40010800ul, Z0 [1 f* B; f: P" E  @" a/ c8 u
#define GPIO_REG_ADDR_OFFSET        0x400ul
) X% W* v- p. }6 i; q' d 1 F! ~" {) A! b; V# V0 {+ }
#define GPIO_ODR_OFFSET                        0x0Cul" Z# k% b* z2 o) y9 p
#define GPIO_IDR_OFFSET                        0x08ul
  {  d" W, _4 X2 r. M5 B( a1 g4 P 
; B7 q( @9 c( o6 `#endif! Z, G9 y2 k% n" P% }. {+ C+ E
 
1 K; N/ u0 W# \3 g 
1 f0 R" |9 ^+ S' G# \' c# U+ ^//别名区的基地址的末地址,在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
3 f' U9 ?8 M$ S- }# X) a& U # 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别名区基地址
) d7 ?, S, r- `/ ^. k1 T0 @#define BIT_BAND_ALIAS_SRAM_BASE                0x22000000ul6 d; ]' h, u% b" x: l
//
! E9 Z) G- D2 c2 y% y#define BIT_BAND_ALIAS_SRAM_END                        0x23FFFFFFul3 ^; w! D4 o5 Z3 J9 o- k& ^
 
8 P9 D' p8 N. G5 I8 k2 p; w   _7 ~4 ]9 ]- @8 ], |. I: i/ |7 ?
//在bitband区中 位地址的计算公式
, }6 u8 M4 M: i2 \( @#define BIT_WORD_ADDR(ByteAddr, BitNumber)        ((ByteAddr&0xF0000000) + 0x2000000 + (ByteAddr&0x000FFFFF)*32 + (BitNumber&0x0000000F)*4)' d. e9 A4 j) \, M
 
% c  e: i, h- Y- E0 g4 m* m " y  [4 e$ b# ?) w  @
//将地址转换成指针,这样才能读写地址中的值
8 D8 Z2 f6 j3 d6 h+ [; M#define CONVERT_TO_PTR(BitWordAddr)                ( *( (volatile unsigned long *)BitWordAddr ) )
) R5 k2 c0 c) \; x$ A( s( l7 t8 h  f 
1 W) }) w; e: w6 I" I3 ]4 Q) X0 ~2 L: s6 F$ @" ]1 y
//BitNumber

STM32F40xTemplate.rar

下载

686.02 KB, 下载次数: 18

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版