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

【经验分享】STM32F2位带操作

[复制链接]
STMCU小助手 发布时间:2021-12-1 21:47
手册中说:3 Q% M0 |  f* H
In the STM32F20x and STM32F21x both the peripheral registers and the SRAM are mapped to a bit-band region, so that single bit-band write and read operations are allowed.
) [0 x/ P* d( K在这两个系列中外设和SRAM都有各自映射的位带区,以实现对位的单独操作。; r8 q# c. _8 Z
The operations are only available for Cortex ® -M3 accesses, and not from other bus masters (e.g. DMA).
8 O& v( O2 v% N& |0 r使用局限于M3内核。
: _( P; F( w  T/ _8 e" A. S* PA mapping formula shows how to reference each word in the alias region to a corresponding bit in the bit-band region. The mapping formula is:
8 T/ n  ~% t( x  X2 {地址映射公式如下& A0 i1 `# i4 X) }# v! T" t7 `
                               bit_word_addr  =  bit_band_base  + ( byte_offset  x 32) + ( bit_number  × 4)- p/ }) s5 e/ m/ Q6 g5 g
where:
2 b! `* X/ W. a/ ^- M–  bit_word_addr  is the address of the word in the alias memory region that maps to the targeted bit/ n2 k7 g, m+ n! j4 q: y' ?
一位扩展成了一个字。
. U2 U+ R1 e; {5 `–  bit_band_base  is the starting address of the alias region6 I1 ~5 N* ^, l* c: K
位带基地址是对应位带的起始地址。; h1 g# k* @: P6 G. Y
–  byte_offset  is the number of the byte in the bit-band region that contains the targeted bit
' m, e! V. o7 u9 p& N" L这里的偏移值为包含操作位的寄存器偏移值。- A* W  S7 p4 `( \/ G1 g6 j
–  bit_number  is the bit position (0-7) of the targeted bit  3 }8 \! k$ s8 E, }
这里的位就是目标位。" l* D; J- z: \+ Y7 h; w* N  M/ z
! U; P) I6 z5 x' l- ^& M
位带区在 SRAM上的地址范围:0x20000000 ~ 0x200FFFFF(SRAM区中最低1MB)
- s1 t6 c2 h4 Z, P+ c. l" k& N位带识别区在SRAM上的地址范围:   0x22000000 ~ 0x220FFFFF
" W7 O& P' [" M& e. B1 _位带区在片上外设的地址范围:0x4000 0000-0x400F FFFF(片上外设区中的最低1MB),
5 |  S9 ^9 `0 S. a" Q" w位带识别区在片上外设的地址范围:0x4200 0000~0x42FF FFFF;$ H* ?4 P. O- `$ b/ e2 N2 f! j% v. z
对应关系:位带区的每个bit位的值 对应 位带识别区1个 32位的地址的内容;
; Q! p1 J' p% Z所以位带操作是:当你通过位带别名区访问这些32位的地址的内容时,就可以达到访2 |/ p, x- [0 H* S# Y9 {
问位带区对应的比特位。0 K( H/ ~9 v$ _

9 ?+ p9 s( f2 m1 a' T, x举例:
/ s7 N4 v# H6 R要给GPIO PC15做拉高拉低操作。
9 o8 o! O/ a  n  M9 l! [, J: g! L7 v首先找到操作寄存器的地址:
: J( Z* ~+ Q' e6 b! E0 i3 CGPIO为外设,故需用外设的基地址:                   PERIPH_BASE               ((uint32_t)0x40000000): R, ~3 G: `7 ~# A6 r8 h/ k
GPIOC在AH1外设上,故在之前基础上再做偏移:AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000). s9 j3 v( q% [  l) r/ l
同时需要再加上GPIOC的偏移:                         GPIOC_BASE                  (AHB1PERIPH_BASE + 0x0800)
( n' Z( }1 E6 P: b) H然后找到位设置寄存器:                                   GPIOC_BSRR                  (GPIOC_BASE + 0x18)% f; z3 b; x, y4 Z8 V5 R# m

+ [& ]) ^$ `* a4 D6 o3 b; N最终得到的地址为 :0x40020818: i. i2 _, r* |8 B1 j8 q* J( p# \
通常情况下向这个地址赋值即可实现指定位拉高拉低操作:7 {# H$ w+ [. F( Y5 m
*((volatile unsigned long *) 0x40020818) = 0x80000000  //!<拉高* l3 f+ l' Y8 l1 w
*((volatile unsigned long *) 0x40020818) = 0x00008000  //!<拉低$ b9 v! h+ W! T) ~

) Z7 w; h/ {/ c$ M2 C& f8 s但通过位带,按照公式获取位带操作地址:
8 T6 T& O; t2 f3 e- C  s1 ^9 t: ?. O/*这是拉高时寄存器地址*/
$ W+ h9 R' R5 G  s/ O AddrH =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+(15 << 2)))  
/ `2 y# t$ v' `: a9 A4 E9 S; c0 OAddrH = 1;   //!<置1就拉高 # U4 ], [% l* h  x7 v2 I
/*这是拉低时寄存器地址*/
( I- }  o; n# L8 y+ @/ w" u AddrL =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+((15+16) << 2))) 3 R" o5 R; |: n- d2 Q
AddrL = 1;   //!<置1就拉低   
5 P$ b! S- K. c! O: f3 \1 A" w6 s' Z0 O7 B# ^7 l
使用宏定义,即:(Addr为 GPIOC_BSRR  拉高时 BitNum为15 拉低时 BitNum是(15+16) )* Q" v5 {. \7 y" \+ ?. U
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr & 0xF0000000)+0x2000000+((Addr & 0xFFFFF)<<5)+(BitNum << 2)))   K+ V2 P5 c6 ?  F/ M$ _

* Z" U; t- b$ g" L& s; R( e精简之后 ,位带操作   :( w, D( J% U! t8 K
#define BitBand(Addr,BitNum) *((volatile unsigned long *)(PERIPH_BB_BASE|((Addr-PERIPH_BASE)<<5)|(BitNum << 2)))
% ]3 P' |( F  r" ^2 _% ]8 Q$ h8 T) j- U( f3 ~6 P5 U

% A5 b  e9 h# }
赞 收藏 评论0 发布时间:2021-12-1 21:47

举报

0个回答

所属标签

相似技术帖

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