打印
[STM32F4]

物联网之STM32开发一

[复制链接]
楼主: xiyaoko2365
手机看帖
扫描二维码
随时随地手机跟帖
21
xiyaoko2365|  楼主 | 2022-11-20 23:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
控制处理器处于线程模式时,使用哪个堆栈:

        =0,使用MSP

        =1,使用PSP

        处理器模式时,固定使用MSP

使用特权

评论回复
22
xiyaoko2365|  楼主 | 2022-11-20 23:09 | 只看该作者
Cortex-M0异常和中断:

Cortex-M0 处理器最多支持 32 个外部中断(通常称为 IRQ)和一个不可屏蔽中断(NMI),另外 Cortex-M0 还支持许多系统异常(Reset、HardFault、SVCall、PendSV、SysTick),它们主要用于操作系统和错误处理,参见下表

使用特权

评论回复
23
xiyaoko2365|  楼主 | 2022-11-20 23:09 | 只看该作者

使用特权

评论回复
24
xiyaoko2365|  楼主 | 2022-11-20 23:10 | 只看该作者
Cortex-M0指令集:

ARM 处理器支持两种指令集:ARM 和 Thumb。

EPSR 寄存器的 T 标志位负责指令集的切换,Cortex-M0只支持Thumb指令。

ARM指令集:32位精简指令集; 指令长度固定; 降低编码数量产生的耗费,减轻解码和流水线的负担。

Thumb指令集:Thumb指令集是ARM指令集的一个子集; 指令宽度16位; 与32位指令集相比,大大节省了系统的存储空间; Thumb指令集不完整,所以必须配合ARM指令集一同使用。

注:Thumb 与 ARM 相比,代码体积小了 30%,但性能也低了 20%。2003 年,ARM 公司引入了 Thumb-2 技术,具备了一些 32 位的 Thumb 指令,使得原来很多只有 ARM 指令能够完成的功能,用 Thumb 指令也可以完成了。Cortex-M0 基于的 ARMv6-M 体系结构,该体系结构的处理器只是用了16位Thumb指令和部分32位Thumb指令

使用特权

评论回复
25
xiyaoko2365|  楼主 | 2022-11-20 23:11 | 只看该作者
认识STM32

内容概述:

STM32的应用

STM32产品的介绍

STM32产品命名规范

STM32F0体系架构

STM32:从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星,它受宠若娇,大受工程师和市场的青睐,无芯能出其右。

使用特权

评论回复
26
xiyaoko2365|  楼主 | 2022-11-20 23:12 | 只看该作者
STM32的应用:

可穿戴 物联网 四轴飞行器 工业控制 医疗电子 汽车电子 电力系统 石油系统 燃气系统 …….

使用特权

评论回复
27
xiyaoko2365|  楼主 | 2022-11-20 23:12 | 只看该作者
STM32产品介绍:

使用特权

评论回复
28
xiyaoko2365|  楼主 | 2022-11-20 23:14 | 只看该作者
STM32产品命名规范:

使用特权

评论回复
29
xiyaoko2365|  楼主 | 2022-11-20 23:14 | 只看该作者
STM32F0系统架构:

使用特权

评论回复
30
xiyaoko2365|  楼主 | 2022-11-20 23:15 | 只看该作者
系统主要由以下几个模块组成 :

    二个主模块 :

        Cortex-M0 内核及先进高性能总线 (AHB bus)

        通用 DMA ( GP-DMA -- general-purpose DMA)

    四个从模块 :

        内部 FLASH

        内部SRAM

        专门用于连接 GPIO 口的 AHB2

        AHB 到 APB 的桥 , 所有的外设都挂在 APB 总线上

使用特权

评论回复
31
xiyaoko2365|  楼主 | 2022-11-20 23:15 | 只看该作者
STM32F0硬件平台介绍

使用特权

评论回复
32
xiyaoko2365|  楼主 | 2022-11-20 23:17 | 只看该作者
STM32开发环境搭建

