[应用相关]

STM32经验汇总 (转)

[复制链接]
745|37
手机看帖
扫描二维码
随时随地手机跟帖
shjuturt|  楼主 | 2022-6-29 14:38 | 显示全部楼层 |阅读模式
本帖最后由 shjuturt 于 2022-6-29 15:11 编辑

1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接⾼速设备;
2、Stm32f10x.h相当于reg52.h(⾥⾯有基本的位操作定义),另⼀个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头
⽂件的作⽤;
3、 HSE Osc(High Speed External Oscillator)⾼速外部晶振,⼀般为8MHz,HSI RC(High Speed InternalRC)⾼速内部
RC,8MHz;
4、 LSE Osc(Low Speed External Oscillator)低速外部晶振,⼀般为32.768KHz,LSI RC(Low Speed InternalRC)低速内部晶
振,⼤概为40KHz左右,提供看门狗时钟和⾃动唤醒单元时钟源;

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 14:39 | 显示全部楼层
5、 SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL;
6、 MCO[2:0]可以提供4源不同的时钟同步信号;
7、 GPIO⼝貌似有两个反向串联的⼆极管⽤作钳位⼆极管;
8、 总线矩阵采⽤轮换算法对系统总线和DMA进⾏仲裁
9、 ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥
10、在使⽤⼀个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 14:39 | 显示全部楼层
11、数据字节以⼩端存储形式保存在存储器中
12、 内存映射区分为8个⼤块,每个块为512MB
13、 FLASH的⼀页为1K(⼩容量和中容量),⼤容量是2K。
14、 系统存储区(SystemMemory)为ST公司出⼚配置锁死,⽤户⽆法编辑,⽤于对FLASH区域进⾏重新编程。所以我们烧写程序务必
选择BOOT1 = 0,这样通过内嵌的⾃举程序对FLASH进⾏烧写,⽐如中断向量表和代码
15、 STM32核⼼电压为1.8V

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 14:59 | 显示全部楼层
16、 STM32复位有三种:系统复位、上电复位、备份区域复位。其中系统复位除了RCC_CSR中的复位标志和BKP中的数值不复位之
外,其他的所有寄存器全部复位。触发⽅式例如外部复位、看门狗复位、软件复位等;电源复位由于外部电源的上电/掉电复位或者待机模
式返回。复位除了BKP中的寄存器值不动,其他全部复位;备份区域复位的触发源为软件复位或者VDD和VBAT全部掉电时。
17、 单⽚机复位后所有I/O⼝均为浮空输⼊状态
18、 68个可屏蔽中断通道,16个可编程优先级,16个内核中断,⼀共68+16=84个中断。103系列只有60个中断,107系列才有68个
中断
19、 系统启动从0x00000004开始,0x000 0000保留
20、 (NestedVectored Interrupt Controller)NVIC嵌套向量中断控制器,分为两种:抢先式优先级(可嵌套)和中断优先级(副优先
级,不能嵌套)。两种优先级由4位⼆进制位决定。分配下来有⼗六种情况:

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:00 | 显示全部楼层
21、0号抢先优先级的中断,可以打断任何中断抢先优先级为⾮0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、
3、4号的中断;……;构成中断嵌套。如果两个中断的抢先优先级相同,谁先出现,就先响应谁,不构成嵌套。如果⼀起出现(或挂在那
⾥等待),就看它们2个谁的⼦优先级⾼了,如果⼦优先级也相同,就看它们的中断向量位置了。原来中断向量的位置是最后的决定因

