你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32Cube下载与使用(三)

[复制链接]
STMCU小助手 发布时间:2022-12-24 17:40
意法半导体ST与ARM的关系
ST公司购买ARM公司的内核,在此基础上添加各种外设,组成STM32芯片
也就是说,在内核之上,所有的外设都是ST公司添加上去的
ST内核通过总线矩阵与外设连接

5a3f58651fc04072a671bbc917cfe770.png

嵌入式C语言中对于地址的操作

0e5314081e394a91936ece9f8df6fa23.png

此时指针pointer是指向寄存器的地址0x4002800

b889d5b2df7e44c0b955043c9c424150.png


按照这样我们可以完成对地址的访问

这些基于指针的地址操作是非常常见的,基于寄存器的编程就是通过指针完成的

进一步地,考虑到定义变量会消耗内存,如果我们大量地定义地址变量,将会消耗大量的内存空间

因此可以使用宏定义,因为宏定义只是纯粹的文本替换

如下图所示

e6fcb177f56b4de884f48696e60bf4ee.png

实际使用中,将GPIO外设的基地址,通过强制类型转换,将其转换成结构体指针的形式

可以简单理解为,建立了结构体与实际内存中的一种映射关系

访问结构体成员(通过->),就等同于访问实际的一小块对应地址

HAL库中GPIO的配置
HAL库中对于GPIO的配置如下

c25a781693dc42729af3677f85f9864a.png

为了理解上述代码,我们可以先看以下代码

8239c9aeb64142a78b0179404c943d4d.png

在上面的代码中,我们首先将1左移3位,然后将其以或运算的方式对寄存器中的内容进行操作,这样就打开了端口B时钟,对应的手册内容如下:

f34dffb1c069456daf0854e18891c939.png

这里对于寄存器地址是以基地址+偏移的形式进行定义的

62e3dba7a8614e3391e787577ad20a9c.png


这个寄存器的低4位,即0 1 2 3位对应0端口,即第0位,对应于GPIO的0 端口

假设我们的需求是:将最低2位配置为10 ,最低3,4位配置为00

也就是说我们的需求是:将寄存器的最低4位配置为2

一种做法是,我们直接将寄存器或上1,且左移0位,即:

  1. GPIOB_CRL |= (2<<0);
复制代码

这样子,最低第2位就是1了

但是这样的操作存在如下问题:因为假设最低4位本来就有数值的话,比如最低4位是1110,那么你直接进行这样的操作,其实只改了最低2位,而最低第3,4位仍然是11,并没有清0。

因此,在此之前,我们还需要对寄存器待配置的位进行清0操作

  1. GPIOB_CRL &= ~(0xf<<(4*0)); // 清除低4位寄存器
复制代码

在这是,因为一次我们是操作4位,比如操作端口0时,我们用到的是第0,1,2,3位,操作端口1,我们用到的是4,5,6,7位,操作端口2,我们用到的是8,9,10,11位,

我们每次都是4位一起操作,所以左移了4*0,如果我们操作端口1,即4,5,6,7位,那么我们就可以左移4*1

0xf是4个1,这个数是整型变量,因此会占32位宽度。也就是说此时除了低4位是1,其他的全部都是0,这时候我们将其取反,则32位中除了低4位是0,其他全部是1。

此时,我们再将这个数整体与到寄存器中,此时这个数的最低4位全是0,与上去之后,相对于寄存器的最低4位被清0了,而其他位保持不变

清完0之后再将我们要的数据或上去,那么我们想要改变的位就会发生改变了,而且不影响其他的位

b1f1e4492b4d4bab987e568c6feccceb.png


ab33b67d75e3440cb21ba26f6083a767.png

STM32的板级支持包
板级支持包 (BSP) (Board Support Package) 是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板

8dc89625449e4ee4bd8ffa6b89a60823.png

板级支持包:对板上的资源功能给出实现,并且提供用户应用程序的接口。以LED灯为例,用户应用程序不需要知道GPIO的硬件特点,他只需要知道调用这个函数,就可以点亮LED灯

我们可以自己定义BSP中的宏



同样,我们可以在main函数中将板级支持包include进来

注意:板级支持包的include位置

04a7745eb8b543378d7481044dab3f65.png

520ea9e74c9c45d3b2ced53836f748a6.png

ARM Cortex M3的哈佛架构
取指和数据分开

aa91e6afac7e4c6099b19a60a1a1adca.png


对于处理器而言,可以将其理解为没有感情的代码执行机器。只要处理器开始工作,就会不断地获 取指令,并且执行

Cortex M3对指令集的丰富

2026aa0d0e614eb88778ae92bb35724b.png


STM32的启动过程
STM32芯片上电以后会触发复位异常

在中断向量表中,处理器根据触发的异常,跳转到中断向量表的特定位置,获取内容并执行

即流程为:

触发异常->中断向量表->用户程序

STM32的中断优先级如下:

$~R~CW2W}}_V2C~TY~7ABZS.png

STM32 Cortex M3中断向量表

3YQ7~FS({YDW(_8W5W~O`QG.png

STM32的启动文件startup_stm32l432xx.s
以STML4为例,其启动文件为startup_stm32l432xx.s

可以查看其注释里的简介
  1. ;*******************************************************************************
  2. ;* File Name          : startup_stm32l432xx.s
  3. ;* Author             : MCD Application Team
  4. ;* Description        : STM32L432xx Ultra Low Power devices vector table for MDK-ARM toolchain.
  5. ;*                      This module performs:
  6. ;*                      - Set the initial SP
  7. ;*                      - Set the initial PC == Reset_Handler
  8. ;*                      - Set the vector table entries with the exceptions ISR address
  9. ;*                      - Branches to __main in the C library (which eventually
  10. ;*                        calls main()).
  11. ;*                      After Reset the Cortex-M4 processor is in Thread mode,
  12. ;*                      priority is Privileged, and the Stack is set to Main.
  13. ;********************************************************************************
复制代码

第一步 设置堆栈的指针

第二步  设置PC指针的值,PC指针指向当前指令+8的位置

第三步 设置中断向量表的入口

第四步 配置系统时钟

第五步 调main函数

首先,设置堆栈大小

261b5ddc4c134d508349c65dc2dee405.png

然后,设置PC指针

注意:DCD指令会为指定的目标分配一块以字为单位的空间,一个字就是4个字节

首先为初始化堆栈分配1个字的空间,然后将对应的内容放进去

6ec9c6835db3456f8c4c5cb6bb765e8b.png


此即复位异常

c81c3b31a8954847a61db60e15533b07.png

bf5bd7f29cc248ab8ac419f7e868ba68.png


在这个Reset_Handler即复位中断的服务函数,其中IMPORT了两个函数,即__main和SystemInit

先将SystemInit函数的地址(即函数名)放到R0寄存器,然后BLX指令跳转到R0寄存器去执行

同样,将__main函数的地址(即函数名)放到R0寄存器,注意接下来使用的是BX跳转,跳过去就不会跳转回来了


02e004ac51c1477abf48bf28e28b3359.png


注意,汇编语言中的[WEAK ]表示弱定义,即我们可以自己去实现的
————————————————
版权声明:CodeForCoffee


收藏 评论0 发布时间:2022-12-24 17:40

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版