内容概要:

Keil MDK-ARM简介及安装

STM32CubeMX简介及安装

STM32F0存储器映射

STM32F0启动文件分析

Keil MDK-ARM简介及安装

。。。略

STM32CubeMX简介及安装

。。。略

使用特权

评论回复
33
xiyaoko2365|  楼主 | 2022-11-20 23:18 | 只看该作者
STM32F0存储器映射

内容概述:

Cortex-M0存储器映射

STM32F0存储器映射

寄存器的访问方式

使用特权

评论回复
34
xiyaoko2365|  楼主 | 2022-11-20 23:19 | 只看该作者
Cortex-M0存储器映射:



存储器本身没有地址,给存储器分配地址的过程叫存储器映射

注:被控单元的FLASH,RAM和AHB到APB的桥(即片上外设),这些功能部件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们

使用特权

评论回复
35
xiyaoko2365|  楼主 | 2022-11-20 23:19 | 只看该作者

STM32F0存储器映射:

可寻址4GB字节空间

多达64KB片上闪存

多达8K的SRAM

使用特权

评论回复
36
xiyaoko2365|  楼主 | 2022-11-20 23:21 | 只看该作者
STM32F05x 存储器映像和外设寄存器编址:在芯片手册上可查到

使用特权

评论回复
37
xiyaoko2365|  楼主 | 2022-11-20 23:21 | 只看该作者
寄存器访问:

以GPIOA寄存器组为例,读写ODR寄存器方法:

已知GPIOA的起始地址为0x48000000

各寄存器的偏移地址如下:

MODER;             /*Address offset: 0x00 */

OTYPER;            /*Address offset: 0x04 */

OSPEEDR;        /*Address offset: 0x08 */

PUPDR;             /*Address offset: 0x0C */

IDR;                    /*Address offset: 0x10 */

ODR;                 /*Address offset: 0x14 */

BSRR;              /*Address offset: 0x18 */

LCKR;              /*Address offset: 0x1C */

使用特权

评论回复
38
xiyaoko2365|  楼主 | 2022-11-20 23:22 | 只看该作者
第一种方式:对地址进行宏定义

#define     GPIOA_BASE        ( (unsigned int ) 0x48000000 )
#define     GPIOA_ODR         ( GPIOA_BASE  +  0x14 )

读操作
val  = *(unsigned int *) GPIOA_ODR  ;

写操作
*(unsigned int *)  GPIOA_ODR = val  ;

使用特权

评论回复
39
xiyaoko2365|  楼主 | 2022-11-20 23:23 | 只看该作者
改进

#define     GPIOA_ODR    ( *(unsigned int *) ( GPIOA_BASE  +  0x14 ))

val  = GPIOA_ODR  ;    //读
GPIOA_ODR = val  ;     //写

使用特权

评论回复
40
xiyaoko2365|  楼主 | 2022-11-20 23:24 | 只看该作者
第二种方式:用结构体封装寄存器

用上面的方法去定义地址,还是稍显繁琐、根据我们每一类外设对应的寄存器组地址都是连续增长的特点,我们引入 C 语言中的结构体语法对寄存器进行封装

typedef struct {
uint32_t                MODER;                 /*Address offset: 0x00 */
uint32_t                OTYPER;         /*Address offset: 0x04 */
uint32_t                OSPEEDR;         /*Address offset: 0x08 */
uint32_t                PUPDR;                 /*Address offset: 0x0C */
uint32_t                IDR;                 /*Address offset: 0x10 */
uint32_t                ODR;                 /*Address offset: 0x14 */
uint32_t                BSRR;                 /*Address offset: 0x18 */
uint32_t                LCKR;                 /*Address offset: 0x1C */
} GPIO_TypeDef;

#define     GPIOA_BASE        ( (unsigned int ) 0x48000000 )
#define     GPIOA         ((GPIO_TypeDef *) GPIOA_BASE)
注:我们访问GPIOA的控制寄存器组时、直接使用宏定义好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则