22、 上电初始化后AIRC初始化为0,为16个抢先式优先级,但是由于所有的外部通道中断优先级控制字PRI_n为0,所以抢先式优先级相
同,此时就不能嵌套了
23、 NVI中有ISER[2](Interrupt Set-Enable Registers),ICER[2](Interrupt Clear-Enable Registers),ISPR[2](Interrupt
Set-Pending Registers),ICPR[2](Interrupt Clear-Pending Registers),IABR[2](Active Bit Registers),IPR[15]
(InterruptPriority Registers)定义。其中ISER和ICER分别为中断使能和中断失能寄存器,都是写1来使能/失能中断的。为什么写1?
为什么不采⽤⼀个寄存器⽽⽤两个寄存器来表⽰中断使能/失能状态?由于硬件,写0⽐较复杂,并且可能造成其他位的状态改变,所以⽤1
来表⽰打开或者关断是⽐较合理的
24、 中断标志位需要⼿动清除;
25、 配置外围器件的⼀般步骤:1、打开端⼝时钟。2、定义初始化结构体并初始化。3、调⽤

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:00 | 显示全部楼层
26、串⼝的奇偶校验:如果是奇偶校验,那么USART_InitStructure.USART_WordLength= USART_WordLength_9b;这个数据的长
度必须设定为9位!
27、ADC的规则组可以⾃定义转换通道顺序和转换的通道个数。在实际应⽤中,有时候希望有⼀些特别的通道具有很⾼的优先权,需要在
规则组进⾏转换的时候强制打断,进⾏另⼀个通道的转换,这样⼀组通道,叫做注⼊组。
28、定时器的输出⽐较模式:Timing(冻结,什么都不做,普通定时),Active(OCxREF输出⾼电平有效),Inactive(OCxREF输出低电
平),Toggle(⽐较成功后翻转电平)。
29、STM32的定时器从0开始计数,满⾜⼀些条件,给出标志位(⽐如匹配成功、时间更新、溢出等)然后从0开始计数。这⼀点和51不
同。
30、OCx=OCxREF+极性

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:01 | 显示全部楼层
31、⾃动装载寄存器和影⼦寄存器:前者相当于51当中的溢出设定数值。⽽影⼦寄存器顾名思义是影⼦,就是寄存器的另⼀分copy。实际
起作⽤的是影⼦寄存器,⽽程序员操纵的则是⾃动装载寄存器。如果APPE位使能,表明⾃动装载寄存器的值在下⼀次更新事件发⽣后才写
⼊新值。否则,写⼊⾃动装载寄存器的值会被⽴即更新到影⼦寄存器。
32、RCC_PCLK1Config(RCC_HCLK_Div4);PCLK1的4分频给定时器基准时钟
33、定时器配置:RCC、NVIC、GPIO(OC输出或者PWM)、TIMx
34、通⽤定时器可以输出4路不同的PWM,⾼级定时器可以输出4路不同的PWM外,还可以输出3路互补的PWM信号(驱动三相电
2+4
机),⼀共有7路。这样算出来STM32可以产⽣30路PWM=7
4
35、

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:02 | 显示全部楼层
36、⾼级定时器时钟源挂在了APB2上,⽽通⽤定时器挂在APB1上。AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号
2倍)→通⽤定时器时钟信号(72mhz)。如果APB1没有分频,那么通⽤定时器的时钟信号频率就直接等于APB1
(36mhz)→倍频器(
的时钟频率,没有上述的倍频器
2过程。TIM_SetAutoreload()⽤来改变PWM的频率,TIM_SetCompare1()⽤来改变占空⽐
37、有刷电机⼀般启动⼒矩⼤⼀些,⽆刷电机启动⼒矩⼩,运⾏起来⼒矩⼤。有刷电机采⽤电刷机械电流换向,⽽⽆刷电机则通过霍尔传
感器测出转⼦的电流来判断电机的运动位置和⽅向,返回给控制回路。
38、死区是必须要有的,因为这涉及到电路的短路问题。晶闸管在换向的时候需要死区时间来彻底关断线路
39、刹车功能⽤来在控制回路出现问题时,硬件⾃动给予外部电机进⾏紧急刹车制动,反应在PWM上持续给出⼀个固定的占空⽐?(三相
驱动也是?)
40、PWM输出最好采⽤PWM模式,其他的⽐较输出模式相位会慢慢改变,不精准;

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:03 | 显示全部楼层
41、对FLASH的读写需要先解锁后加锁。FLASH写0容易,写1难。
42、下载程序有两种⽅式,⼀种为ICP(在线编程),适⽤于JTAG或SWD协议下的烧写程序。另⼀种成为IAP(在应⽤编程),适⽤于很
多接⼝(USB,串⼝,CAN)下载到存储器中,IAP允许在程序运⾏时重新烧写FLASH
43、FLASH分为主存储器(这⾥放置⽤户的程序代码)和信息块(启动代码),除此之外,还有⼀部分叫做系统存储器,这⼀块⽤户不可
操作,为ST公司出产后固化,为系统的上电⾃举程序
44、FLASH在写的时候,⼀定不能读,如果有读操作,那么将会锁住总线
45、对FLASH操作时,必须打开HIS;

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:03 | 显示全部楼层
46、STM32有两种看门狗(IWDG独⽴看门狗《独⽴时钟》,WWDG窗⼝看门狗《由APB1分频⽽来》)
47、SPI的的最⾼频率为36MHz(fpclk/2)
48、 TIM1和TIM8⾼级定时器在输出PWM时,需要配置⼀下主输出功能(CtrlPWMOutputs)才能输出PWM。其他的通⽤定时器不需
要这样配置。但是TIM6和TIM7没有PWM输出功能。
49、Code为程序代码部分
RO-data 表⽰程序定义的常量(如:const temp等);
RW-data 表⽰已初始化的全局变量
ZI-data 表⽰未初始化的全局变量,以及初始化为0的变量
Code, RO-data,RW-data…flash
RW-data, ZIdata…RAM
初始化时RW-data从flash拷贝到RAM
50、STM32F103ZET6有144个引脚(Z为144),其中,可⽤IO⼝为112个(7X16=112,ABCDEFG⼝);

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:04 | 显示全部楼层
51、ARM公司只⽣产内核标准,不⽣产芯⽚。ST、TI这样的公司从ARM公司那⾥购买内核,然后外加⾃⼰的总线结构、外设、存储器、
时钟和复位、I/O后就组成了⾃⼰的芯⽚。
52、CMSIS标准⽤于在向上的⽤户层和下⾯的硬件层交换信息。这个架构当然可以⾃⼰定义,但是这样的话就会没有标准。所以强制使⽤
CMSISI标准来设计芯⽚。通俗点的讲就是系统初始化的函数名称CMSIS定义为SystemInit(),GPIO_ResetBits()等
53、端⼝复⽤和端⼝重映射是两个概念:前者在使能其对应的端⼝和对应的功能时钟即可。后者需要打开AFIO时钟,然后进⾏端⼝的重映
射GPIO_PinRemapConfig()
54、下载程序只能使⽤串⼝1,在硬件设计时⼀定要注意!
55、J-TAG调试频率⼀般设定为2MHz,⽽SWD调试频率可以设定为10MHz

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:06 | 显示全部楼层
56、SysTick的中断实现可以有两种⽅式:循环等待和中断法。推荐⽤循环等待,中断法可能会出问题⽽且占⽤资源。
57、部分I/O引脚是5V兼容的。单个I/O的最⼤驱动电流和灌⼊电流均为25mA。整个芯⽚的电流为150mA
58、KEIL⽀持位段操作,可以利⽤C语⾔中的位段知识定义位段结构体,然后对单独的寄存器进⾏单独的位操作。
59、关于内部上下拉电阻的设置:如果外部的按键另⼀头接地,那么需要设置成上拉电阻。(理由是当没有按下按键时,由于上拉,输⼊
为⾼电平;按下时,由于外部接地,输⼊为低电平。)同理,如果外部的按键另⼀头接⾼电平,那么需要设置成下拉电阻。
60、串⼝中断TXE和TC的区别:其实很明显,⼀个是发送寄存器空标志,⼀个是发送完成标志。因为串⼝在发送的时候⾸先需要把发送寄
存器中的数据移位到移位寄存器(影⼦寄存器)后再串⾏发送出去。所以当发送寄存器DR空时说明现在可能正在往外⾯发送数据,数据可
能还没有发送完。但是发送完成不⼀样,他是在移位寄存器将本次数据全部移位完成后设置的标志位(也就是发送完了停⽌位)。这么看
来:TXE允许程序有更充裕的时间填写TDR寄存器,保证发送的数据流不间断。TC可以让程序知道发送结束的确切时间,有利于程序控制
外部数据流的时序。

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:13 | 显示全部楼层
61、窗⼝看门狗顾名思义有⼀个窗⼝,这个窗⼝的横坐标为时间,意思是在指定的时间范围内刷新寄存器,否则单⽚机复位。窗⼝的上限
由⼈来设定W[6:0],下线定死为0x40Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;Twwdg为超时时间ms,Fpclk1为APB1时
钟KHz,
62、TIMx通⽤定时器有4个独⽴通道,分别可以⽤来作为:输⼊捕获、⽐较输出、PWM⽣成、单脉冲模式输出。
63、定时器的时钟来源有4个:内部时钟(CK_INT),外部时钟模式1(TIx),外部时钟模式2(ETR),内部触发模式(ITRx,这个⽤
来定时器的同步)
64、定时器中断溢出更新时间:Tout=((arr+1)*(psc+1))/Tclk,ARR为⾃动装载寄存器(1~65535)、PSC为分频系数,TCLK为输⼊
时钟频率(Mhz)
65、PWM1和PWM2模式的区别仅在于相位的180度。前者⾼电平时,后者低电平。OCxREF极性就可以实现这个功能。

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:14 | 显示全部楼层
66、定时器输⼊捕捉有⼀个滤波器,顾名思义滤波器起到的就是滤波的作⽤,在捕捉外部信号时,信号可能不稳定,此时需要滤波:当检
测到有外部输⼊时,需要再连续采样N次如果确定为⾼电平/低电平,则触发响应中断(如果开启了的话)。
67、电容触摸屏原理:通过充放电的曲线不同来检测是否被按下。 实际的实验过程中,TPAD可以⽤⼀块覆铜区域来替代,通过电容的充
放电常数来确定是否按下。
68、OLED,即有机发光⼆极管(OrganicLight-Emitting Diode),⼜称为有机电激光显⽰(Organic Electroluminesence
Display,OELD)。下图为OLED的GRAM与屏幕的对应表;
PAGE2单独列出来:
69、USART可以操纵SPI设备。不过最⼤频率只有4.5MHz;

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:15 | 显示全部楼层
73、采样频率越⾼,输⼊阻抗要求越⼩;
74、Stm32进⼊中断的最短周期为6个周期;
75、降低功耗的基本原则:
降低系统时钟;
关闭APB和AHB总线上未使⽤外设的时钟;

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:15 | 显示全部楼层
76、配置相应的寄存器为TIMx选择所需的时钟源;
77、FSMC,即灵活的静态存储控制器。能够与同步或异步存储器和16位PC存储器卡接⼝,STM32的FSMC接⼝⽀持包括SRAM、
NANDFLASH、NORFLASH和PSRAM等存储器;
78、平时所说的U盘⾥的FLASH存储器有两种类型:NANDflash和NOR flash。
79、TFT在操作时,可以当作外部SRAM来操作,这样的话,如果单⽚机有FSMC接⼝,就可以使⽤NORFLASH的SRAM接⼝去控制,
速度⾮常快。
80、Stm32的的FSMC有4个256MB的存储块,⼀共寻址1GB的外部存储器空间;

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:16 | 显示全部楼层
81、在STM32内部,FSMC的⼀端通过内部⾼速总线AHB连接到内核Cortex-M3,另⼀端则是⾯向扩展存储器的外部总线。内核对外部
存储器的访问信号发送到AHB总线后,经过FSMC转换为符合外部存储器通信规约的信号,送到外部存储器的相应引脚,实现内核与外部存
储器之间的数据交互。
82、FSMC中的DATASET和ADDSET的设置需要参看外部存储器的时序图来确定。⼀般⽽⾔,DATASET指的是数据建⽴时间,也就是
读/写信号开始到读/写信号停⽌(上升沿存储数据)的持续时间。(⼀般来说写⽐读快!)。⽽ADDSET指的是地址建⽴时间,指的是⽚选
之后到读/写操作之前的时间,这是针对SRAM来说的,如果操纵的是TFT,不存在地址线,所以此时的ADDSET就是读/写信号结束到RS
电平的转换时间。

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:16 | 显示全部楼层
83、各种异步模式的联系;
84、NOR Flash/PSRAM控制器时序⼩结;
85、FSMC的三个配置寄存器:FSMC_BCRx(⽚选控制配置)、FSMC_BTRx(⽚选时序)、FSMC_BWTRx(⽚选写时序)。
86、 RTC时钟配置必须要⽤到BKP寄存器,BKP寄存器在单⽚机复位、电源复位、待机唤醒模式下是不会更改值的,他的供电由VDD供
电,VDD被切断后⾃动切换⾄外部的VBAT供电。

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:17 | 显示全部楼层
87、 要修改BKP寄存器的值,必须取消其写保护的标志。BKP寄存器在上电时⾃动写保护;
88、STM32有3种省点模式;
三种省电模式中,耗电量从上到下依次降低,待机模式的电流仅为2uA。
89、 从待机模式中唤醒单⽚机等效于让单⽚机复位,但是电源寄存器的值会有⼀个标志位指⽰单⽚机是被唤醒的,不是被复位的。
90、 ADC的时钟不要超过14MHz,否则转换精度会下降。最⼤转换速率为1MHz,即转换周期为1us(14MHz,采样周期为1.5个ADC时
钟)

使用特权

评论回复
shjuturt|  楼主 | 2022-6-29 15:17 | 显示全部楼层
91、 Tcovn=采样时间+12.5个周期。采样时间尽量选长⼀点,这样精度⾼⼀些,但是转换速率下降,这也是有利必有弊。
92、ARM处理器架构进化史;
93、 拿ARM7TDMI来说,T代表Thumb指令集,D是说⽀持JTAG调试(Debugging),M意指快速乘法器,I则对应⼀个嵌⼊式ICE模块。
94、 MMU作为嵌⼊式处理器与应⽤处理器的分⽔岭标志à具有内存管理单元的嵌⼊式处理器可以定位为应⽤处理器。这么说M系列和A系
列的处理器的区别在于A系列的处理器具有MMU单元可以进⾏内存模块的管理。
95、ARM处理器有两种状态:ARM状态和Thumb状态。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

154

帖子

0

粉丝