跳转到主要内容

STM32

stm32之内部功能

judy /

<strong>一、位带操作</strong>

在学习51单片机的时候就使用过位操作,通过关键字sbit对单片机IO口进行位定义。但是stm32没有这样的关键字,而是通过访问位带别名区来实现,即将每个比特位膨胀成一个32位字,通过位带别名区指针指向位带区内容。

支持位带操作的两个内存区的范围是:

0x2000_0000‐0x200F_FFFF(SRAM 区中的最低 1MB)
0x4000_0000‐0x400F_FFFF(片上外设区中的最低 1MB)

位带别名区地址=(A&0xF0000000)+0x2000000+(A&0xFFFFF)<<5+(n≤2)

其中A为位带区地址,n为该字节的第几位。

这里再不嫌啰嗦地举一个例子:

STM32主存储块和信息块的解释

judy /

说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。当然, FLASH还可以用来装数据。

自己收集了一些资料,现将这些资料总结了一下,不想看的可以直接调到后面看怎么操作就可以了。

<font color="blue">FLASH分类 </font>

根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。 主存储块用于存储程序,我们写的程序一般存储在这里。 信息块又分成两部分:系统存储器、选项字节。 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。 选项字节存储芯片的配置信息及对主存储块的保护信息。

<font color="blue">FLASH的页面 </font>

STM32的FLASH主存储块按页组织,有的产品每页1KB,有的产品每页2KB。页面典型的用途就是用于按页擦除FLASH。从这点来看,页面有点像通用FLASH的扇区。

stm32 SPI介绍和配置

judy /

SPI是一种高速的,全双工同步的通信总线,在芯片管脚上占用了四根线,节约了芯片的管脚,同时为PCB的布局节省了空间,提供了方便,因此越来越多的芯片集成了这种通信协议,STM32也就有了SPI接口。
<center><img width="600" src="http://mcu.eetrend.com/files/2018-04/wen_zhang_/100010982-38645-986.png…; alt="stm32 SPI介绍和配置"></center>

有上图可知有四个通信口,两个位移寄存器是同步的,那MISO和MOSI就不难理解了。

SCLK时钟信号,由主设备产生。CS从设备片选信号,由主设备控制。

1、配置相关引脚的复用功能,使能SPI2时钟。

假设我们要使用SPI2,第一步SPI2时钟使能,第二步相关引脚的输出模式(MISO,MOSI,SCLK,(CS没有接外设的话,我们使用软件管理方式))。

STM32与FreeRTOS实现低功耗

judy /

在工作过程中,遇到这样一个产品,它基于 Cortex-M7 内核的 STM32F769 芯片,同时使用了 FreeRTOS 实时操作系统。

由于该产品使用电池供电,因此有着低功耗的需求。

接下来,我将简单描述一下 STM32 与 FreeRTOS 各自的低功耗特性,以及在配合使用时如何去实现产品的低功耗。

<strong>一、STM32F769 芯片的三种低功耗模式</strong>

STM32F769 支持三种低功耗模式,它们分别是:SLEEP、STOP和STANDBY,其省电能力依次增强。

<font color="#33b1c8"> • SLEEP</font>

在 SLEEP 模式下,只有 Cortex-M7 内核停止了工作,而外设仍然在运行。

在进入 SLEEP 模式后,所有中断均可唤醒 MCU,从而退出 SLEEP 模式。

<font color="#33b1c8"> • STOP</font>

STM32 BOOT模式配置以及作用

judy /

<strong>一、三种BOOT模式介绍</strong>

所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。
<center><img width="600" src="http://mcu.eetrend.com/files/2018-03/wen_zhang_/100010849-38091-37.png&…; alt="STM32 BOOT模式配置以及作用"></center>

Main Flash memory
是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

STM32通用定时器功能和用法

judy /

<strong>1. STM32的Timer简介</strong>

STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器 ,看门狗定时器暂不讨论。今天主要是研究剩下的8个定时器。
<center><img src="http://mcu.eetrend.com/files/2018-03/wen_zhang_/100010834-38012-1.jpg&q…; alt="STM32通用定时器功能和用法"></center>

意法半导体新STM32软件开发工具套件让电机控制设计更快、更容易

judy /

通过使最新的STM32 PMSM FOC软件开发套件(SDK)支持STM32Cube开发生态系统(订货代码: X-CUBE-MCSDK),意法半导体进一步简化在STM32* 微控制器上开发先进的高能效电机驱动器的难度。此举为空调、家电、无人机、楼宇自动化、机床、医疗设备、电动车等产品设备工程师研发先进电机驱动带来更多机会,而且无需专门的研发经验。

基于意法半导体上一代永磁同步电机(PMSM)矢量控制(FOC)SDK,5.0 新版固件库结合STM32Cube硬件抽象层(HAL)和底层(LL)架构,简化电机驱动电路的开发、定制和调试过程。此外,免费使用源代码让开发人员能够按照市场需求灵活地设计应用方案,加强电机的控制和定制功能。

作为MC-Workbench 5.0的新功能,图形用户界面(GUI)可以利用STM32CubeMX工作流程创建项目,配置微控制器外设,自动生成初始化代码,还能让用户在项目开发调试过程中实时监视并修改控制回路参数。

关于STM32空闲中断

judy /

在使用串口接受字符串时,可以使用空闲中断(IDLEIE置1,即可使能空闲中断),这样在接收完一个字符串,进入空闲状态时(IDLE置1)便会激发一个空闲中断。在中断处理函数,我们可以解析这个字符串。

需要注意的是,IDLE标志位需要软件清零,否则由于会不断进入中断,而使正常程序无法运行。当再次收到数据时(即RXNE再次置1),等到空闲便会重新进入中断。

在STM32F4中,IDLE标志位清零的过程是:先读SR,再读DR寄存器。

而在STM32L0中, idle标志清除的过程是:对ICR寄存器的IDLECF位写1

IAR在STM32的配置方法

judy /

一、在IAR EWARM中建立工程的步骤:

<strong>1. 建立工程项目文件</strong>

新建一个文件夹来存放整个工程项目,在该项目文件夹下建立几个子文件夹存放不同类别的文件:
i. 将官方模板中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h和空白main.c文件复制到该项目文件夹下;

ii. Obj-存放工程文件,将官方模板中的cortexm3_macro.s、lnkarm_flash.xcl、lnkarm_ram.xcl和stm32f10x_vector.c文件复制到该文件夹下。

iii. library-存放STM32 FWLib文件,将官方提供的固件库library复制到该文件夹下。

<strong>2. 在IAR中建立工程</strong>

打开IAR,在Project菜单下新建工程,把该工程存放在刚刚建立的Obj子文件夹下;

<strong>3. 工程管理</strong>

i. 为了方便项目的管理,在刚建立的项目中添加几个Group用来放置不同类型的文件: