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

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

[复制链接]
scotthsl 发布时间:2014-4-21 10:03
 参考正点原子F103系列的代码,对F407进行了适配,同时代码也兼容F1系列的3 ^0 Q; j- c( r, J( ]  Q. }
 
# i8 w# h- b: X9 q  ?; r$ `代码在F4Discovery上验证通过,使用位绑定别名区来操作板子上的四个用户LED  _& S" l2 ?" E" D* {6 E- H) t, d
 
# b9 h3 \* G0 t1 P. K5 d; B. s " W( y* _+ p% i" ?& \( J
// Header        :! h4 Q$ w) E2 z
// File Name:bit_banding.h
* h2 x8 L9 L7 n$ S9 z// Author        :***
; G$ d" a0 U! X$ G. q1 P/ N+ \' i// Date                :2014/04/04
- g- w0 m' W; l" m// Explain        :        - C8 I) K) B7 e9 i4 ]3 x
#ifndef __BIT_BANDING_H__
- l5 Z# B0 {3 e1 e' Q7 t" g8 s# X' g1 c#define __BIT_BANDING_H__5 Y# F4 `9 r8 K. V  r3 E6 U( m
 ; G) d" C. {; R4 H
 
5 G& ]+ [6 c4 T//M4内核的GPIO寄存器基地址等. v) i( W5 [7 F" v
#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) || defined (STM32F40XX) || defined (STM32F427X)' E2 T5 Y' `0 d- \- i' U
//这些宏定义在使用最新库函数时,都会有定义2 ~% t# F2 a" f8 J' J; N2 R+ o4 E
 
' U  y5 i0 m9 Y, O+ n#include "stm32f4xx.h"
4 t# K9 b( v4 d9 J- k. S % h) A& a/ X3 ]; c1 h
#define GPIO_REG_ADDR_BASE                0x40020000ul
4 n% Z- D% h! A#define GPIO_REG_ADDR_OFFSET        0x400ul
; q( \7 F6 e6 g! b : T( l8 {0 L; Z/ r
#define GPIO_ODR_OFFSET                        0x14ul
5 z) }/ v" ~- U#define GPIO_IDR_OFFSET                        0x10ul) p# t& g! F: ?. ^- Q, x9 w8 c
 
: p$ G) X/ @( ]/ f( `  }) z#endif
; Q+ g( N2 `/ D2 t 
% ~8 o5 d+ ~2 @# G//M3内核的GPIO寄存器基地址
4 W: b, E: f0 u#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) 
$ g; O3 M" w& J0 K 
# j, z0 m/ w: }6 \' j4 \) a. ~#include "stm32f10x.h"
' |- \  n0 ?- a* x7 d8 B8 _ 
6 G" P" L# i0 K% T& O#define GPIO_REG_ADDR_BASE                0x40010800ul
' w5 `$ Q+ {$ v/ H1 `8 q% F#define GPIO_REG_ADDR_OFFSET        0x400ul; H1 b' `; T$ Y  I% m
 
4 R0 S  k( [2 o) c#define GPIO_ODR_OFFSET                        0x0Cul- v6 \/ ?. l* h3 }7 N6 T& s! O
#define GPIO_IDR_OFFSET                        0x08ul/ I5 x6 F: f8 B' ]  y
 
4 |$ z% N/ ^8 n! R2 j; y: J#endif
& C+ m1 b! Q* c 
1 ]: O& j; `. P4 O' B8 { 9 F/ n0 f; t1 P- D. \' M9 s. \5 }
//别名区的基地址的末地址,在M3和M4中是一样的,位地址的计算公式也是一样的- y% W6 W: b4 \
 & T6 L/ \/ {/ u  D
//外设别名区的基地址  `5 O, }2 k) Y- O7 [
#define BIT_BAND_ALIAS_PERIPHERAL_BASE        0x42000000ul0 R. I+ q! n/ c& g5 c8 T
 
$ a. L4 v9 i. U& {0 v: |5 T#define BIT_BAND_ALIAS_PERIPHERAL_END        0x43FFFFFFul
; w" R6 l% M7 r  k3 J . {" c* C4 ?- A
//SRAM别名区基地址! y" d! z% g) s# r5 H
#define BIT_BAND_ALIAS_SRAM_BASE                0x22000000ul
" }* A3 p  q9 X3 g7 _5 E) p//
9 {- S" `0 ^4 h  d" [; b#define BIT_BAND_ALIAS_SRAM_END                        0x23FFFFFFul
5 g, E6 K) O% `- Y- ^  o 6 V- K9 o3 I- t5 `2 K2 i
 , _2 S1 E# F' [3 S3 r" F/ H# V
//在bitband区中 位地址的计算公式
5 X( h. ?1 H0 S#define BIT_WORD_ADDR(ByteAddr, BitNumber)        ((ByteAddr&0xF0000000) + 0x2000000 + (ByteAddr&0x000FFFFF)*32 + (BitNumber&0x0000000F)*4)( \6 z$ e7 ]8 V0 W" o0 ?! [& s
 7 b' H( D# c/ W0 K$ s' A4 I
 3 Z' g; r: t' g6 U+ ]
//将地址转换成指针,这样才能读写地址中的值9 `% s( c4 P, H. h" u7 u# z
#define CONVERT_TO_PTR(BitWordAddr)                ( *( (volatile unsigned long *)BitWordAddr ) )+ A! }1 V/ [8 k$ |" m
 + a  B) l; t8 h2 y% D2 d
# \; p' r: K, P1 N+ W$ l- A
//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 手机版