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

【经验分享】STM32F2位带操作

[复制链接]
STMCU小助手 发布时间:2021-12-1 21:47
手册中说:$ G+ \1 E$ @: J& _0 e, f' Y$ o$ w
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.) i, J4 c5 P% r" D+ x/ l, B; e. Y
在这两个系列中外设和SRAM都有各自映射的位带区,以实现对位的单独操作。
9 R# V" Q  a( T$ `The operations are only available for Cortex ® -M3 accesses, and not from other bus masters (e.g. DMA).
3 S1 R) n9 N% Y) y# O  l; g5 U% u使用局限于M3内核。0 f7 c% U% o3 O% K# o. t
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:
6 C4 c; B+ j  i( {: X$ K地址映射公式如下
" W" ]& M& O. p2 M0 J4 Z( q                               bit_word_addr  =  bit_band_base  + ( byte_offset  x 32) + ( bit_number  × 4)
! W( {- v- p: G# nwhere:, D' W' ]7 f# Z8 A6 e( y# O  Q
–  bit_word_addr  is the address of the word in the alias memory region that maps to the targeted bit
  L) ?) v$ M6 ]( k4 ~8 L6 h一位扩展成了一个字。" }4 p5 k. f$ n+ Y0 Y
–  bit_band_base  is the starting address of the alias region: u* ]) A, w' N" A
位带基地址是对应位带的起始地址。
) [) z+ J: }( G: b8 q& G. l( `! j8 C–  byte_offset  is the number of the byte in the bit-band region that contains the targeted bit+ ^4 a2 I; H6 K4 y
这里的偏移值为包含操作位的寄存器偏移值。* ?) x, Y8 [1 Z* p5 {
–  bit_number  is the bit position (0-7) of the targeted bit  
  ~. h  `. t* Q0 ~0 k: E# a这里的位就是目标位。" b: ]- L0 }0 l7 L3 L; t
* t2 A: W7 v/ }( g4 B( `
位带区在 SRAM上的地址范围:0x20000000 ~ 0x200FFFFF(SRAM区中最低1MB)
% u  g9 b# f3 A6 T位带识别区在SRAM上的地址范围:   0x22000000 ~ 0x220FFFFF: I9 A% u% p1 H. c: L
位带区在片上外设的地址范围:0x4000 0000-0x400F FFFF(片上外设区中的最低1MB),4 n# J0 m0 E+ O
位带识别区在片上外设的地址范围:0x4200 0000~0x42FF FFFF;
: \  t1 X$ o& ^% K对应关系:位带区的每个bit位的值 对应 位带识别区1个 32位的地址的内容;
* @9 ?7 f! x- c# q2 t2 {, g4 M, l所以位带操作是:当你通过位带别名区访问这些32位的地址的内容时,就可以达到访4 g$ h( ^1 B6 @
问位带区对应的比特位。
. V8 P, j1 V/ _- M  i; L3 z+ \7 ?* P, U- Q
举例:
' `1 I( Y* d9 e" j8 y+ g要给GPIO PC15做拉高拉低操作。
! e+ l4 d, C) Q7 O/ m8 }首先找到操作寄存器的地址:
9 n6 T3 r; j' }; b* nGPIO为外设,故需用外设的基地址:                   PERIPH_BASE               ((uint32_t)0x40000000)' v4 \% s" `4 F& V; ^3 F3 A8 \
GPIOC在AH1外设上,故在之前基础上再做偏移:AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000)
- M; R8 C" Q' d3 {) c同时需要再加上GPIOC的偏移:                         GPIOC_BASE                  (AHB1PERIPH_BASE + 0x0800)! x, R) h2 P, T% o3 V* T9 t& Y: M
然后找到位设置寄存器:                                   GPIOC_BSRR                  (GPIOC_BASE + 0x18)6 ]" R+ V" I2 b: {+ W. D
( A" |0 D% f4 R' y& C
最终得到的地址为 :0x40020818/ F$ e4 {8 m1 P/ X
通常情况下向这个地址赋值即可实现指定位拉高拉低操作:
( v# W$ r6 D' @9 Z/ {*((volatile unsigned long *) 0x40020818) = 0x80000000  //!<拉高
; O# o/ u0 c. t# \2 O! I*((volatile unsigned long *) 0x40020818) = 0x00008000  //!<拉低7 ^) s3 O; T: W, ^

4 f8 z$ E% f! U8 W0 [但通过位带,按照公式获取位带操作地址:
. q2 X- P0 ]; C! s' r8 I6 F9 a/*这是拉高时寄存器地址*/
4 V. V% n- |. J0 l4 w* v! ^. g AddrH =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+(15 << 2)))  
9 C. c# _/ J. n! j6 D6 R- {% fAddrH = 1;   //!<置1就拉高
  S5 J1 J; Y4 C- e; D+ b. h/*这是拉低时寄存器地址*/: _7 D& T, A! |* X- }& t
AddrL =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+((15+16) << 2)))
" X' ^0 d: G& h0 C3 QAddrL = 1;   //!<置1就拉低    4 @8 G; v& K4 {

/ @. N! R9 o9 ^- k使用宏定义,即:(Addr为 GPIOC_BSRR  拉高时 BitNum为15 拉低时 BitNum是(15+16) )
0 q( f' L* V/ i, s#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr & 0xF0000000)+0x2000000+((Addr & 0xFFFFF)<<5)+(BitNum << 2))) ( V6 C, H, s+ m2 N- S

7 k$ o$ s9 L2 f9 z+ t& Q! j精简之后 ,位带操作   :) _2 H* w* _. S
#define BitBand(Addr,BitNum) *((volatile unsigned long *)(PERIPH_BB_BASE|((Addr-PERIPH_BASE)<<5)|(BitNum << 2)))! N. \( o. G% `1 Z0 E" j- c* i

* Z, g2 g4 ~& `: Z" @
$ \( |9 x& u: H8 U/ M
赞 收藏 评论0 发布时间:2021-12-1 21:47

举报

0个回答

所属标签

相似技术帖

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