STM32自学笔记

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、原子位操作:

原子位操作定义在文件中。令人感到奇怪的是位操作函数是对普通的内存地址进行操作的。原子位操作在多数情况下是对一个字长的内存访问,因而位号该位于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:ENABLE

SysTick timer的使能位,1使能Systick timer,0关闭Systick timer

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)、S TK_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_offset x 32) + (bit_number × 4) 其中:

— bit_word_addr 代表别名区域中将映射到目标位的字的地址

— bit_band_base 代表别名区域的起始地址

— byte_offset 代表目标位所在位段区域中的字节编号

— bit_number 代表目标位的位位置(0-7)

存的时候是以字节的形式存的,但是写入与写出是以32位存的,固结果是位数乘以4,

相关文档
最新文档