用寄存器实现流水灯

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


一,stm的系统架构

在这里插入图片描述
上面的架构图主要包含:

ARM公司提供的内核:cortex-M3

ARM公司提供的总线:Icode,Dcode,System总线

ST公司提供的总线矩阵,DMA控制器,AHB总线,APB总线,以及各个外设控制器

以上整体称之为片上系统(SOC),每个模块各司其职,存在竞争与合作。


二,了解寄存器

1,什么是寄存器

寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。
按照功能的不同,可将寄存器分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,或串行输入、并行输出,十分灵活,用途也很广。
寄存器也就是CPU的一个储存器,当CPU转到寄存器这个地方的时候,就从寄存器里面拿出寄存的东西。

2,寄存器的映射

寄存器映射是在存储器映射的基础上进行的。 以STM32为例,操作硬件本质上就是操作寄存器。 在存储器片上外设区域,四字节为一个单元,每个单元对应不同的功能。 当我们控制这些单元时就可以驱动外设工作,我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。 但若每次都是通过这种方式访问地址,不好记忆且易出错。 这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。 给已分配好地址 (通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射 。

3、stm的地址映射

片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。APB1总线的地址最低,因此片上外设就从这这个地址开始,也称外设基地址

总线基地址
从存储器映射那张图的Block2可以看到,分为4大块,每块都有一个起始地址,这个起始地址就是基地址,然后到下一块起始地址的时候就会和前一块地址出现偏差,这个差值就是偏移量,即相对基地址的偏移量。如下图所示。
在这里插入图片描述
从上图可以看到APB1总线基地址是0x4000 0000,相对外设基地址的偏移量是0,所以此总线也是外设Block2的基地址。

外设基地址

每条总线上都会挂接着很多的外设,这些外设也会有自己的地址范围,XXX 外设的首个地址即最低地址就是XXX外设的基地址,也称作XXX边界地址。有关STM32F1xx 外设的具体边界地址可以参考《STM32F1xx 中文参考手册》P28页, 里面有详细的介绍。 这里我们就以GPIO外设来讲解外设基地址。其他的外设也是同样分析。GPIO外设基地址如下图所示。
在这里插入图片描述
从图中可以知道,外设GPIOx都是挂接在APB2总线上,属于高速的外设,而APB2总线的基地址是0x4001 0000,故GPIOA的相对APB2总线的地址偏移是800

外设寄存器地址

XXX外设的寄存器就分布在其对应的外设地址范围内。这里我们以GPIO外设为例,GPIO是通用输入输出端口的简称,可以通过软件来控制其输入和输出。GPIO有很多个寄存器,每一个都有特定的功能。每个寄存器为32bit,占四个字节,这些寄存器都是按顺序依次排列在外设的基地址上。寄存器的位置都以相对该外设基地址的偏移地址来描述。这里我们以GPIOC端口为例,来说明GPIO都有哪些寄存器,如下图所示。
在这里插入图片描述


三,新建工程

在上方点击这里新建一个工程文件
在这里插入图片描述
然后选择芯片
在这里插入图片描述
如下图打上勾
在这里插入图片描述
右键单击Target1,点击mannage project item…
在这里插入图片描述
添加一个startup来启动文件,code来放用户代码:
在code文件创建一个.c和.h文件
在这里插入图片描述
在这里插入图片描述

四,代码的编写

1、led.h

#ifndef __LED_H__
#define __LED_H__

//片上外设基地址  
#define PERIPH_BASE           ((unsigned int)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值