《《cortex-m3+ucos-ii嵌入式系统开发入门与应用》》由会员分享,可在线阅读,更多相关《《cortex-m3+ucos-ii嵌入式系统开发入门与应用》(63页珍藏版)》请在金锄头文库上搜索。
1、 CORTEX-M3+UCOS-II 嵌入式系统开发入门与应用 作者:华清远见 第第 5 章章 STM32F103处理器内部资源处理器内部资源C编程与实例编程与实例 专业始于专注 卓识源于远见 2 5.1 I/O 控制模块控制模块 C 编程与实例编程与实例 5.1.1 实例内容与目标实例内容与目标 熟悉 STM32F103 处理器 I/O 编程方法; 通过实验掌握 STM32F103 处理器 I/O 控制 LED 显示的方法; 学习 LED 驱动原理。 5.1.2 I/O 控制模块操作原理控制模块操作原理 (1)STM32F103 处理器 I/O 控制工作原理。 STM32F103 处理器有
2、AE 5 组输入/输出端口, 每组端口都拥有自己的 2 个 32bit 寄存器 (GPIOx_CRL 和 GPIOx_CRH) 、2 个 32bit 数据寄存器(GPIOx_IDR 和 GPIOx_ODR) 、1 个 32bit set/reset 寄存器 (GPIOx_BSRR) 、1 个 16bit reset 寄存器(GPIOx_BRR)和 1 个 32bit 锁定寄存器(GPIOx_LCKR) 。 每组端口都有复用的功能,例如可以作为输入/输出端口,还可以定义为中断触发功能,用户可以通过软件 配置寄存器来满足不同系统和设计的需要。在运行主程序之前,必须先对每一个用到的引脚的功能进行设
3、置。如果某些引脚的复用功能没有使用,那么可以先将该引脚设置为通用 I/O 端口。 I/O 端口的配置过程类似,因此接下来主要以 GPIO E 端口作为对象来讲解端口配置的方法。 端口配置低寄存器 表 5.1 所示显示了低寄存器的定义。 表 5.1 端口配置低寄存器定义 比 特 位 定 义 Bits:31:30,27:26,23: 22,19:18,15:14,11: 10,7:6,3:2 软件可写位,配置相应的 I/O 端口。 输入模式(mode1:0 = 00) : 00:模拟输入模式 01:浮点输入 10:输入上拉/下拉 11:保留位 输出模式(mode1:000) : 00:通用功能输出
4、上拉 01:通用功能输出 Open-drain 10:转换功能输出上拉 11:转换功能输出 Open-drain Bits29:28,25:24,21:20, 17:16,13:12,9:8,5: 4,1:0 软件可写位,配置相应的 I/O 端口。 00:输入模式 01:输出模式,最大速率 10MHz 10:输出模式,最大速率 2MHz 11:输出模式,最大速率 50MHz 端口配置高寄存器 表 5.2 所示为端口配置高寄存器的定义。 表 5.2 端口配置高寄存器定义 比 特 位 定 义 Bits:31:30,27:26,23: 22,19:18,15:14,11: 10,7:6,3:2 软件
5、可写位,配置相应的 I/O 端口。 00:模拟输入模式 01:浮点输入 专业始于专注 卓识源于远见 3 10:输入上拉/下拉 11:保留位 Bits29:28,25:24,21:20, 17:16,13:12,9:8,5: 4,1:0 软件可写位,配置相应的 I/O 端口。 输入模式(mode1:0 = 00) : 00:模拟输入模式 01:浮点输入 10:输入上拉/下拉 11:保留位 输出模式(mode1:000) : 00:通用功能输出上拉 01:通用功能输出 Open-drain 10:转换功能输出上拉 11:转换功能输出 Open-drain 端口输入数据寄存器 GPIO 端口数据可以
6、通过该寄存器读入。表 5.3 所示为端口输入数据寄存器的定义。 表 5.3 端口输入数据寄存器定义 Bits31:16 保留位,读出数据为 0 Bits:15:0 IDRx15:0:端口输入数据(x = 0, , 15) 该寄存器为只读寄存器并且只能在字模式下访问;读出数据为相应 I/O 端口的输入值 端口输出数据寄存器 地址偏移量:0Ch;初始值:00000000h。 GPIO 端口数据可以通过该寄存器输出。表 5.4 所示为端口输出数据寄存器的定义。 表 5.4 端口输出寄存器定义 Bits31:16 保留位,读出数据为 0 Bits:15:0 IDRx15:0:端口输入数据(x = 0,
7、 , 15) 该寄存器为可读/可写寄存器,只能在字模式下访问。 注意:该寄存器允许原子操作(设置/重启) ,每一位允许单独操作。通过对 GPIOx_BSRR 寄存器的操作,可以设置或重启任一比特位 比特位设置/重启寄存器 GPIOx_BSRR 地址偏移量:10h;初始化值:00000000h。 表 5.5 所示为比特位设置/重启寄存器的定义。 表 5.5 比特位设置/重启寄存器定义 Bits31:16 BRx:reset bit x(x = 1, , 15) 该寄存器为只写寄存器,而且仅能在字模式下访问。 0:对相应 ODRx 位不做任何操作。 1:重启 ODRx 相应位。 注意:如果同时设置
8、了 BSx 和 BRx,BSx 具有较高优先级 Bits:15:0 BSx:相应的 x 位置位(x = 1, , 15) 该寄存器为只写寄存器而且仅能在字模式下访问。 0:对相应 ODRx 位不做任何操作。 1:ODRx 相应位置位 端口位重启寄存器 GPIOx_BRR 地址偏移量:14h;初始化值:00000000h。 表 5.6 所示为端口位重启寄存器的定义。 专业始于专注 卓识源于远见 4 表 5.6 端口位重启寄存器定义 Bits31:16 保留位 Bits:15:0 BSx:重启相应的 x 位(x = 1, , 15) 该寄存器为只写寄存器,而且仅能在字模式下访问。 0:对相应 OD
9、Rx 位不做任何操作; 1:重启相应 ODRx 位。 注意:如果同时设置了 BSx 和 BRx,BSx 具有较高优先级 端口配置锁定寄存器 GPIOx_LCKR 当该寄存器的 bit16(LCKK)通过正确的序列写入时,I/O 端口位配置被锁定。Bit15:0用于锁定 GPIO 的 配置。当对 bit16 进行写操作时,LCKR15:0不允许变化。 配置锁定寄存器的每一位对应控制寄存器(CRL,CRH)的 4 个 bit 位。 地址偏移量:18h;初始化值:00000000h。 (2)LED 结构及发光原理。 50 年前人们已经了解半导体材料可产生光线的基本知识,第一个商用二极管产生于 196
10、0 年。LED (Light Emitting Diode,发光二极管)的基本结构是一块电致发光的半导体材料,置于一个有引线的 架子上,然后四周用环氧树脂密封,起到保护内部芯线的作用,所以 LED 的抗震性能好。 LED 结构如图 5.1 所示。 图 5.1 LED 结构图 发光二极管的核心部分是由 P 型半导体和型半导体组成的晶片,在 P 型半导体和型半导体之间有 一个过渡层,称为 PN 结。在某些半导体材料的 PN 结中,注入的少数载流子与多数载流子复合时会把 多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN 结加反向电压,少数载流子难以注 入,故不发光。这种利用注入式电致发光
11、原理制作的二极管叫发光二极管,通称 LED。当它处于正向 工作状态时(即两端加上正向电压) ,电流从 LED 阳极流向阴极时,半导体晶体就发出从紫外到红外 不同颜色的光线,光的强弱与电流有关。 LED 光源的特点 电压:LED 使用低压电源,供电电压在为 6V24V,根据产品不同而异,所以它是一个比使用高压电 源更安全的电源,特别适用于公共场所。 效能:消耗能量较同光效的白炽灯减少 80%。 适用性:其体积很小,每个单元 LED 小片是 35mm2的正方形,所以可以制备成各种形状的器件,并 且适合于易变的环境。 稳定性:连续工作 10 万小时,光衰为初始的 50%。 响应时间:白炽灯的响应时间
12、为毫秒级,LED 灯的响应时间为纳秒级。 对环境污染:无有害金属汞。 颜色:改变电流可以变色,发光二极管方便地通过化学修饰方法,调整材料的能带结构和带隙,实现 红黄绿兰橙多色发光。如小电流时为红色的 LED,随着电流的增加,可以依次变为橙色、黄色,最后为绿 色。 价格:LED 的价格比较昂贵,较之于白炽灯,几只 LED 的价格就可以与一只白炽灯的价格相当,而通 常每组信号灯需由上 300500 只二极管构成。 单色光 LED 的种类及其发展史 专业始于专注 卓识源于远见 5 最早应用于半导体 P-N 结发光原理制成的 LED 光源问世于 20 世纪 60 年代初。 当时所用的材料是 GaAsP
13、, 发红光(p = 650nm) ,在驱动电流为 20mA 时,光通量只有千分之几个流明,相应的发光效率约 0.1 流明/ 瓦。 20世纪70年代中期, 引入元素In和N, 使LED产生绿光 (p = 555nm) 、 黄光 (p = 590nm) 和橙光 (p = 610nm) , 光效也提高到 1 流明/瓦。 到了 20 世纪 80 年代初,出现了 GaAlAs 的 LED 光源,使得红色 LED 的光效达到 10 流明/瓦。 20 世纪 90 年代初,发红光、黄光的 GaAlInP 和发绿、蓝光的 GaInN 两种新材料的开发成功,使 LED 的光 效得到大幅度的提高。在 2000 年,
14、前者做成的 LED 在红、橙区(p = 615nm)的光效达到 100 流明/瓦,而 后者制成的 LED 在绿色区域(p = 530nm)的光效可以达到 50 流明/瓦。 单色光 LED 的应用 最初 LED 用作仪器仪表的指示光源,后来各种光色的 LED 在交通信号灯和大面积显示屏中得到了广泛应 用,产生了很好的经济效益和社会效益。以 12 英寸的红色交通信号灯为例,本来是采用长寿命、低光效 的 140 瓦白炽灯作为光源,它产生 2 000 流明的白光。经红色滤光片后,光损失 90%,只剩下 200 流明的 红光。而在新设计的灯中,Lumileds 公司采用了 18 个红色 LED 光源,包
15、括电路损失在内,共耗电 14W, 即可产生同样的光效。 汽车信号灯也是 LED 光源应用的重要领域。1987 年,我国开始在汽车上安装高位刹车灯,LED 响应速度 快(纳秒级) ,可以及早让后车司机知道行驶状况,减少汽车追尾事故的发生。 另外,LED 灯在室外红、绿、蓝全彩显示屏,匙扣式微型电筒等领域都得到了应用。 LED 驱动 由于单只 LED 管的工作电压低(1.5V2V) ,个别需达到 4V,同时工作电流仅为 1mA5mA,因此可以用 CPU 的通用输入/输出管脚(GPIO)就可直接控制。 图 5.2 所示为 STM32V100 评估板中由 CPU 直接驱动控制 LED 的原理图。以 LD1 为例,它的阳极通过串 联电阻接在CPU 的 PC6 管脚上,阴极接地。假设 LD1 的正向导通压降为 1.5V,当 PC6 输出高电平时,LD1 将会有电流通过,并导致 LD1 发光。反之,当 PC6 输出低电平是,LD1 几乎没有电流通过,因此将不会 发光。 图 5.2 LED 硬件连接图 5.1.3 I/O 控制实例操作步骤控制实例操作步骤 (1)准备实验环境:连接好主机 linker 目标板。 (2)启动 Keil Version 3,打开所需工程 GPIO.Uv