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

【经验分享】STM32F2位带操作

[复制链接]
STMCU小助手 发布时间:2021-12-2 14:55
手册中说:4 ^- _/ a$ R$ v$ p6 u- E
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.1 I$ Z* V' Z! H
在这两个系列中外设和SRAM都有各自映射的位带区,以实现对位的单独操作。0 s0 ^3 v2 M2 g8 t7 R$ i# W8 {8 o
The operations are only available for Cortex ® -M3 accesses, and not from other bus masters (e.g. DMA).
7 H- D' A& D/ o$ P7 p% M使用局限于M3内核。( Q4 _4 u. T5 J5 ^0 I
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:
& P( D2 _3 v% e( b3 y" D地址映射公式如下
0 O) M6 l2 P, K, i  b% y                               bit_word_addr  =  bit_band_base  + ( byte_offset  x 32) + ( bit_number  × 4)
. X; J. {1 B8 q! P( lwhere:, l  G& W( g/ H$ W# G0 o
–  bit_word_addr  is the address of the word in the alias memory region that maps to the targeted bit
- F" Y# ~  U6 O  b一位扩展成了一个字。, J& \( z# S1 t- m( L. ~" o
–  bit_band_base  is the starting address of the alias region7 M. d3 k5 d/ t  U. ~
位带基地址是对应位带的起始地址。3 M4 s5 j6 B, v% f; H& ]6 G2 h" i
–  byte_offset  is the number of the byte in the bit-band region that contains the targeted bit
7 U' L' [8 R- K  I, ^这里的偏移值为包含操作位的寄存器偏移值。
5 m5 b2 @: n7 r9 p6 g( u$ `2 ]–  bit_number  is the bit position (0-7) of the targeted bit  
. G4 O* N8 q/ R. a这里的位就是目标位。2 ?3 G( G0 A1 r8 I( q/ \# v
1 b0 l/ b; }, g9 L9 U1 N+ {$ {
位带区在 SRAM上的地址范围:0x20000000 ~ 0x200FFFFF(SRAM区中最低1MB)( I) s& J6 o0 G) y" N
位带识别区在SRAM上的地址范围:   0x22000000 ~ 0x220FFFFF
+ ~( e8 r5 G% ^# R3 k& n4 M+ t位带区在片上外设的地址范围:0x4000 0000-0x400F FFFF(片上外设区中的最低1MB),
. t2 E# D% p0 F7 O- t位带识别区在片上外设的地址范围:0x4200 0000~0x42FF FFFF;3 {, [6 Q8 z# x7 f5 a! A3 u9 p6 H
对应关系:位带区的每个bit位的值 对应 位带识别区1个 32位的地址的内容;
2 _5 Y- i. ~" J9 s% c1 ?+ R* ~所以位带操作是:当你通过位带别名区访问这些32位的地址的内容时,就可以达到访" D& N$ o4 e* L* U$ i) F
问位带区对应的比特位。" A* ?- O; }. c& o

) t* `' C0 M3 H/ e' `举例:  b; @5 T; r7 R5 z6 j
要给GPIO PC15做拉高拉低操作。! H2 a9 d( a' E! _: |. L: ^
首先找到操作寄存器的地址:
5 f2 ~* L& X7 I" w% r( r4 GGPIO为外设,故需用外设的基地址:                   PERIPH_BASE               ((uint32_t)0x40000000)
; g- X- F9 ^- Y& D3 q! U- M+ y( sGPIOC在AH1外设上,故在之前基础上再做偏移:AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000)
5 o- `* g6 R7 v同时需要再加上GPIOC的偏移:                         GPIOC_BASE                  (AHB1PERIPH_BASE + 0x0800)' ]9 |* @. G8 d4 p
然后找到位设置寄存器:                                   GPIOC_BSRR                  (GPIOC_BASE + 0x18)7 [( p, j( x  v

7 C" R5 y5 }3 `2 H最终得到的地址为 :0x40020818
% ]6 p1 c5 M: h9 c通常情况下向这个地址赋值即可实现指定位拉高拉低操作:8 o( D! b0 s, w$ y$ {
*((volatile unsigned long *) 0x40020818) = 0x80000000  //!<拉高0 s' F% ^2 v) ^. d" R5 h2 y6 C
*((volatile unsigned long *) 0x40020818) = 0x00008000  //!<拉低
: l6 ^7 i, }" R$ G( H1 S% s3 J
  H& H& X* u, ?. O. D. z& w3 d" ~& X但通过位带,按照公式获取位带操作地址:6 E/ }4 Y" x! |# M
/*这是拉高时寄存器地址*/
8 g3 w" c1 M9 V3 z/ | AddrH =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+(15 << 2)))  . L6 f2 Y' O3 P; l1 F
AddrH = 1;   //!<置1就拉高 , ?9 j( b, F3 J+ n. z6 M
/*这是拉低时寄存器地址*/7 G) z9 S5 v* h3 \4 k2 v* [! X
AddrL =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+((15+16) << 2))) + T' y3 Y& E$ Q
AddrL = 1;   //!<置1就拉低    $ j# \+ L$ k9 g+ k2 s* W( j7 T

& c- v+ s9 A7 F( F. `% a使用宏定义,即:(Addr为 GPIOC_BSRR  拉高时 BitNum为15 拉低时 BitNum是(15+16) )- U8 q$ J  `2 _( b
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr & 0xF0000000)+0x2000000+((Addr & 0xFFFFF)<<5)+(BitNum << 2))) 4 Q) `' h5 r# ^$ @

& @4 h7 U: r1 }7 A( j2 U; _) g精简之后 ,位带操作   :0 @' a" o: k; G
#define BitBand(Addr,BitNum) *((volatile unsigned long *)(PERIPH_BB_BASE|((Addr-PERIPH_BASE)<<5)|(BitNum << 2)))
7 I& p- M  h1 \3 ~+ Z9 \9 Z9 a0 E- O# p* A+ Z; Z% H6 G
0 H3 y7 z% ?* y9 ?; H* s- K
赞 收藏 评论0 发布时间:2021-12-2 14:55

举报

0个回答

所属标签

相似技术帖

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