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

基于stm32的寄存器经验分享

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

1 q1 |) P# ]: A* Y6 O4 q
20210319132617904.jpg 9 W7 M: H% q4 ], W
5 h3 o: l0 e/ X! _, d0 `
20210319133220150.jpg $ @" K& ]+ }) P

0 n( G% r; u' @

; V1 u6 R" f; g2 L$ Y0 O& E2.芯片内部结构
1 x& k( S# I- n( n8 L! Z我们看到的STM32 芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU 与主板、内存、显卡、硬盘的关系。9 {( W# K7 F4 R2 S4 T" O5 Z6 F4 O# F+ p
1 a9 A7 C5 w9 s) a2 K$ T; D4 z
STM32F103 采用的是Cortex-M3 内核,内核即CPU,由ARM 公司设计。ARM 公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIO、USART(串口)、I2C、SPI 等都叫做片上外设。( B' K( U8 F. O) B. A
6 a: H( Y% k* `( g% @$ H
芯片(这里指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元有4个,被动单元也有4 个,具体见图 6-4。为了方便理解,我们都可以把驱动单元理解成是CPU 部分,被动单元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件。- ~6 R6 f- q- s2 ]' p' q

8 f7 b, G1 d2 L* R& AICode 总线8 J+ v7 x. ^2 X3 l) T3 G! m
ICode 中的I 表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH中,内核要读取这些指令来执行程序就必须通过ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。- o5 A8 Z( _9 Z# }' a9 x
3 f' }( k' t2 R6 d9 X

- A/ h) ~/ j/ [4 G) m  I9 F0 F3. 驱动单元) o8 z# u& t! n9 C3 L) W7 ~' K

* c( m, }  F; a4 h
20210319133202380.png
5 \; m1 Z9 D! p8 R1 \& n1 f/ V
, @' F8 f: J9 k8 n+ W
5 [1 a+ C3 k& {, X$ G# F: |
DCode 总线
4 a6 E/ s: c0 F. W' E8 W0 gDCode 中的D 表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用C 语言中的const 关键字修饰,是放到内部的FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被Dcode 总线和DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。) u0 p+ z/ o* n: a; p3 `- \
" Z& E( N0 g1 z$ _' X3 `1 m
系统总线
) t' o. t% h) C5 A系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。
% `- a+ u6 k, x+ y# j& D: L0 D  \8 l" u& S5 ?$ a
DMA 总线
. A' v6 W: P% L& [. LDMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的FLASH。因为数据可以被Dcode 总线和DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。+ t& Y, A# Z$ b1 u

/ V# e$ c" u8 g# T
3 X* \2 v/ L$ M% K$ |. w2 h
4. 被动单元
2 l9 o2 @1 ]' I- I0 h: ?4 O) u
内部的闪存存储器$ Z8 `6 d8 H  i& _6 I( L5 T
内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode 总线来取里面的指令。
0 w, O) D: v# n  ^2 \2 m1 b
; Q* d" J6 P3 B5 Z9 x# h
内部的SRAM# b' D* g. ^# `+ ~4 S0 X  C% p
内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode 总线来访问它。
) }+ y' e! f% W; l4 Y) B# Z/ S2 s3 \) m
FSMC1 F, i; S1 X6 Z2 B
FSMC 的英文全称是Flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F10xx 中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM,NANDFLASH 和NORFLASH。但有一点我们要注意的是,FSMC 只能扩展静态的内存,即名称里面的S:static,不能是动态的内存,比如SDRAM就不能扩展。' ]& f% @# v, l

% \* @! g3 P; V( C, NAHB 到APB 的桥
* C# w# Q6 Y+ y1 o8 f. D从AHB 总线延伸出来的两条APB2 和APB1 总线,上面挂载着STM32 各种各样的特色外设。我们经常说的GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。2 h: x$ l$ m, ~9 N4 R
————————————————* P# `# F: o4 l* P
版权声明:打酱油的
9 o9 Q' W/ v5 M( u/ [3 W) Q) f如有侵权请联系删除8 d0 D" |" e0 F3 l% M) b1 |6 M
( |8 y! X' i# W2 R8 l% N
" g/ y+ _- G8 A2 }0 B  g, o

7 H* _7 m! ~1 i
赞 收藏 评论0 发布时间:2023-5-10 18:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

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