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

基于stm32 mcu的简介经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-10 18:12
  1.1 stm32 mcu结构
" v( W: j0 j$ N( K- B0 w0 ~由控制单元、从属单元和总线矩阵三大部分组成,控制单元和从属单元通过总线矩阵相连接8 ]% \9 Z* N$ t0 E4 x7 K  i- w
控制单元包括Cortex-M3内核和两个DMA控制器(DMA1和DMA2)
6 v0 O* s2 {" h- P+ z从属单元包括存储器(Flash和SRAM等)和设备(连接片外设备的接口和片内设备)
2 b* H) [' p* q6 |& B  m: U: g连接片外设备的接口有并行接口和串行接口,并行接口即通用IO接口GPIO,串行接口有 USART、SPI、I2C、USB和CAN等# A' ?% |7 U. o% K
片内设备有定时器TIM、模数转换器ADC和数模转换器DAC等
6 R, P) @- P* `( a- C. o! z: F% A9 ~- K
20190227211620148.png
& v5 j# V& o) O) V

( N" b8 _4 d1 o  1.2 STM32 MCU存储器映像
# W3 p  w' d$ E0 N程序存储器、数据存储器和输入输出端口寄存器被组织在同一个4GB的线性地址空间内5 H, L& e. @1 O: G1 g5 D& W7 }* f: k8 o

8 v( }- e" z! r  u) B
LT4RHJB[MEOI0O400NU{R.png
. k& `" H0 y& X$ u, L$ h; U0 | ; W% o5 ?7 R, m3 S

. q: ~' b/ R, r' v& Q. z1.3 STM32 MCU系统时钟树
, S* E. O+ i( [0 ]) A系统时钟树由系统时钟源、系统时钟和设备时钟等部分组成
$ Z$ g' k8 d' q6 K; M# i系统时钟源有4个:高速外部时钟HSE、低速外部时钟LSE、高速内部时钟HSI和低速内部时钟LSI! r* f2 h+ j3 S* {9 P% A' l& j7 {
外部时钟用OSC实现,内部时钟用RC实现8 I9 s" {0 A8 M$ b( F/ e1 K
. l7 \: I! Z, [( R" j# {, S
20190227211808950.png 1 Q' R" v& b" O/ U! }1 x; L8 K
8 T- L' g6 k2 x! |1 ]
系统时钟SYSCLK可以是HSE或HSI,也可以是HSE或HSI通过锁相环倍频后的锁相环时钟PLLCLK) R  ^5 l: p- {$ }
SYSCLK经AHB预分频器分频后得到AHB总线时钟HCLK,HCLK经APB1/APB2预分频器分频后得到APB1/APB2总线时钟PCLK1和PCLK2
" A4 v' L& H. Y; |$ X
系统时钟树中的时钟选择、预分频值和外设时钟使能等都可以通过对复位和时钟控制(RCC)寄存器编程实现
& H2 e. x# p" X
, j! G1 b5 S- n. \% g' h* P  L
SC`(PWZ4ZFM@ZN6WFL1KMBU.png
/ \. R# Q# `  Q, m4 c" I; Q  Y+ G+ k* _/ W& k; |2 g. J+ x
  APB2设备时钟使能寄存器(RCC_APB2ENR)4 ]. L: Q  O+ `% y' X

1 I7 l6 ]) ^# {5 J( K
8L]T3[U0_SU)P_CGRIBTT`H.png
" T$ u8 k" U0 V# }  U! N

4 x6 H3 @" i/ g. ?. Z1.4 Cortex-M3简介
; |, M, N4 S2 C- B; h. ^Cortex-M3是采用哈佛结构的32位处理器内核,拥有独立的指令总线和数据总线,两者共享同一个4GB存储空间: u5 n- H" W$ a: R, Y
Cortex-M3内建一个嵌套向量中断控制器(NVIC:Nested Vectored Interrupt Controller),支持可嵌套中断、向量中断和动态优先级等
" Z- d; C% H% h8 q
  _  F+ T6 Q0 U! r7 ^( J
20190227211856364.png
, h6 X6 ]$ s/ ~" r1 P' l# H
5 V2 a- D9 h7 R1 |. B; @0 f2 [Cortex-M3内部还包含一个系统滴答定时器SysTick; i1 E3 ]% j) G) B' q; Q* H# {
SYSTick的核心是1个24位递减计数器,使用时根据需要设置初值,启动后在系统时钟的作用下递减,减到0时置技术标志位并重装初值
- j- H/ t  |9 o, p* O' f- c系统可以查询计数标志位,也可以在中断允许时产生SYSTick中断1 W7 E5 Z  T5 [# B9 f

* e+ K3 c1 q' Z8 S& u
3 N3 I' T4 P0 F! q7 m/ u+ j
SYSTick通过4个32位寄存器进行操作6 p: K0 G) N# m; A0 _; u$ n
0L[DCH`(O3SQUUZN8W}CIPM.png
4 d$ g& M  W* e
6 H$ Z2 Q5 ~3 I% i, g控制状态寄存器有3个控制位1个状态位$ s9 S8 Z4 U, L+ |0 h8 m0 o* {$ z

) e. ]$ _/ [- F6 ^8 j
4M1X)_77RMVPW~T[L~MINLO.png
2 ]6 |' e, ~& S9 a2 B- r
: s, q, }6 ]/ k3 n9 U* c2 d/ qSYSTick等片内设备接口的编程操作方法有2种:
! r9 B! c0 D" w+ g  R& w. l! L% z直接操作寄存器和使用库函数
( @4 R( M9 A% {* h使用库函数和使用自定义结构操作寄存器本质相同
; ^! S2 t: ?; F2 y) |' h0 d* s0 i9 l2 `8 s
和使用库函数相比,使用直接操作寄存器进行软件设计有下列优点:
5 w9 y3 N8 B! C" d4 b% F(1)源程序简单,目标程序小。
( |' p. b7 k; }4 g- ^* ~' m8 R2 l

, S' o$ R2 W# l" @" d3 j(2)直接操作寄存器有利于对硬件的理解,比较适合电子、通信和自动化等相关专业的学生学习使用
" J3 u( {4 V1 O# Q2 @# g

. _# i3 d2 y6 b  r8 ]; w+ ]! x直接操作寄存器的主要缺点是移植性差,而使用库函数移植性较好,比较合适计算机等相关专业的学生学习使用
0 q+ c, b5 B" [8 x' P嵌入式系统的C语言程序设计与一般的C语言程序设计基本相同,主要差别有2点:% h* |; [# ]: B
(1)嵌入式系统的C语言程序设计主要使用寄存器操作,而寄存器操作和变量操作实质相同,寄存器的名称实质就是变量名称! H: _5 P* g/ y2 R, s
(2)寄存器操作中控制和状态寄存器的操作通常是位操作包括“位与&”、“位或|”和“位异或^”(注意“位与&”和“位或|”与“逻辑与&&”和“逻辑或||”的区别)使用位操作的主要目的是只对控制和状态寄存器的指定位进行操作,对其他位的值不产生影响0 t- U  `1 j! N
————————————————3 S* ~% o/ z. z+ J
版权声明:_laiwenjie, [3 ~* Q: M2 t
如有侵权请联系删除+ o; Y/ h* P0 x! ?2 M+ p2 y: q' `

; ^2 `* J7 d/ Z% D" i
  r0 w+ j$ }& p2 v
, i0 H" v4 ]5 D7 X/ {
赞 收藏 评论0 发布时间:2023-5-10 18:12

举报

0个回答

所属标签

相似技术帖

官网相关资源

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