STM自学笔记.docx
- 文档编号:10958964
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:16
- 大小:348.43KB
STM自学笔记.docx
《STM自学笔记.docx》由会员分享,可在线阅读,更多相关《STM自学笔记.docx(16页珍藏版)》请在冰点文库上搜索。
STM自学笔记
一、原子位操作:
原子位操作定义在文件中。
令人感到奇怪的是位操作函数是对普通的内存地址进行操作的。
原子位操作在多数情况下是对一个字长的内存访问,因而位号该位于0-31之间(在64位机器上是0-63之间),但是对位号的范围没有限制。
原子操作中的位操作部分函数如下:
voidset_bit(intnr,void*addr)原子设置addr所指的第nr位
voidclear_bit(intnr,void*addr)原子的清空所指对象的第nr位
voidchange_bit(nr,void*addr)原子的翻转addr所指的第nr位
inttest_bit(nr,void*addr)原子的返回addr位所指对象nr位
inttest_and_set_bit(nr,void*addr)原子设置addr所指对象的第nr位,并返回原先的值
inttest_and_clear_bit(nr,void*addr)原子清空addr所指对象的第nr位,并返回原先的值
inttest_and_change_bit(nr,void*addr)原子翻转addr所指对象的第nr位,并返回原先的值
unsignedlongword=0;
set_bit(0,&word);/*第0位被设置*/
set_bit(1,&word);/*第1位被设置*/
clear_bit(1,&word);/*第1位被清空*/
change_bit(0,&word);/*翻转第0位*/
二、STM32的GPIO锁定:
三、中断挂起:
因为某种原因,中断不能马上执行,所以“挂起”等待。
比如有高、低级别的中断同时发生,就挂起低级别中断,等高级别执行完,在执行低级别中断。
四、固文件:
固件(Firmware)就是写入EROM(可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。
五、固件库:
包含各个外设或者内核的驱动头文件和C文件。
六、TIx的输入捕获滤波器(消抖):
采样频率fSAMPLING,采样次数N,如果以采样频率对一脉冲进行采样时,如果在N个采样方波里该脉宽不变,则视为一次有效的脉冲,否则视为无效的脉冲。
七、高级定时器的PWM互补输出:
常用于X相电机驱动,其中的互补输出则防止电机的死区出现。
八、Systick系统时钟(以cortex-M3为基准):
其两大作用:
1、产生精确的延时
2、提供给操作系统一个单独的心跳(时钟)节拍
Cortex-M3内核中包含一个Systick时钟,其为一个24位递减计数器,计数器设定初始值并使能后,每经一个系统时钟计数值减一,计数到零时COUNTFLAG置位,计数器装载,触发中断。
3、四大寄存器:
(1)、STK_CTRL:
STK控制寄存器
Bit0:
ENABLE
SysTicktimer的使能位,1使能Systicktimer,0关闭Systicktimer
Bit1:
TICKINT
异常触发使能位,TICKINT=1,STK_VAL计数到0触发异常;TICKINT=0,不触发异常
Bit2:
CLKSOURCE
Systick时钟选择位,SysTick=1,时钟为AHB时钟;0时钟位AHB/8(属于它所挂的AHB中。
)
Bit16:
COUNTFLAG
计数为0标志位,当STK_VAL计数到0,此标志位会被置1
(2)、STK_LOAD:
STK装载寄存器位0~23
(3)、STK_VAL:
STK当前值寄存器位0~23。
(4)、STK_CALIB:
九、死区时间控制:
死区,简单解释:
通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。
每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。
死区控制就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。
这段延迟时间就是死区
PWM的上下桥臂的三极管是不能同时导通的。
如果同时导通就会是电源两端短路。
所以,两路触发信号要在一段时间内都是使三极管断开的。
这个区域就叫做“死区”优点就不用说了。
缺点是使谐波的含量有所增加。
死区时间大,模块工作更加可靠,但会带来输出波形的失真及降低输出效率。
死区时间小,输出波形要好一些,只是会降低可靠性,一般为us级。
最佳的设置是:
在保证安全的前提下,越小越好。
以不炸功率管、输出不短路为目的。
十、换相事件(COM事件):
十一、存储器的编码格式:
1、大端格式:
在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,例如存16位宽的数据0x1234,其存储方式如图:
2、小端格式:
低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节,例如存16位宽的数据0x1234,其存储方式如图:
十二、位段与别区名:
现在STM32的位段、位带别名区就是为了实现对位操作的功能,它的对象可以是SRAM、I/O(STM32F407有复位/置位寄存器实现对位操作)和外设空间。
要实现对这些地方的某一位的操作。
它是这样做的:
在寻址空间(32位对应的地址空间为4GB)的另一地方,取个别名区空间,从这个地址开始处,每一个字(32BIT)对应SRAM或I/O的一位。
使用位段的好处:
可以把代码缩小,速度更快,效率更高,更安全。
一般操作要6条指令,而使用位带别名区只要4条指令。
一般操作是读-改-写的方式,而位带别名区是写操作。
防止中断对读-改-写的方式的影响。
映射公式为:
bit_word_addr=bit_band_base+(byte_offsetx32)+(bit_number×4)其中:
—bit_word_addr代表别名区域中将映射到目标位的字的地址
—bit_band_base代表别名区域的起始地址
—byte_offset代表目标位所在位段区域中的字节编号
—bit_number代表目标位的位位置(0-7)
存的时候是以字节的形式存的,但是写入与写出是以32位存的,固结果是位数乘以4,
其中SRAM和外设的位带区域和位带别名如下图:
alias:
别名;
十三、SYSCFG寄存器:
想要操作SYSCFG模块寄存器必须先使能SYSCFG模块时钟,RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
十三、存储器的固定存储映射:
代码区域起始地址为0x00000000(通过ICode和DCode访问),代码区域起始地址为0x20000000(通过ICode访问)。
十三、STM32的自举:
自举就是自己让自己启动吧!
有一个BOOT引脚可以控制通过三种方式中的任何一种启动。
十四、上电、掉电、欠压复位:
欠压复位:
单片机内部电压监控电路形成的异步复位,当电源电压VDD电压小于一定触发阈值时,发出复位信号并保持到电源电压大于欠压复位功能恢复电压。
欠压复位是用来确保单片机的电源并不在有效工作电压范围之内时内部产生复位过程,使得单片机保持在正确的状态中,欠压复位有三个重要的参数:
1)VTR是欠压复位功能恢复电压,大于该电压值的时单片机的欠压复位状态就结束了;
2)VTF是欠压复位功能触发电压,小于该电压值的时单片机将保持欠压复位状态;
3)VHYS是欠压复位的回差电压,VHYS=VTR-VTF;这个电压的主要目的是防止电源有噪声干扰的时候频繁的反弹,一般在~之间。
如图所示,欠压复位是在电源电压达到VTR以后,内部的计数器才工作,因此在上电复位完成以后,欠压复位继续工作直至欠压复位完成既定的延迟后,整个单片机才会退出复位状态;因此内部引入欠压复位电路对于解决电源电压上升率过快和过慢的情况都有很大的帮助。
需要注意的是低电压的复位电平阈值是和供电电压相关的,并且按照比例设定的无法更改,因此如果系统上不合则需要考虑外部的复位方法。
十四、BOOT设置(BOOT1,BOOT0):
1)(BOOT1=x,BOOT0=0):
主FLASH区,即扇区,正常工作模式。
2)(BOOT1=0,BOOT0=1):
系统存储器,芯片内部一块特定的区域,该区域出厂时预置了一段Bootloader,即ISP程序,这部分已经被固化了,无人能改。
这也是利用串口下载时的第一步:
BOOT1=0,BOOT0=1。
ISP下载模式。
3)(BOOT1=1,BOOT0=1):
SRAM,芯片内置RAM,即内存。
调试模式。
十五、关于串口:
方向以PC机为主
RTS:
请求发送,PC→→设备
CTS:
清楚发送,设备→→PC
DTR:
数据终端准备好,设备→→PC
DSR:
数据设备准备好,PC→→设备
DCD:
载波检测
十六、关于一键下载原理:
CH340G上电后DTR#和RTS#都为高电平,在用MCUISP烧写软件时,我们在软件下方选择“DTR的低电平复位,RTS高电平进BootLoader”,CH340GIC在实际操作时引脚的变化为“DTR#拉高,RTS#拉低”,即软件设置和实际情况是取非的,相反的。
十七、关于抢占优先级和响应优先级:
STM32(Cortex-M3)中有两个优先级的概念:
抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
(1)、抢占先式优先级(pre-emptionpriority)
高抢占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。
(2)、副优先级(subpriority)
在抢占先式优先级相同的情况下,高副优先级的中断优先被响应;
在抢占先式优先级相同的情况下,如果有低副优先级中断正在执行,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断式响应(不能嵌套)。
(3)、判断中断是否是被响应的依据
首先是占先式优先级,其次是副优先级;
占先式优先级决定是否会有中断嵌套;
(4)、优先级冲突的处理
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断的嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。
如果这个两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
十八、结构体成员变量地址对齐方式:
(举例解释说明)
举个例子:
struct{
chara;.:
可选参数,可以是任何类型的数据。
二十二、硬件SPI驱动OLED:
1、首先得讲解BUSY标志与TXE标志,BUSY标志指的是发送缓冲器已空且发送移位寄存器没有数据在发送,也就是没有数据发送任务;TXE标志仅仅指的是发送缓冲器已空,并不指示发送移位寄存器有没有数据。
2、so,问题就来了,为什么STM8用TXE标志就可以发送数据而STM32必须用BUSY标志呢因为STM8最快速度执行速度最大是16MHZ,虽然用的TXE标志,但等到下一次发送数据时,由于速度慢,这是发送移位寄存器早就没有数据了,只是BUSY=0;但STM32就不一样了,若用TXE标志,等到下一次发送数据时,由于STM32以168MHZ的速度执行代码,虽然发送缓冲器没有数据了,但发送移位寄存器还有数据没有发送完,所以,这是会出现乱码或者通信失败。
二十三、FSMC(灵活的静态存储控制器):
其支持SRAM、PSRAM、NAND FLASH、NORFLASH。
(1)、SRAM:
静态随机存取存储器。
它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。
◎优点,速度快,不必配合电路,可提高整体的工作效率。
◎缺点,集成度低,掉电不能保存数据,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。
(2)、PSRAM:
PSRAM就是伪SRAM,内部的内存颗粒跟SDRAM的颗粒相似,但外部的接口跟SRAM相似,不需要SDRAM那样复杂的控制器和刷新机制,PSRAM的接口跟SRAM的接口是一样的。
容量没有SDRAM那样密度高,但肯定是比SRAM的容量要高很多的,速度支持突发模式,并不是很慢。
(3)、NORFLASH与NANDFLASH:
1、来源
(1)、NORflash是intel公司1988年开发出了NORflash技术。
NOR的特点是芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
(2)、Nand-flash内存是flash内存的一种,1989年,东芝公司发表了NANDflash结构。
其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。
Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
2、NANDflash和NORflash的性能比较
flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。
任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。
这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。
1、NOR的读速度比NAND稍快一些。
2、NAND的写入速度比NOR快很多。
3、NAND的4ms擦除速度远比NOR的5s快。
4、大多数写入操作需要先进行擦除操作。
5、NAND的擦除单元更小,相应的擦除电路更少。
3、NANDflash和NORflash的接口差别
NORflash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。
NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。
8个引脚用来传送控制、地址和数据信息。
NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。
4、NANDflash和NORflash的容量和成本
NANDflash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。
NORflash占据了容量为1~16MB闪存市场的大部分,而NANDflash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、SecureDigital、PCCards和MMC存储卡市场上所占份额最大。
(4)存储器的分类:
(5)、异步模式、同步模式、突发模式、复用和非复用模式。
1)、异步正如其名称,不是与特定的时钟信号同步运行,而是根据输入信号的状态运行的。
因为没有信号表示读取时已确定了有效数据,也没有信号表示写入时已接收到数据,所以,需要获取制造商的数据手册,根据时序图,按“应该已读出有效数据”及“应该能接收数据”这样的条件,进行的设计。
2)、突发(Burst)模式:
包括突发长度(BL)、突发类型(BurstType)、CAS延迟(CASLatency)、运行方式(OperatingMode)和写入突发模式。
CAS:
列地址选通信号;RAS:
行地址选通信号
CL:
CAS的潜伏期,在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输出到内存总线上了。
但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL。
1、概念:
所谓的“突发”是指当我们对一个地址进行寻址并操作完成后,不必再重新对下一个地址进行寻址,而是直接进行操作。
这样就节省了很多的时间。
具体的情况也很简单就是节省了延时的那段时间。
读:
初始化→发行地址→RCD→发列地址→CL→数据
写:
初始化→发行地址→RCD→发列地址→数据(CL、RCD)
2、突发长度突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(BurstLengths,简称BL)。
1、对于存储bank。
进行寻址时需要先确定是哪个L-Bank,然后再在这个选定的L-Bank中选择相应的行与列进行寻址。
对内存的访问,一次只能是一个L-Bank,而每次与CPU交换的数据就是L-Bank存储阵列中一个“存储单元”的容量。
SDRAM内存芯片一次传输的数据量就是芯片的位宽,那么这个存储单元的容量就是芯片的位宽(也是L-Bank的位宽)。
上图为4BANK内存颗粒内部结构示意图。
内存芯片容量的计算方法为:
存储单元数量行数×列数(得到一个L-Bank的存储单元数量)×L-Bank的数量。
在很多内存产品介绍文档中,都会用M×W的方式来表示芯片的容量。
M是该芯片中存储单元的总数,单位是兆,W代表每个存储单元的容量,也就是SDRAM芯片的位宽(Width),单位是bit。
计算出来的芯片容量也是以bit为单位,但用户可以采用除以8的方法换算为字节(Byte)
二十四、关于FSMC中定义结构体中变量的地址
typedefstruct
{
vu16LCD_REG;
vu16LCD_RAM;
}LCD_TypeDef;
break语句的作用
(1)break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。
(2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。
语句的作用
终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。
二十五、探索者开发板上显示屏的一些显示函数技巧
1、关于叠加模式还是非叠加模式:
如果字体的背景颜色与屏幕的主体颜色一致,则是叠加模式;字体的背景颜色与屏幕的主体颜色不一致,其颜色分界线呈方框状,则为非叠加模式。
2、12*12ASCII字符集点阵:
长宽都是12个像素点,若转成引文模式,则变成长为12个像素点,宽变为6个像素点,简称1206,其他的格式以此类推。
3、对于长度不符合字节整数倍的边长,比如12,其取模结果会以两个字节的模式生成,最低四位或者最高四位无效(至于是哪个则取决于取模方向)。
但在实际的显示时,(y-y0)==size语句的判断会去除无效的位。
4、对于取模方式:
阴码+逐列式+顺向+C51格式,其扫描方向如下:
5、对于取一个整数的位用于显示,则有以下方法:
temp=(num/LCD_Pow(10,len-t-1))%10;
二十六、关于C编程的技巧
1、对于extern,当一个变量如果在本C文件中被另一个C文件的函数利用,则需要在本C文件中声明时加上一个extern说明,而且不能初始化,比如extern_lcd_devlcddev。
在另外一个C文件中像普通的变量一样定义。
二十七、ADC的理解及注意的地方
(1)、用ADC1规则通道的顺序为CH0,CH1,CH2,CH3,
不启动SCAN模式
在单次转换模式下:
启动ADC1,则
1.开始转换CH1(ADC_SQR的第一通道)
转换完成后停止,等待ADC的下一次启动,继续从第一步开始转换
在连续转换模式下:
启动ADC1,则
1.开始转换CH0(ADC_SQR的第一通道)
转换完成后回到第一步。
启动SCAN模式下
在单次转换模式下:
启动ADC1,则
1.开始转换CH0、
2.转换完成后自动开始转换CH1
3.转换完成后自动开始转换CH2
4.转换完成后自动开始转换CH3
5.转换完成后停止,等待ADC的下一次启动下一次ADC启动后从第一步开始转换
在连续转换模式下:
1启动ADC1,则1.开始转换CH0、
2.转换完成后自动开始转换CH1
3.转换完成后自动开始转换CH2
4.转换完成后自动开始转换CH3
5.转换完成后返回第一步
(2)、若使能自动注入模式,则在规则组的序列转换完成后接着转换注入组。
(3)、在选择IO口引脚多用功能时,IO到内部外设有两条引入线,一是复用功能,二是模拟功能。
如图:
(4)、各个ADC通道的对应表:
通道号ADC1ADC2ADC3
通道0PA0PA0PA0
通道1PA1PA1PA1
通道2PA2PA2PA2
通道3PA3PA3PA3
通道4PA4PA4PF6
通道5PA5PA5PF7
通道6PA6PA6PF8
通道7PA7PA7PF9
通道8PB0PB0PF10
通道9PB1PB1PF3
通道10PC0PC0PC0
通道11PC1PC1PC1
通道12PC2PC2PC2
通道13PC13PC13PC13
通道14PC4PC4PF4
通道15PC5PC5PF5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM 自学 笔记
![提示](https://static.bingdoc.com/images/bang_tan.gif)