数码管显示设计与实现
n 每个数码管的八个位段分别与一个八位I/O端口相连。I/O端口只要有 字型码输出,数码管就显示给定字符,并保持不变,直到I/O口输出新 的段码。
STM32
项目三 数码管显示设计与实现
认识数码管
n 数码管的显示方法:有静态显示和动态显示两种方法。
n 动态显示
n 动态显示是一种一位一位地轮流点亮各位数码管的显示方式,即在某 一时段,只选中一位数码管的“位选端”,并送出相应的字型编码;
n 只有加入了这些东西,才能成为可以工作的STM32芯片。
2. STM32存储器映射
n STM32存储器的地址空间被划分为大小相等的8块区域,其中: ① Peripherals是外设的存储器映射,对该区域操作,既对相应外设进行操作; ② SRAM是运行时临时存放代码的地方; ③ Flash是存放代码的地方; ④ System Memory是STM32出厂时自带的,只能使用,不能写或擦除; ⑤ Option Bytes是可以按照用户的需要进行配置。
STM32
数码管显示设计与实现
项目三 数码管显示设计与实现
任务6 数码管静态显示设计与实现
n 目标
n 利用STM32与数码管的接口技术,完成STM32的数码管静态显示 电路设计和程序的设计、运行及调试。
n 任务要求
n 使用STM32F103R6芯片的PC0~PC15引脚分别接2个共阴极LED 数码管。
RAM,可以缓存,并且可以执行指令。 n 外部RAM区的后半段(0x8000_0000~0x9FFF_FFFF)。这个区域除了不可
以缓存外,其他与前半段相同。
STM32
项目三 数码管显示设计与实现
STM32存储器映射
n Cortex-M3存储器映射
2. Cortex-M3存储器映射区域分析
⑤ 外部外设区(0xA000_0000~0xDFFF_FFFF) n 这个区域大小是1GB,是用于连接外部设备的,在这个区域划分为外部外设区
数码管静态显示程序设计
n 数码管显示功能实现
n 程序控制数码管内部的不同位段点亮,能显示出需要的字符。 n 本电路采用共阴极结构的数码管,其公共端接地,这样可以控制每
一只LED的阳极电平来使其发光或熄灭,阳极为高电平发光,为 低电平熄灭。 n “0~9”十个字符的字型编码如下:
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f n 通过PC0~PC15输出“0~9”十个字符的字型编码,就可以在数码管上
n Cortex-M3存储器映射结构。 n 只要芯片制造商按照Cortex-M3存储器的结构,进行各自芯片的存储器结构设
计,就允许芯片制造商灵活的分配存储器空间,以制造出各具特色的基于 Cortex-M3的芯片。
STM32
项目三 数码管显示设计与实现
STM32存储器映射
n Cortex-M3存储器映射
STM32
项目三 数码管显示设计与实现
【技能训练3-2】编写外部设备文件
n 在任务6的数码管静态显示中,主文件smgxs.c 内容太多,没有条理, 如何解决呢?
n 这是由于数码管外部设备的初始化以及其它相关代码,都写在主文件中了。
n 可以把外部设备分类单独写一个文件,这样就可以对数码管静态显示 的代码进行优化了。
过系统总线来访问。 n 在 SRAM 区的底部,还有一个
1MB 的位带区,这个位带区还有一个对
32MB的“位带别名(alias)区”。也就是说,位带别名区里面的每个字对应位
带区的一个bit位,每个位变量是32位(既1个字4个字节)。 n 位带操作只适用于数据访问,不适用于取指。通过位带的功能,我们访问一个
n 把延时函数和数码管都分开单独写一个文件和头文件,并保存在其对应的子目录里, 使得数码管循环显示0~20的主文件变得简洁明了,还具有规范性和可读性。
① Cortex-M3存储器映射是预定义的,并且还规定好了哪个位置使用哪条 总线;
② Cortex-M3存储器系统支持“位带(bit‐band)操作”。通过位带操作, 实现了对单一bit位的操作。位带操作仅适用于一些特殊的存储器区域中;
③ Cortex-M3存储器支持非对齐访问和互斥访问; ④ Cortex-M3存储器支持小端模式和大端模式。
显示“0~9” 数字。
n 数码管静态显示代码见源程序。
STM32
项目三 数码管显示设计与实现
【技能训练3-1】共阳极LED数码管应用
n 如何使用共阳极LED数码管实现0~20循环显示呢?
n 在任务6电路中,采用的是共阴极数码管。这里使用的是共阳极数 码管,其公共端需要接电源。
n 共阳极数码管显示“0~9”十个字符的字型编码与共阴极数码管的字 型编码是反相的,字型编码如下:
STM32
项目三 数码管显示设计与实现
LED数码管引脚及内部结构
管脚排列
共阴极数码管
STM32
共阳极数码管
项目三 数码管显示设计与实现
认识数码管
n 数码管的字型编码
n 要使数码管上显示某个字符,必须使它的8个位段上加上相应的电 平组合,即一个8位数据,这个数据就叫该字符的字型编码。
n 通常用的位段的编码规则如下图所示。 D7 D6 D5 D4 D3 D2 D1 D0
1. Cortex-M3存储器映射实现
n 由于Cortex-M3对设备的地址进行了重新的映射,当访问存储器或外设时,都 是按照映射后的地址进行访问的。
n Cortex-M3存储器的4G地址空间被划分为大小相等的8块区域(是粗线条的), 每块区域大小为512M。主要包括代码、SRAM、外设、外部RAM、外部设备、 专用外设总线-内部、专用外设总线-外部、特定厂商等。
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 n 在程序中,若继续使用共阴极数码管的字型编码,可以通过对共阴极
字型编码取反来获得共阳极数码管的字型编码。
n 共阳极数码管静态显示代码见源程序。
STM32
项目三 数码管显示设计与实现
共阳极数码管静态显示电路设计
的前半段和外部外设区的后半段2部分,每部分大小是512MB。 n 外部RAM区和外部外设区之间的区别是:外部RAM区允许执行指令,而外部
设备区是不允许执行指令的。 ⑥ 系统区(0xE000_0000~0xFFFF_FFFF) n 这个区域是专用外设和供应商指定功能区域,这个区域是不能执行代码的。 n 系统区主要包括Cortex-M3内核的系统级组件、内部专用外设总线、外部专用
n STM32存储器映射
n 前面介绍的Cortex-M3存储器映射,只是一个粗线条的模板。下面我们就 针对ST公司的STM32存储器,来介绍STM32存储器映射。
1. Cortex-M3存储器与STM32存储器映射对比
n 通过Cortex-M3存储器与STM32存储器映射对比,可以看出他们是很相似,不 同的是STM32加入了很多实际的东西,如:Flash、SRAM等。
n 数码管的结构和工作原理
n 数码管内部是由八个LED(简称位段)组成,其中有七个条形LED 和一个小圆点LED。
n LED导通时,相应的线段或点发光,将这些LED排成一定图形,常 用来显示数字0~9、字符A~G,还可以显示H、L、P、R、U、Y、 符号“—”及小数点“.”等。
n LED数码管可以分为共阴极和共阳极两种结构。
n 在下一时段按顺序选通另外一位数码管,并送出相应的字型编码; n 依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。
这一过程称为动态扫描显示。
STM32
项目三 数码管显示设计与实现
数码管静态显示电路设计
n 按照任务要求,采用静态显示方式,数码管显示电路是由 STM32F103R6、2个1位的共阴极LED数码管构成。
2. Cortex-M3存储器映射区域分析
① 代码区(0x0000_0000~0x1FFF_FFFF) n 程序可以在代码区、内部SRAM区以及外部RAM区中执行,通常是把程序放到
代码区,从而使取指和数据访问各自使用自己的总线(指令总线与数据总线是
分开的)。 ② SRAM区(0x2000_0000~0x3FFF_FFFF) n 这个区域用于片内SRAM,是用于让芯片制造商连接片上的SRAM,这个区通
n STM32F103R6的PC0~PC7引脚接个位数码管的A~G七个位段; n PC8~PC15引脚接十位数码管的A~G七个位段; n 由于小数点“.”DP位不用,PC7和PC15引脚也就不用了。STM32源自项目三 数码管显示设计与实现
数码管静态显示电路设计
STM32
项目三 数码管显示设计与实现
STM32
项目三 数码管显示设计与实现
STM32存储器映射
n Cortex-M3存储器映射
n 存储器映射是指把芯片中或芯片外的FLASH、RAM以及外设等进行了统 一编址,即用地址来表示对象。
n 这个地址绝大多数是由厂家规定好的,用户只能用而不能改。 n 用户只能在接有外部RAM或FLASH的情况下可进行自定义。
n 换句话说,Cortex-M3定义了一个存储器结构,ST公司是按照Cortex -M3的存储器定义,设计出了自己的存储器结构,ST公司的STM32的 存储器结构必须按照Cortex-M3定义的存储器结构来进行设计。
STM32
项目三 数码管显示设计与实现
STM32存储器映射
n 认识Cortex-M3存储器
带别名区,用于快捷访问外设寄存器。 ④ 外部RAM区(0x6000_0000~0x9FFF_FFFF) n 这个区域大小是1GB,是用于连接外部RAM的,在这个区域划分为外部RAM
区的前半段和外部RAM区的后半段2部分,每部分大小是512MB。 n 外部RAM区的前半段(0x6000_0000~0x7FFF_FFFF)。这个区域用于片外