【专题1:电子工程师】 之 【4.stm32内核】

  笔者在嵌入式领域深耕6年,对嵌入式项目构建,BLDC电机控制,产品上位机开发以及产品量产和产品售后维护有多年工作经验。经验分享,从0到1, 让我带你从实际工作的角度走进嵌入式成长之路。

  原创不易欢迎大家关注我的微信公众号嵌入式工程师成长之路扫下面二维码
                     【专题1:电子工程师】 之 【4.stm32内核】
所有文章总目录:【电子工程师 qt工程师 做产品过程中遇到的坑】

原创视频总目录:【电子工程师 qt工程师 做产品过程中遇到的坑】

1.CPU选型

1.1.概述

  性能由低到高:cortex-M0–>cortex-M0±->cortex-M3–>cortex-M4–>cortex-M7(M7在智能家居上有应用)。
【专题1:电子工程师】 之 【4.stm32内核】

1.2.CPU选型需要考虑的因素

(1)CPU体积,譬如手持设备和车载设备的CPU体积选择可能就不一样。
(2)CPU的工作温度范围,存储温度范围。

  • 商业级:0-70°
  • 工业级:-40 - 85°
  • 车规级:-40 - 120°
  • 军工级:-40 - 150°

(3)可以进行长期供货的CPU厂家或者代理商。

(4)CPU的性能(频率 架构)。

(5)CPU的功耗,是电池供电还是交流转直流供电。

(6)CPU支持的接口。

(7)CPU的价格。

(8)CPU的上市时间和供货周期。

2.Cortex-M系列CPU的内核

2.1.架构

【专题1:电子工程师】 之 【4.stm32内核】

2.2.复位方式

  • 上电复位:CPU、调试组件、外设都会被复位。
  • 系统复位:CPU、外设会被复位,调试组件不会被复位。
  • 处理器复位:只有CPU会被复位,外设和调试组件不会被复位。

2.3.复位时序

【专题1:电子工程师】 之 【4.stm32内核】
  Cortex-M系列的CPU和经典的ARM7 CPU不一样,Cortex-M复位时,会先读取0地址处的值到MSP主堆栈指针中,然后才开始读取异常向量表里面的复位中断向量。这两步骤是CPU自动完成的。

2.4.启动代码

  传统的单片机因为比较简单,其启动代码相对固定,所以被ic厂家直接固化到了芯片内部,所以在单片机开发时,一上来就是写C语言代码。但32位的MCU比较复杂,其初始化流程也比较复杂,也为了灵活性考虑,厂家就没有固化启动代码到ic内部,需要我们自己编写。
启动代码主要做了以下事情:
(1)初始化堆栈指针 SP;

(2)初始化程序计数器指针 PC;

(3)设置堆、栈的大小;

(4)设置中断向量表的入口地址;

(5)配置外部 SRAM 作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM);

(6)调用 SystemInit() 函数配置 STM32 的系统时钟;

(7)设置C库的分支入口“ __main”(最终用来调用 main 函数);

2.5.中断编程的步骤

(1)初始化中断源

(2)使能中断源/设置优先级

(3)实现中断服务函数

注意:
  进入中断服务程序之后,功能代码执行完毕之后,需要清理中断,这种才能确保下一次有中断进来。

3.功耗管理

3.1.降低功耗的方法

  口诀:不快就慢(降低主频),不用就关(关闭时钟,关闭外设供电)。

(1)降低CPU主频。

(2)降低外设功耗(关闭某些不用的外设、降低外设的工作频率、关闭液晶屏)。

3.2.RTC

  RTC也是MCU内部的一个外设,主要用来计时/存储时间,类似于计数器。组成:晶振、RTC模块、电池。根据晶振频率,RTC每隔一定时间,计数器就会加1,然后将值存在RTC内部的寄存器中,即使主板关电了,电池也能对RTC模块继续供电。每次系统起来时,可以读取RTC内部的寄存器来获取时间。

3.2.资源介绍

(1)32bit、主频为72M、144个引脚(其中有112个IO引脚,大部分的IO口都耐5V(模拟管脚除外))、512K Flash、64kSRAM(这块存储都是集成在soc内部的,如果存储器容量不够,可以外扩)。

(2)2.0~3.6v电源供电。

(3)可外接4~16M的外部高速晶振,一般是外接8M的晶振,因为8M比较好计算延时。

(4)内部有一个8M的高速RC振荡器/晶振。所以外部晶振也不一定非要接,只不过用额外的晶振模块,会使芯片更加稳定。

(5)内部还要一个40KHz的低速RC振荡器,可以用作看门狗的时钟来源。

(6)内部有一个锁相环(PLL),可以进行时钟倍频,一般系统时钟都是通过外部晶振或内部高速振荡器经过PLL倍频得到。

(7)外部可以再接一个低速的32.768K的晶振,用来作为RTC的时钟。

(8)低功耗:有睡眠、停止和待机三种低功耗模式。可用电池为RTC和备份寄存器供电。

(9)MCU内部有3个12位的AD,每个AD多达21个通道。

(10)MCU内部有一个温度传感器,接在了AD的一个采样通道中。

(11)两个12bit的DA。

(12)12个DMA通道(7通道DMA1,5通道DMA2),支持外设:定时器、ADC、DAC、SDIO、I2S、SPI、I2C和USART。

(13)有11个定时器。

  • 4个通用定时器
  • 2个基本定时器
  • 2个高级定时器
  • 1个系统定时器
  • 2个看门狗定时器

(14)13个通信接口。

  • 2个I2C接口(可以接EEPROM/MPU6050陀螺仪/0.96寸OLED屏/电容屏)。
  • 5个串口(可以接ESP8266/WIFI模块/GSM模块/蓝牙模块/GPS模块/指纹识别模块)。
  • 3个SPI接口(串行FLASH/以外网模块W5500/VS1003/1053音频模块/SPI接口的OLED屏/电阻屏)。
  • 1个CAN2.0接口。
  • 1个USB FSMC。
  • 1个SDIO。

注意:
  通过查数据手册看哪个PIN支持哪种接口。
【专题1:电子工程师】 之 【4.stm32内核】
  如果有FT存在,表示该引脚兼容5V,如果是TTA,表示该引脚(一般这类是模拟引脚)只支持3.3V。

3.STM32芯片架构

3.1.芯片架构
【专题1:电子工程师】 之 【4.stm32内核】
3.2.系统结构
【专题1:电子工程师】 之 【4.stm32内核】
  AHB系统总系被分出了两个总线,APB1和APB2,APB2一般是72M,APB1一般是36M。在使用外设时,必须先开始其时钟。

4.STM32最小系统

  最小系统组成:电源电路、复位电路、晶振电路和下载电路四部分组成。
存储器映射和操作寄存器:
【专题1:电子工程师】 之 【4.stm32内核】