




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、 原子位操作:原子位操作定义在文件中。令人感到奇怪的是位操作函数是对普通的内存地址进行操作的。原子位操作在多数情况下是对一个字长的内存访问,因而位号该位于0-31之间(在64位机器上是0-63之间),但是对位号的范围没有限制。原子操作中的位操作部分函数如下:void set_bit(int nr, void *addr) 原子设置addr所指的第nr位void clear_bit(int nr, void *addr) 原子的清空所指对象的第nr位void change_bit(nr, void *addr) 原子的翻转addr所指的第nr位int test_bit(nr, void *addr) 原子的返回addr位所指对象nr位int test_and_set_bit(nr, void *addr) 原子设置addr所指对象的第nr位,并返回原先的值int test_and_clear_bit(nr, void *addr) 原子清空addr所指对象的第nr位,并返回原先的值int test_and_change_bit(nr, void *addr) 原子翻转addr所指对象的第nr位,并返回原先的值unsigned long word = 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: ENABLESysTick timer的使能位,1使能Systick timer,0关闭Systick timerBit1: TICKINT异常触发使能位,TICKINT=1,STK_VAL计数到0触发异常;TICKINT=0,不触发异常Bit2: CLKSOURCESystick时钟选择位,SysTick = 1,时钟为AHB时钟;0时钟位AHB/8(属于它所挂的AHB中。)Bit16:COUNTFLAG计数为0标志位,当STK_VAL计数到0,此标志位会被置1(2)、STK_LOAD:STK装载寄存器位023(3)、STK_VAL :STK当前值寄存器位023。(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_offset x 32) + (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);十三、存储器的固定存储映射: 代码区域起始地址为0x0000 0000(通过ICode和DCode访问), 代码区域起始地址为0x2000 0000(通过ICode访问)。十三、STM32的自举: 自举就是自己让自己启动吧!有一个BOOT引脚可以控制通过三种方式中的任何一种启动。十四、上电、掉电、欠压复位: 欠压复位:单片机内部电压监控电路形成的异步复位,当电源电压 VDD 电压小于一定触发阈值时,发出复位信号并保持到电源电压大于欠压复位功能恢复电压。欠压复位是用来确保单片机的电源并不在有效工作电压范围之内时内部产生复位过程,使得单片机保持在正确的状态中,欠压复位有三个重要的参数:1) VTR 是欠压复位功能恢复电压,大于该电压值的时单片机的欠压复位状态就结束了;2)VTF 是欠压复位功能触发电压,小于该电压值的时单片机将保持欠压复位状态;3) VHYS 是欠压复位的回差电压, VHYS=VTR - VTF;这个电压的主要目的是防止电源有噪声干扰的时候频繁的反弹,一般在 0.10.2V 之间。如图所示,欠压复位是在电源电压达到 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机为主l RTS:请求发送,PC设备l CTS:清楚发送,设备PCl DTR:数据终端准备好,设备 PCl DSR:数据设备准备好,PC设备l DCD:载波检测十六、关于一键下载原理: CH340G上电后DTR#和RTS#都为高电平,在用MCUISP烧写软件时,我们在软件下方选择“DTR的低电平复位,RTS高电平进BootLoader”,CH340G IC在实际操作时引脚的变化为“DTR#拉高,RTS#拉低”,即软件设置和实际情况是取非的,相反的。十七、关于抢占优先级和响应优先级: STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。(1)、抢占先式优先级(pre-emption priority) 高抢占先式优先级的中断事件会打断当前的主程序/中断程序运行抢断式优先响应,俗称中断嵌套。(2)、副优先级(subpriority)在抢占先式优先级相同的情况下,高副优先级的中断优先被响应;在抢占先式优先级相同的情况下,如果有低副优先级中断正在执行,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应非抢断式响应(不能嵌套)。(3)、判断中断是否是被响应的依据 首先是占先式优先级,其次是副优先级; 占先式优先级决定是否会有中断嵌套;(4)、优先级冲突的处理 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断的嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这个两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。十八、结构体成员变量地址对齐方式:(举例解释说明)举个例子: structchara;/1byteintb;/4bytecharc2/2bytedoubled;/8byteStruct_A;1、8位机里就按字节对齐,那么上述结构体共占用1+4+2+8=15byte。2、在16位机里,变量就按照2字节对齐,比如a这个成员,虽然是个char类型,地址在0x80000000本身只占1字节,但是下一个成员b却不能使用0x80000001这个地址,而必须使用0x80000002,这就是按字长对齐。以上结构体占用的空间也就是2+4+2+8=16字节。3、在32位机中,如果a在0x80000000的话,b只能放在0x80000004,因为这里的字长是4个字节。以上结构体占用空间4+4+4+8=20字节。十九、关于STM32F4的RCC:1、 Fpclk是给串口的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1,以前说过,PCLK1是由系统时钟分频得来,最大36MHZ,PCLK2是直接由系统时钟得来,最大72MHZ。)二十、关于STM32F4的串口:1、 关于波特率的计算:USART_BRR:波特率寄存器,其分为尾数部分DIV_Mantissa和小数部分DIV_fraction,在计算时,尾数部分直接化成二进制存入DIV_Mantissa,而小数部分则要乘以16再存入DIV_fraction。原理如同以下: 已知一个时间段是,求相当于小时分钟。(再者到二进制小数部分第四位得乘以16)二十一、关于串口:1、 当勾选发送新行后,串口调试助手在每次发送一段字符后会自动添加0x0d和0x0a的换行符。2、 串口发送数据丢失:2-1、串口发送第一个字节数据丢失TC:发送完成,当包含有数据的一帧发送完成后,由硬件将该位置位。如USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR然后写入USART_DR)。TC位也可以通过写入0来清除,只有在多缓存通讯中才荐这种清除程序。0:发送还未完成;1:发送完成。注意到这一句:由软件序列清除该位(先读USART_SR,然后写入USART_DR)。 也就是说,要先read USART_SR,然后write USART_DR,才能完成TC状态位的清除。而硬件复位后,串口发送的首个数据之前没有read SR的操作,是直接write DR,也就是说,TC没有被清除掉。因此,2-1、加了printf()函数后,串口发送字节数据有些丢失3、printf()中,%d 是格式化为整型、%s 是格式化为字符串 、%lld 是格式化为长整型。4、%04x 表示按16进制输出数据,最小输出宽度为4个字符,右对齐,如果输出的数据小于4个字符,前补0,如:printf(%04x, 100 ); /输出0064 100的16进制数是645、sprintf()int sprintf( char *buffer, const char *format, argument );参数列表buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。argument.:可选参数,可以是任何类型的数据。二十二、硬件SPI驱动OLED:1、首先得讲解BUSY标志与TXE标志,BUSY标志指的是发送缓冲器已空且发送移位寄存器没有数据在发送,也就是没有数据发送任务;TXE标志仅仅指的是发送缓冲器已空,并不指示发送移位寄存器有没有数据。2、so,问题就来了,为什么STM8用TXE标志就可以发送数据而STM32必须用BUSY标志呢?因为STM8最快速度执行速度最大是16MHZ,虽然用的TXE标志,但等到下一次发送数据时,由于速度慢,这是发送移位寄存器早就没有数据了,只是BUSY0;但STM32就不一样了,若用TXE标志,等到下一次发送数据时,由于STM32以168MHZ的速度执行代码,虽然发送缓冲器没有数据了,但发送移位寄存器还有数据没有发送完,所以,这是会出现乱码或者通信失败。二十三、FSMC(灵活的静态存储控制器): 其支持SRAM、PSRAM、NANDFLASH、NOR FLASH。(1)、SRAM:静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。优点,速度快,不必配合内存刷新电路,可提高整体的工作效率。缺点,集成度低,掉电不能保存数据,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。(2)、PSRAM:PSRAM就是伪SRAM,内部的内存颗粒跟SDRAM的颗粒相似,但外部的接口跟SRAM相似,不需要SDRAM那样复杂的控制器和刷新机制,PSRAM的接口跟SRAM的接口是一样的。容量没有SDRAM那样密度高,但肯定是比SRAM的容量要高很多的,速度支持突发模式,并不是很慢。(3)、NOR FLASH与NAND FLASH: 1、来源(1)、NOR flash是intel公司1988年开发出了NOR flash技术。NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在14MB的小容量时具有很高的成本效益,但是很低的写入和擦除 速度大大影响了它的性能。(2)、Nand-flash内存是flash内存的一种,1989年,东芝公司发表了NAND flash结构。其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。2、NAND flash和NOR flash的性能比较 flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。由于擦除NOR器件时是以64128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以832KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。1、NOR的读速度比NAND稍快一些。2、NAND的写入速度比NOR快很多。3、NAND的4ms擦除速度远比NOR的5s快。4、大多数写入操作需要先进行擦除操作。5、NAND的擦除单元更小,相应的擦除电路更少。3、NAND flash和NOR flash的接口差别 NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。4、NAND flash和NOR flash的容量和成本NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。NOR flash占据了容量为116MB闪存市场的大部分,而NAND flash只是用在8128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。(4)存储器的分类:(5)、异步模式、同步模式、突发模式、复用和非复用模式。 1)、 异步SRAM正如其名称,不是与特定的时钟信号同步运行,而是根据输入信号的状态运行的。因为没有信号表示读取时已确定了有效数据,也没有信号表示写入时已接收到数据,所以,需要获取制造商的数据手册,根据时序图,按“应该已读出有效数据”及“应该能接收数据”这样的条件,进行存储器的设计。 2)、突发(Burst)模式: 包括突发长度(BL)、突发类型(Burst Type)、CAS延迟(CAS Latency)、运行方式(Operating Mode)和写入突发模式。 CAS:列地址选通信号 ;RAS:行地址选通信号CL:CAS的潜伏期,在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL。1、概念:所谓的“突发”是指当我们对一个地址进行寻址并操作完成后,不必再重新对下一个地址进行寻址,而是直接进行操作。这样就节省了很多的时间。具体的情况也很简单就是节省了延时的那段时间。 读:初始化发行地址RCD发列地址CL数据写:初始化发行地址RCD发列地址数据 (CL、RCD)2、突发长度 突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称 BL)。3、 对于存储bank。进行寻址时需要先确定是哪个L-Bank,然后再在这个选定的L-Bank中选择相应的行与列进行寻址。对内存的访问,一次只能是一个L-Bank,而每次与CPU交换的数据就是L-Bank存储阵列中一个“存储单元”的容量。SDRAM内存芯片一次传输的数据量就是芯片的位宽,那么这个存储单元的容量就是芯片的位宽(也是L-Bank的位宽)。上图为4BANK内存颗粒内部结构示意图。内存芯片容量的计算方法为:存储单元数量行数列数(得到一个L-Bank的存储单元数量)L-Bank的数量。在很多内存产品介绍文档中,都会用MW的方式来表示芯片的容量。M是该芯片中存储单元的总数,单位是兆,W代表每个存储单元的容量,也就是SDRAM芯片的位宽(Width),单位是bit。计算出来的芯片容量也是以bit为单位,但用户可以采用除以8的方法换算为字节(Byte)二十四、关于FSMC中定义结构体中变量的地址typedef structvu16 LCD_REG;vu16 LCD_RAM; LCD_TypeDef;/使用NOR/SRAM的 Bank1.sector4,地址位HADDR27,26=11 A6作为数据命令区分线 /注意设置时STM32内部会右移一位对其! 111 1110=0X7E #define LCD_BASE (u32)(0x6C000000 | 0x0000007E)#define LCD (LCD_TypeDef *) LCD_BASE)将这个地址强制转换为 LCD_TypeDef 结构体地址,那么可以得到 LCD-LCD_REG 的地址就是 0X6C00,007E,对应 A6 的状态为 0(即 RS=0),而 LCD- LCD_RAM 的地址就是0X6C00,0080(结构体地址自增),对应 A6 的状态为 1(即 RS=1)。二十四、break ,continue ,return 的区别及作用 1、return 语句的作用 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。 (3) return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。 2. break 语句的作用 (1)break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。 (2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。 3.continue 语句的作用 终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。二十五、探索者开发板上显示屏的一些显示函数技巧1、 关于叠加模式还是非叠加模式:如果字体的背景颜色与屏幕的主体颜色一致,则是叠加模式;字体的背景颜色与屏幕的主体颜色不一致,其颜色分界线呈方框状,则为非叠加模式。2、 12*12 ASCII字符集点阵:长宽都是12个像素点,若转成引文模式,则变成长为12个像素点,宽变为6个像素点,简称1206,其他的格式以此类推。3、 对于长度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论