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

【经验分享】STM32F2位带操作

[复制链接]
STMCU小助手 发布时间:2021-12-1 21:47
手册中说:
# Z" G7 _1 c, o, d' y3 G4 DIn 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.) w& C" {+ P& W
在这两个系列中外设和SRAM都有各自映射的位带区,以实现对位的单独操作。
- _9 K# o: \2 wThe operations are only available for Cortex ® -M3 accesses, and not from other bus masters (e.g. DMA).
( D9 C4 M9 p. A% E3 \6 Q) R使用局限于M3内核。
7 W7 _0 a& {# E$ J: M8 K" WA 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 l3 k4 W1 b4 ]7 s2 n9 t. P地址映射公式如下
0 }3 G! q  p: C0 T) L: Q/ b& n                               bit_word_addr  =  bit_band_base  + ( byte_offset  x 32) + ( bit_number  × 4)
# e3 U# o. t& I/ `/ I1 a: u. rwhere:% ]+ h' g4 Y$ |3 q, R
–  bit_word_addr  is the address of the word in the alias memory region that maps to the targeted bit
3 {, K0 q) H3 T一位扩展成了一个字。( E. B! H0 X8 d  t  e4 i1 q
–  bit_band_base  is the starting address of the alias region/ ?& O  f; }4 P0 f! E" o' y
位带基地址是对应位带的起始地址。
: F" W. I$ Y& L–  byte_offset  is the number of the byte in the bit-band region that contains the targeted bit5 r$ M2 z1 p* A( E% o3 k4 g6 I7 o
这里的偏移值为包含操作位的寄存器偏移值。
2 C$ z) ~) A1 w8 b) t6 W: b1 M–  bit_number  is the bit position (0-7) of the targeted bit  
6 H( I% {% M' i' p/ B这里的位就是目标位。
( G. I4 |; Z  w9 m5 [/ E- g
4 ]' n/ @" M9 }. t1 a  {% _位带区在 SRAM上的地址范围:0x20000000 ~ 0x200FFFFF(SRAM区中最低1MB); {  q. P# B, Z, N
位带识别区在SRAM上的地址范围:   0x22000000 ~ 0x220FFFFF( g; a9 R3 \" l6 r3 C7 c2 f
位带区在片上外设的地址范围:0x4000 0000-0x400F FFFF(片上外设区中的最低1MB),* m- q! \5 ^0 c7 J6 q
位带识别区在片上外设的地址范围:0x4200 0000~0x42FF FFFF;8 k9 Z+ x9 }: N0 u  y
对应关系:位带区的每个bit位的值 对应 位带识别区1个 32位的地址的内容;. P+ |0 F0 r. ~6 c5 u* c+ u
所以位带操作是:当你通过位带别名区访问这些32位的地址的内容时,就可以达到访
1 W$ y/ @" h! ^: @8 B0 t& j问位带区对应的比特位。
/ T: k* m3 r( m6 r& B/ X* K3 i* B
/ a/ P2 t1 v+ }举例:
9 W. q; m  b$ w" g1 f# ]要给GPIO PC15做拉高拉低操作。
# ~6 J8 @: B: S* _- I! U0 r首先找到操作寄存器的地址:3 s. N1 J# F$ q! @& R6 w1 l- u
GPIO为外设,故需用外设的基地址:                   PERIPH_BASE               ((uint32_t)0x40000000)( p9 O: t& a$ B
GPIOC在AH1外设上,故在之前基础上再做偏移:AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000); Z- V- x' c5 D% w' C0 R- t
同时需要再加上GPIOC的偏移:                         GPIOC_BASE                  (AHB1PERIPH_BASE + 0x0800)
& q4 }3 A: \0 X+ L0 F/ a+ a4 v- B然后找到位设置寄存器:                                   GPIOC_BSRR                  (GPIOC_BASE + 0x18)
8 P. z) R% \9 H. L
. t9 C! E6 n+ n" l4 r最终得到的地址为 :0x40020818, a- O7 t+ V) I/ E
通常情况下向这个地址赋值即可实现指定位拉高拉低操作:& k2 L6 D& k/ y& {# Q" K: }
*((volatile unsigned long *) 0x40020818) = 0x80000000  //!<拉高
1 _/ T3 i: w( C2 w7 E*((volatile unsigned long *) 0x40020818) = 0x00008000  //!<拉低; L# N4 I. v- U+ `; C: t

# {1 m5 w# H* I/ U但通过位带,按照公式获取位带操作地址:0 f) ~! ~- K7 ~8 O9 A* m7 _  T
/*这是拉高时寄存器地址*/- J: t+ E/ l" C
AddrH =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+(15 << 2)))  ! Z! t: h6 v% \  M. f" {
AddrH = 1;   //!<置1就拉高 $ m* `* M: ~$ r% L
/*这是拉低时寄存器地址*/
6 y" k+ p7 ~) R5 Q5 F AddrL =  *((volatile unsigned long *)(( 0x40020818  & 0xF0000000)+0x2000000+(( 0x40020818  & 0xFFFFF)<<5)+((15+16) << 2))) 5 v/ G5 h, q% d: g* B
AddrL = 1;   //!<置1就拉低   
/ k6 N8 e/ x& n8 P) \
+ J7 {/ W# Y5 D  g使用宏定义,即:(Addr为 GPIOC_BSRR  拉高时 BitNum为15 拉低时 BitNum是(15+16) ). K* F1 i' L3 v( q) y' ^
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr & 0xF0000000)+0x2000000+((Addr & 0xFFFFF)<<5)+(BitNum << 2)))
/ X& {  C* t! s8 W# C; P
6 ?4 s6 t: A/ Q7 A: A3 Z2 d1 P精简之后 ,位带操作   :
, [" [6 D/ d6 E5 f#define BitBand(Addr,BitNum) *((volatile unsigned long *)(PERIPH_BB_BASE|((Addr-PERIPH_BASE)<<5)|(BitNum << 2)))
, W, [$ i" R$ E' ]4 g8 E, f1 w# S$ L4 y$ k! r* m- \
- a4 h0 A$ g: g0 g0 l
收藏 评论0 发布时间:2021-12-1 21:47

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版