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

基于stm32的寄存器经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-10 18:04
1.STM32 长啥样
' m! @- y; B/ h' @7 f$ n芯片正面是丝印,ARM 应该是表示该芯片使用的是ARM 的内核,STM32F103VET6是芯片型号,后面的字应该是跟生产批次相关,最上面的是ST 的LOGO。芯片四周是引脚,左下角的小圆点表示1 脚,然后从1 脚起按照逆时针的顺序排列(所有芯片的引脚顺序都是逆时针排列的)。开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32 上编程(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作,通过做实验的方式来学习STM32 芯片的各个资源。开发板是一种评估板,板载资源非常丰富,引脚复用比较多,力求在一个板子上验证芯片的全部功能。) g4 @# k  w# g3 M+ A* ^8 x" w3 @

6 G/ k0 d/ |- N8 u3 l
20210319132617904.jpg
# S8 A4 @3 g) O+ ~' u& o
& c" x! j1 N, v
20210319133220150.jpg
5 C: e( [0 n- c
( W1 d' R; E4 u8 H- I" b
) ~3 [2 D/ y# j0 u; c2 @1 ^
2.芯片内部结构, i' D- t+ Q) d: \% P6 @
我们看到的STM32 芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU 与主板、内存、显卡、硬盘的关系。  j/ E- M+ ^3 k8 l

4 Z: G& R% \1 w: c1 DSTM32F103 采用的是Cortex-M3 内核,内核即CPU,由ARM 公司设计。ARM 公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIO、USART(串口)、I2C、SPI 等都叫做片上外设。
4 C1 e* V# F. u* @* F/ q1 f. A* H' r" }7 m0 k' u
芯片(这里指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元有4个,被动单元也有4 个,具体见图 6-4。为了方便理解,我们都可以把驱动单元理解成是CPU 部分,被动单元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件。
* p7 i4 l: t8 v9 F9 f$ d+ O
, S% l, O" q( Q4 \& G) W9 W" o) k- TICode 总线
# h$ B' B3 o0 b, ~  yICode 中的I 表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH中,内核要读取这些指令来执行程序就必须通过ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
5 G6 w% H4 U; m7 G2 ^3 K
  G- s$ p7 w0 `0 r/ x, y  `& C) G7 ]

& V' _# i! {5 E- r3. 驱动单元
5 p: h/ o& _1 Y8 T" B  O8 p5 T: d9 ^1 ]1 Q! P+ E) ?8 v
20210319133202380.png 5 [& c' R2 G9 H+ c( o

3 t" y) U4 y4 V' p  @2 [. y

: u7 T! d0 d  o2 w  p; e. ADCode 总线! N* l7 n9 |# ?% r7 l- Z% D
DCode 中的D 表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用C 语言中的const 关键字修饰,是放到内部的FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被Dcode 总线和DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。$ m/ a$ E2 C+ F  U% n
/ u3 N  Y7 k6 [  }) }
系统总线
) S. [, _2 X0 l$ ?系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。
4 m7 H! P( u3 [8 T- q1 v
" S1 T& B  N0 M2 v+ {- f# kDMA 总线- [1 n7 b0 M! P* K# g
DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的FLASH。因为数据可以被Dcode 总线和DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。0 T' h2 x1 q+ T& f4 T$ A: \

% V- `/ v, n+ @/ v6 \  X0 i7 O7 F
( `  ]$ F2 `1 t! a
4. 被动单元

0 }0 v9 J  R: \' [% j内部的闪存存储器
' G# m+ b- J# N4 L# U" x内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode 总线来取里面的指令。
1 B4 S# b. W& V: a7 o% q
3 a( d, G. K4 p! R' g6 P
内部的SRAM
7 {+ a! J) }/ Y8 m6 O2 W9 L6 D8 M内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode 总线来访问它。" d( C8 O# x4 _2 p5 {

8 f( \6 ]7 W  A$ ~- f1 D% B0 a7 T
FSMC" Y" g( y/ k' H; |( o
FSMC 的英文全称是Flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F10xx 中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM,NANDFLASH 和NORFLASH。但有一点我们要注意的是,FSMC 只能扩展静态的内存,即名称里面的S:static,不能是动态的内存,比如SDRAM就不能扩展。
8 _/ N& F- l3 p( ^2 k
: ^6 d' K, `4 T' j5 O* Y/ r$ `
AHB 到APB 的桥
  j% I' U3 ~: H) w0 d从AHB 总线延伸出来的两条APB2 和APB1 总线,上面挂载着STM32 各种各样的特色外设。我们经常说的GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。
0 W6 M: J! ^$ Z! K5 [: |8 Z————————————————9 N5 H( s% h) k- L8 l$ G
版权声明:打酱油的
( G: a1 [# `8 e; H: f如有侵权请联系删除! X& R6 s& U  H" s+ F7 m

6 E8 o/ C, w0 r: s1 e) K8 {) }& w6 N) Z) f

& z: i& q5 U( L
收藏 评论0 发布时间:2023-5-10 18:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

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