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

【经验分享】STM32F2位带操作

[复制链接]
STMCU小助手 发布时间:2021-12-2 14:55
手册中说:
7 T. p# Q' k' H+ z4 U0 NIn 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.
5 Y0 e/ s! X. S# e+ Z在这两个系列中外设和SRAM都有各自映射的位带区,以实现对位的单独操作。
: z% A. v1 U. V) [0 ^. c! Q& mThe operations are only available for Cortex ® -M3 accesses, and not from other bus masters (e.g. DMA).- d0 ?( _9 i5 K' E* ?9 L& i
使用局限于M3内核。" b/ \& `: R/ l6 n4 C
A 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:0 U. d9 b2 I0 j+ f& m
地址映射公式如下" I2 N8 c9 j7 q. f. F
                               bit_word_addr  =  bit_band_base  + ( byte_offset  x 32) + ( bit_number  × 4)! e2 _! T* d0 J, X' b
where:
# K; X) _/ D" s' n; o3 ?–  bit_word_addr  is the address of the word in the alias memory region that maps to the targeted bit
2 A) l: }- A  o: S2 p  k; B3 s一位扩展成了一个字。
) w# g6 C9 t+ b: W; l8 I/ g1 ?0 K–  bit_band_base  is the starting address of the alias region. i" O$ n: i2 J5 M9 L' G: y) K% Y
位带基地址是对应位带的起始地址。
6 o  h/ w- t# k  F0 l9 A–  byte_offset  is the number of the byte in the bit-band region that contains the targeted bit
$ n, L4 |3 Y& w; V+ f这里的偏移值为包含操作位的寄存器偏移值。7 o) y  S7 |! m4 G( B
–  bit_number  is the bit position (0-7) of the targeted bit  
/ k' M+ J8 S3 O  ]这里的位就是目标位。
+ D. L$ {! v: ]* R, H, f: B/ E% V6 l( R! G& M8 x7 A
位带区在 SRAM上的地址范围:0x20000000 ~ 0x200FFFFF(SRAM区中最低1MB)
; ~; Z+ F; [  r  Y( ~  c1 R位带识别区在SRAM上的地址范围:   0x22000000 ~ 0x220FFFFF+ R* H' g6 c( l- @2 C0 r
位带区在片上外设的地址范围:0x4000 0000-0x400F FFFF(片上外设区中的最低1MB),
2 Y. K6 g+ \5 _2 T0 I- v* L0 O位带识别区在片上外设的地址范围:0x4200 0000~0x42FF FFFF;
1 W8 m  I& ^1 }3 w& E对应关系:位带区的每个bit位的值 对应 位带识别区1个 32位的地址的内容;
1 Q- }: E1 j2 u6 Q  K& H  m所以位带操作是:当你通过位带别名区访问这些32位的地址的内容时,就可以达到访1 K7 A1 f4 a! V( @- w
问位带区对应的比特位。
( U, U7 {4 f6 B3 M
9 T! B. l8 G1 g7 A举例:
. l( i+ j; @' v* Q: E5 J) K要给GPIO PC15做拉高拉低操作。  P6 L" R8 }" N  k) E1 @
首先找到操作寄存器的地址:; d5 b6 |- g4 P: K2 y; M" h
GPIO为外设,故需用外设的基地址:                   PERIPH_BASE               ((uint32_t)0x40000000)
3 r+ j4 D! L) ^6 `GPIOC在AH1外设上,故在之前基础上再做偏移:AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000), S: @, Q5 ~0 f" g7 F. E9 ^
同时需要再加上GPIOC的偏移:                         GPIOC_BASE                  (AHB1PERIPH_BASE + 0x0800)
" j4 _1 V9 _/ Z0 K! D; J然后找到位设置寄存器:                                   GPIOC_BSRR                  (GPIOC_BASE + 0x18)
2 w9 c7 U/ y: Y( Z, }4 Q
4 g( d& Z( [8 p, T* T, L& {最终得到的地址为 :0x40020818
( m. O# n6 Y& \  H1 m4 K通常情况下向这个地址赋值即可实现指定位拉高拉低操作:
- p0 ?2 d* F( S# f0 B% }*((volatile unsigned long *) 0x40020818) = 0x80000000  //!<拉高0 v4 q; r1 i3 A% B% o
*((volatile unsigned long *) 0x40020818) = 0x00008000  //!<拉低0 K- p& P, W4 C7 ]1 k

) O* x4 U) j2 D3 g- T但通过位带,按照公式获取位带操作地址:
9 I- I5 r% a3 V; s* L" `/*这是拉高时寄存器地址*/
1 U3 {* \; \8 L0 Z+ z AddrH =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+(15 << 2)))  
- E5 `# ~& c9 e( K8 x6 w) [AddrH = 1;   //!<置1就拉高 7 {5 s( p& B( f& {3 f8 o, D' I5 u
/*这是拉低时寄存器地址*/
1 y' D9 S5 U7 o8 d2 X  Q AddrL =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+((15+16) << 2))) 4 B- j9 h# K: ~1 ~* X4 @
AddrL = 1;   //!<置1就拉低    3 v% S- g& e  u- a
' H6 o3 _8 S! ~& M9 ]
使用宏定义,即:(Addr为 GPIOC_BSRR  拉高时 BitNum为15 拉低时 BitNum是(15+16) ). p( h. h  x; O5 x. E# h" u; _, G
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr & 0xF0000000)+0x2000000+((Addr & 0xFFFFF)<<5)+(BitNum << 2))) $ y  x7 B* ~& o, G; {- Q" D
2 y5 Y2 c( c" l5 L! B
精简之后 ,位带操作   :. |# a: s& L0 B
#define BitBand(Addr,BitNum) *((volatile unsigned long *)(PERIPH_BB_BASE|((Addr-PERIPH_BASE)<<5)|(BitNum << 2)))  a4 Z' ^  I  `# n
# \3 n: j4 G! S0 q5 h- R+ H

' f8 O1 ^- O7 p6 u7 V* W4 x
收藏 评论0 发布时间:2021-12-2 14:55

举报

0个回答

所属标签

相似技术帖

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