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

【经验分享】STM32F2位带操作

[复制链接]
STMCU小助手 发布时间:2021-12-1 21:47
手册中说:( _. n/ e9 T, K0 T5 P
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.
, b1 p! q; t6 B% f) ]0 ~* W4 }; h在这两个系列中外设和SRAM都有各自映射的位带区,以实现对位的单独操作。
3 _/ e$ l+ h9 l. G: C5 {+ XThe operations are only available for Cortex ® -M3 accesses, and not from other bus masters (e.g. DMA).
' H, L6 M! r' ]4 [" u使用局限于M3内核。
6 u! d, x8 e) y% RA 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:
: S+ j7 x6 y' U) o: t  P3 z地址映射公式如下
0 h2 D" v" O& d                               bit_word_addr  =  bit_band_base  + ( byte_offset  x 32) + ( bit_number  × 4)
9 X5 {" ?: f' y3 @+ Y1 ]- k9 t+ Mwhere:
: z( Q' B2 ~/ ]) Y  r8 `* a–  bit_word_addr  is the address of the word in the alias memory region that maps to the targeted bit
! A( u8 J7 P9 c* }5 P' [一位扩展成了一个字。
: |: c) M7 [$ S# l; L–  bit_band_base  is the starting address of the alias region
3 r2 ^6 N: O3 M2 h" x位带基地址是对应位带的起始地址。& N+ `: |  ]- X; a7 {( v
–  byte_offset  is the number of the byte in the bit-band region that contains the targeted bit
: Q. ?0 b; C5 m; _. M; |4 M  ^这里的偏移值为包含操作位的寄存器偏移值。
+ J) x* w  u; k+ A% i–  bit_number  is the bit position (0-7) of the targeted bit  
' Q6 w/ l7 x, Q0 P9 Y9 X4 X; l这里的位就是目标位。( p& Q9 V) n, m

+ C9 c; X8 X5 H$ C$ u( {9 M位带区在 SRAM上的地址范围:0x20000000 ~ 0x200FFFFF(SRAM区中最低1MB)5 a! o3 r- L3 x
位带识别区在SRAM上的地址范围:   0x22000000 ~ 0x220FFFFF& C- [7 K) f1 l3 P5 l) `# ?/ U' z* w
位带区在片上外设的地址范围:0x4000 0000-0x400F FFFF(片上外设区中的最低1MB),
" \! B' Q! @: T0 o( f% W: U位带识别区在片上外设的地址范围:0x4200 0000~0x42FF FFFF;
& i" ?6 d5 K: v8 U: s% j/ [5 a对应关系:位带区的每个bit位的值 对应 位带识别区1个 32位的地址的内容;4 m0 O% \! z( I1 t. o4 |( I% ~
所以位带操作是:当你通过位带别名区访问这些32位的地址的内容时,就可以达到访/ @3 L% U3 @% m# a0 o& P
问位带区对应的比特位。' R4 H1 E; n9 ~7 a( |1 N% @
. A& L5 J6 f0 j+ A2 ^& ^; K
举例:
) z4 R5 U# Y& u' h$ ^+ k2 V& L要给GPIO PC15做拉高拉低操作。
' b* G8 l$ O$ P# m7 A- j首先找到操作寄存器的地址:8 X( o+ _- u$ r* T- T2 x
GPIO为外设,故需用外设的基地址:                   PERIPH_BASE               ((uint32_t)0x40000000)
( J( V+ e; O7 g9 n1 bGPIOC在AH1外设上,故在之前基础上再做偏移:AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000)5 y, r% y7 N8 A& Z& ^2 B
同时需要再加上GPIOC的偏移:                         GPIOC_BASE                  (AHB1PERIPH_BASE + 0x0800)
! L; }# H2 n4 E4 C9 K8 o8 C" h/ k然后找到位设置寄存器:                                   GPIOC_BSRR                  (GPIOC_BASE + 0x18)# |: R9 R6 n' J" z& f# K0 t8 K+ z4 J

0 p  \7 A) H% O( Y1 w最终得到的地址为 :0x40020818
: @! h( N5 m! v0 m5 C& x# [  w  q通常情况下向这个地址赋值即可实现指定位拉高拉低操作:
2 g, ^$ g/ [" d& u, m" F*((volatile unsigned long *) 0x40020818) = 0x80000000  //!<拉高% h9 F, B1 L. f4 T+ O  M6 a
*((volatile unsigned long *) 0x40020818) = 0x00008000  //!<拉低
. s2 G- f& p  k1 Z2 |- ?2 G* W) X
% A. ^- C+ w" ~; z+ t但通过位带,按照公式获取位带操作地址:
" I  e  C" n7 [. T' {4 e* D' A/*这是拉高时寄存器地址*/
( k0 ^8 j0 M; R4 [ AddrH =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+(15 << 2)))  5 [5 E" b* C) Q8 U
AddrH = 1;   //!<置1就拉高 2 \1 ]) Q% |0 M9 S  J7 v
/*这是拉低时寄存器地址*/1 b+ `) w+ c. g5 f$ z$ }( _0 \4 j
AddrL =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+((15+16) << 2))) / a- n) g. T" x
AddrL = 1;   //!<置1就拉低   
6 I& z! R9 z( P' i* o5 s& c: [2 b$ P+ g
使用宏定义,即:(Addr为 GPIOC_BSRR  拉高时 BitNum为15 拉低时 BitNum是(15+16) )9 A* e! A7 ^1 ^4 o8 m+ V: g
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr & 0xF0000000)+0x2000000+((Addr & 0xFFFFF)<<5)+(BitNum << 2)))
2 w! D, l" T: v0 V/ j4 j* W/ [. t* h
精简之后 ,位带操作   :
& B) s8 ^' s' J' m) n. H#define BitBand(Addr,BitNum) *((volatile unsigned long *)(PERIPH_BB_BASE|((Addr-PERIPH_BASE)<<5)|(BitNum << 2)))6 R) z% k/ `' u: ~, q" ~$ z

: f+ n. \1 ~  z8 G% }$ b( g
; u0 ]& j& \# t: X
赞 收藏 评论0 发布时间:2021-12-1 21:47

举报

0个回答

所属标签

相似技术帖

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