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

70条STM32知识盘点(下)

[复制链接]
STMCU小助手 发布时间:2022-9-3 15:53
37DMA仲裁器分为软件和硬件两种。软件部分分为4个等级,分别是很高优先级、高优先级、中等、低。硬件部分由通道的大小来决定优先级,越低优先级越高。
& R4 z, G4 \& G* o9 C( C. M- }
/ I4 i3 D7 L2 V% c
DMA有一个实时的传输数据量寄存器叫做DMA_CNDTR,最大值为65535,存放的是当前传输所要传输的数据量。当数据量变为0时,表明传输完成。
( x& Y2 \8 p3 S& Y/ s) g5 Z
38
CAN总线(ControllerArea Network)。CAN控制器根据两根线上的电位差来判断总线电平,总线电平又分为显性电平和隐性电平,二者必居其一。

" v. u' A9 E1 a" _4 G" k6 c39
CAN总线具有6个特点:
  • 多主控制。
  • 系统若软性。
  • 通讯速度较快,通讯距离较远。
  • 具有错误检测、错误通知和错误恢复功能。
  • 故障封闭,当总线上的设备发生连续故障错误时,CAN控制器会把改控制器踢出总线。
  • 连接节点多。理论上可以无限制加载,但是受到时间延迟和电气负载的限制,实际数目是有限制的。降低传输速度可以适当增加可挂接负载个数。
    3 s9 V, [, i, F" t! t% V" U
; m- w( b5 b" D3 j, W5 M3 S$ h
40
CAN协议有两个标准。ISO11898,针对125kbps~1Mbps的高速速率;ISO11519-2,125kbps以下的低速速率。
+ Y! C* d: q) e* j
) V8 E: _+ M& k2 c, j: Q
41
CAN协议的有5种类型的帧:数据帧、遥控帧、错误帧、过载帧、帧间隔。其中前两种帧有标准格式(11位ID)和扩展格式(29位ID)。
. U! \3 ?7 C+ ]# K- l
微信图片_20220903155259.jpg

9 B. Q, {* J8 V42
数据帧构成:
  • 帧起始,表示数据开的段帧起始。
  • 仲裁段,表示该帧优先级的仲裁段。
  • 控制段,表示数据的字节及保留位段。
  • 数据段,数据的内容,一帧可发送0~8个字节的数据。
  • CRC段,检查帧的传输错误段。
  • ACK段,表示确认正常接收的段。
  • 帧结束,表示数据的段帧结束。
    / a) R) P; @( M) V7 V( H- b- \' U

* ?% |9 {2 E$ M
微信图片_20220903155256.jpg
8 }1 K# A6 e/ e- m; ^2 z% L  \
43
STM32f103系列只有一个CAN控制器,有3个发送邮箱和3级深度的2个FIFO,14个过滤器。
% F/ Z, Q: A* U; h! o8 }
44
STM32的每个过滤组可以配置为1个32位过滤器和2个16位过滤器。除此之外,还可以配置为屏蔽位模式(ID+屏蔽)和标识符列表(ID和屏蔽寄存器均用来做ID寄存器)模式。

