单片机学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

单片机学习记录

一:寄存器

处理器控制硬件原理

请添加图片描述
单片机内部有处理器及其地址空间(处理读取的范围)。其中处理器可以读写地址空间。

地址空间分为:ROM RAM IO RSV.可分类为程序上(ROM和RAM)和硬件上(IO和RSV)。
ROM只读存储器。用于存储程序,且只读不能篡改数据。这样对数据起一个保护作用,断电重连之后数据不会被清空。
RAM随机存取存储器。用于存储数据和变量,处理器可以进行读写操作。
IO(SFR):地址空间还开辟了地址空间控制不同的硬件去工作。其中每个硬件(比如GPIO UASRT)内部都有寄存器去控制每个硬件的工作。
寄存器是用来控制 控制器的

处理器控制硬件总结:CPU不能直接控制硬件,硬件是由相应的控制器控制的,而每个控制器内部又有寄存器,处理器将各个控制器内部的寄存器映射到CPU的地址空间的一段范围,这样CPU可以通过读写寄存器来控制硬件。

如何用操作寄存器

一:Memory map:地址映射表:将常用的硬件指令映射到cache中。

内容补充
【1】存储器的结构层次
在这里插入图片描述
【2】cache的作用
在这里插入图片描述

因此若要对寄存器查询,首先看地址映射表,查找对应的寄存器地址。

二:查找存储器映像:是地址映射表内各个单元的详细说明

地址映射表一般说明那块是RAM那块是ROM那块是IO(RFC)硬件配置。但是存储器映射会把其细分,比如硬件配置,其会列出每个硬件的相应地址,比如stm32f10x:在这里插入图片描述

三:找想操作对应外设的寄存器地址(以GIPIOA Pin1为例)

在这里插入图片描述

这里注意必须以(32)位方式操作,这样我们在写代码时,必须要用(unsigned int*)+地址来储存相应寄存器地址,用*
(unsigned int* )+地址=来操作寄存器地址(往地址内写内容)。

在这里插入图片描述

偏移地址:偏移地址+起始地址(上面二中图片有提到)
复位地址:用来复位

四:代码层面进行操作(宏操作)

在这里插入图片描述
如果在寄存器连续的前提下可以用数组或者结构体写!!!(重点)
在这里插入图片描述

重点是#define GPX2 (*(gpx2 *)0x11000c40):从右往左看,定义一个结构体类型的指针指向寄存器起始地址。
这样写的原因是操作的寄存器起始地址相同,这样就可以把结构体首地址设置为寄存器的起始地址,而结构体内部的成员代表偏移地址

二:栈

1:栈的概念:

【1】栈的本质是一段内存,程序运行时用于保存一些临时数据,如局部变量,函数的参数,返回值,程序跳转时需要的寄存器等等。
【2】栈和堆的区别在这里插入图片描述
在这里插入图片描述
【2】增栈,减栈,满栈,空栈

增栈和减栈:
增栈是数据存储时由低地址想高地址存储数据。
减栈是数据存储时由高地址向低地址存储数据。

满栈和空栈
满栈和空栈的区别:先存数据还是先移动栈指针。
满栈是先移动栈指针再存
空栈是先存再移动栈指针

所以栈可以分为四类:空增栈,空减栈,满增栈,满减栈
ARM处理器一般用满减栈

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会变身的火娃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值