' c: ^% G8 g5 k. B( I45
CAN接收到有效报文被放置在3级邮箱深度的FIFO中,FIFO完全由硬件来管理。
) P( P' M) @4 _7 W

1 i+ x! c9 G2 t1 u' \46
CAN总线的波特率:

3 c. {% I$ e0 u/ G* T
微信图片_20220903155251.jpg

5 ^0 x- I7 @# Q8 n  x2 {' X47
触摸屏一般分为电阻式触摸屏和电容式触摸屏。前者检测触摸的位置原理是利用触摸屏控制器中的A/D转换器经过两次A/D读值后得出X和Y的坐标值。注意:这个X和Y的值是相对于触摸屏的,而非LCD屏。  j/ k6 {" _7 Y

+ x. v6 T0 p6 `. z1 B
所以在这里需要注意两个概念:触摸屏和LCD屏。这是两个不同的概念,也是两个不同的物理结构,其中电阻触摸屏是由上下两个导电层中间夹着一层非常薄的透明隔层;而LCD就是指显示屏。

. z9 Q1 W2 o* N% `. S
48
电阻触摸屏有X和Y、X和Y的比例因子、坐标轴方向、偏移量。LCD也有自己的这些参数。两者完全不相干,所以在定位的时候需要进行坐标转换。

9 Y0 T1 j" a/ q
公式:
微信图片_20220903155248.png

5 o2 ?0 T; r2 w# C! |9 U
通过对屏幕的四个点进行校准,得到四元一次方程,求解即可。
/ q, W  Q0 X, I5 f# L( F

$ e4 B% d! t& u: ^. p0 w49
NEC协议的数据帧格式:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均是8位数据格式。按照低位在前,高位在后的顺序发送。
/ q! q& B' X3 q' @$ O
50
NEC协议在发送的时候,会有560us的38KHz的载波信号,而在接收的时候这部分载波信号被认定为低电平,而剩余的(2.25ms-650us)的逻辑“1”和(1.12ms-650us)的逻辑“0”时间则被认定为高电平。
/ I' J* e- a4 g2 k

9 Q- r; y2 y( d- F7 o. K+ z! V51
在单位时间内的位移被定义为速度,速度有线速度和角速度之分,分别对应两种传感器测量这两种不同的速度:线速度传感器(加速度计)、角速度传感器(陀螺仪)。前者多应用在静态或者低慢速运动中的姿态求解,后者多应用在动态运动中姿态求解。

' {* R$ T' @  t& F* D
52
根据标准约定,零加速度(或零G准位)通常定义为相当于最大输出值(12位输出为 4096,10位输出为1024等)一半的输出。对于提供12位输出的加速度计,零G准位将等于2048。
2 [  p3 h0 D* G- D. f
输出大于2048表示正加速度。输出小于2048表示负加速度。加速度的数量通常用单位 g(1g=9.8m/s2=重力加速度)表示。
1 a( z# R" b. O2 Q7 H, L7 N
通过确定测量的输出与零G准位之间的差值,然后除以加速度计的灵敏度(用计数/g 或 LSB/g表示)来计算加速度。
" L8 V5 ^0 n* l' n7 A! i
对于提供12位数字输出的2g加速度计,灵敏度为819计数/g或819LSB/g。加速度等于:a=(Aout-2048)/(819计数/g),单位为g。

4 J4 L$ [6 F2 W6 O
53
加速度计测得的加速度的方向和设备设定的坐标系是相反的,因为原理表明在测量力的时候采用的是非惯性系参考系,而我们高中时代研究的坐标系是惯性系参考系,前者在物体进行运动产生加速度时,假想一个与速度方向相反的力作用在物体上,这个力就是惯性力。

  ?, M  A8 M' D7 d, @
后者我们说不存在惯性力,只说存在惯性,因为在惯性坐标系中,我们研究的是物体,而非坐标系(即假定坐标系相对地球静止),当我们把坐标系也考虑在内时,当坐标系运动,就产生了惯性力f,这种力作用会假想作用在物体上,只是与运动方向相反。
, o4 v3 Y7 `- K6 ^9 Q* K% ~: [* r
54
NRF24L01工作在2.4GHz的频段。由于频段频率较高,所以传输速率较快,为2Mbps。
6 i: i% V- B. Z! V& ~% Q; R
55
STM32的闪存模块有:主存储器、信息块和闪存存储器接口寄存器3个部分构成。主存储器用来存放代码和const常量。

7 }7 R9 N9 l, i: F, j; G& Q3 L* c
信息块由两个部分组成:启动程序代码、用户选择字节。其中启动程序代码为ST公司自带的启动程序,用于串口下载。最后的闪存存储器接口寄存器用于控制整个对闪存区域的操作。

  d) }% c' T8 U' e& z% O/ b
56
CPU的运行速度比FLASH的操作速度快的多,一般FLASH的最快访问速度≤24Mhz。如果CPU的速度超过这个频率,那么在读取FLASH的时候必须加入等待时间(FLASH_ACR设置(。

( q4 k- K; g- ~* F57
FLASH编程时,写入必须为半字(16位)。并且在写入的时候必须保证所写区域的数据必须为0xFFFF。

! U0 M/ Z$ S( G58
STM32的FSMC有HADDR[27:0],其中[27:26]用来选择BANK区域的4个不同块。剩下的[25:0]则用来连接外部存储区域的地址线FSMC_A[25:0]。

  V$ U" p6 R1 I4 n
如果数据宽度是8bit,此时的HADDR[25:0]和FSMC_A[25:0]是完全对应的。如果数据宽度是16bit,此时的HADDR[25:1]和FSMC_A[24:0]是对应起来的。需要注意:无论数据宽度是多少,外部的FSMC_A[0]和A[0]总是对应的。

6 ~% K$ ^# a8 L$ U  C( l
59
关于LB和UB的信号控制是由硬件自动控制的,当AHB的数据宽度小于外部存储器的数据宽度时,此时LB和UB的控制信号自动产生(比如字节读取/写入16bit的外部存储器)。
# x# j) l6 ?5 R0 v$ N) g2 a" V! t
60
__attribute__ (函数属性、变量属性、类型属性等)。如果在使用SRAM时,可以采用u32 sram_array[xx] __attribute__ ((at(0x68000000))代表将外部SRAM的空间全部给了sram_array这个变量,他具有在at0x68000000这个地址的属性。" A* K  j  `. I6 u" t
/ k( {$ c8 P, O7 h, T
往里面写值就直接在SRAM里面写值。
( u% M8 ?7 c0 h* K, s( M* Z1 `) R
61
微信图片_20220903155243.png
" P, o2 T2 {7 R! {; O& y
内存管理有一种方式叫做分块式内存管理。
1 H2 o: {9 }  J$ R
注意表中的分配方向,从顶到底。每一项对应一个内存块。里面的数值代表了内存池的状态:如果为0,表示该内存没有被分配;如果非0,那么数值的大小就表示了该块内存被连续占用的内存数。

$ d6 ^5 x5 h5 f1 }" _: c
比如说数值为20,意思是包括该项在内的内存块被连续占用了20块分给了指针。

6 b/ L: D! d5 V2 Y, r& Y2 F# v
62
SD卡的分类:

% t8 [- z, Z5 R) V2 g# Z
微信图片_20220903155239.png

0 t) K: G( b9 U1 N) K
一般的SD卡支持两种传输模式:SD卡模式(SDIO)、SPI模式。显然前面一种是专用模式,所以速度比较快。
2 M5 y) _7 x9 @" K8 r
63
常用的汉字内码系统有GB2313、GB13000、GBK、BIG5(繁体)。其中GB2313只有几千个汉字,而GBK则有2万多汉字。
% u2 d# @" A/ k1 I4 n/ J
64
要显示汉字,采用的方式如果用点阵的形式是不可取的,因为这无法查找汉字。采用的方式就是内码系统。

( V- w/ {& \1 v* K& X
GBK标准中,一个汉字对应2个字节:前者称为区(0x81~0xFE)后者为(0x40~0x7E)和(0x80~0xFE)。前者有126个区,后者有190,那么可以显示的汉字数量有126*190=23940个。
, c' c' c$ p0 ^$ c, v0 T
根据这两个值用来查找字库,字库中存放的还是每个汉字的点阵数据。

- x9 d" d! L3 J  r
这个字库非常大,如果是16*16的字体,那么一个字体就需要32个字节,如此说来需要23940*32=748K的空间,可见非常大,所以需要外部的Flash来存储这个字库。

5 M5 r+ Q1 e2 x8 a. |1 [) C6 z
65
由于汉字内码系统不具有国际通用性,但是Unicode几乎把所有的语言都放置进来,这样在单片机中操作汉字时,就需要将GBK和Unicode转化。
) d9 c3 j% t5 F0 o  O5 {
尤其是在FATFS中,创建中文文件名和读取中文文件信息时需要将Unicode换转为GBK后再进行修改操作,再反转换成Unicode保存修改。

. j% r# {( c; R" N. f2 K& L
这么说,两者的存在是由于标准的不统一,并且Unicode中只有6064个汉字,而GBK显然是一种汉字扩展。
3 [" H. i) \( \1 |5 d; y
66
BMP图片编码的顺序是从左到右,从下到上。

% O: J3 U8 R" p; C/ u67
VS1053是一款高性能的数字音频解码芯片,从SD卡中将mp3等音乐音频文件通过SPI送给VS1053后,由其进行音频解码,输出音乐给耳机。

% b6 S" D: {9 r
耳机驱动可以采用TDA1308芯片,这款芯片为AB类耳机驱动芯片。

4 o9 r+ A* E/ h3 [  q8 U- Z" f1 Q
微信图片_20220903155235.jpg
( [, _0 o, o, N3 l0 g
68
IAP(In Application Programming)在应用编程是为了后期开发更新程序方便而提出的概念。具体的实现方法如下图所示:

& n9 _& G# O7 T! }$ r
微信图片_20220903155233.jpg
, I9 X2 E% q, {: X& G' z' ^/ i' O
在普通编程中,flash中的code是通过JTAG和ISP等工具下载到单片机中。
! l2 ]( }$ P, s9 R( X- O3 T) Q# H
而在IAP编程中,flash被分区为A和B两个区域,A区域只允许用USB/USART等方式下载,此区域作为更新B区域的代码用。

6 q4 Z, t& }$ j& y7 m
B区域则是用户的code区域,真正的代码在这里被执行,放置的就是app。

% K  F; n6 M( x7 o# b5 b
微信图片_20220903155230.jpg
+ |. `& \$ \. I* d: n: K9 Y9 S
上图表示STM32正常运行的流程图,可以看到上电复位后系统从0x80000004处开始运行程序,这里放置的是复位中断向量,然后跳转至复位中断程序入口后再跳转至main函数运行用户的程序。

* j- g/ [& D# B, ^, P+ o5 W) _' P9 J
微信图片_20220903155228.jpg
" ?9 {" i0 M3 b& t9 A) p5 J0 Z
上图表示加入IAP后的STM32程序运行流程图。可以看到上电复位后跳到IAP程序的main函数处运行IAP过程。这个过程就是把下面灰底色块的程序代码烧进B区域à代码更新。

: V1 B( e# a* W' T
后面的过程和STM32正常运行一样,如果出现中断请求,还是跳转到A区域中的中断向量表中,然后再跳转到B区域的中断服务入口。
' t5 N* t2 i( D) R- {) }" j
69
USB有四根线,VCC、GND、D+、D-。在USB主机上,D+和D-均通过一个15K的电阻接地,这样两条线均为低电平。
5 ^' {$ r1 f4 A/ m9 u
在USB设备中,对于高速设备会在D+通过一个1.5K的电阻接到VCC,而低俗设备会在D-通过一个1.5K的电阻接到VCC。

6 j1 }4 D5 v2 F! W$ V
这样主机就可以通过D+和D-的高电平的到来来检测是否有设备接入,并且识别高低速设备。

8 y, k+ @% }. [7 I4 n* r- D3 j
70
UCOSII是一种实时操作系统,具有执行效率高、占有空间小(最小内核2KB)、实施性能优良、扩展性强和移植性强等优点。

; H, T, ~  N# W- O. C  H( k
UCOS具有多任务并发工作的特点。注意,任何时候只有一个任务能够占用CPU。并发只是任务轮流占用CPU而不是同时工作。最大支持255个任务并发工作。

7 P8 n3 Q0 G9 \7 E" [7 T
9 K- r, ~5 A; c( s/ l
: Q: U6 `! u) l转载自:电子产品世界/ p3 W1 v; L+ U0 s4 F! g+ K6 ^
赞 收藏 评论0 发布时间:2022-9-3 15:53

举报

0个回答

所属标签

相似技术帖

官网相关资源

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