STM8单片机教程-05 GPIO口的输出
注意:本文章需要配合无际单片机编程-STM8单片机教程视频学习。
注意:本文章需要配合无际单片机编程-STM8单片机教程视频学习。
一 本节课的任务:
- 学习了解 LED灯驱动电路
- 学习STM8单片机GPIO口的标准库相关函数
- 实现LED灯控制。
- 了解GPIO口的相关寄存器
- lora门磁主板的程序烧录的演示
二 硬件介绍:(必须掌握)
1.STM8的外设驱动实验,选择的是“lora门磁&遥控器“的主板,我们打开对应的原理图,如图所示:
2.打开原理图,我们可以看到 原理图上 红色框选的部分。 红色框选的部分,就是本节课需要使用的原理图部分。
LED电路的简单的分析:
①LED灯是有极性的, 也就是有方向的。
②LED的负极接GND. 如果LED2要亮,则正极是高电平。 否则就灭。
通过图纸我们可以看到LED2 和单片机的PA3连接。 所以通过控制PA3输出高电平或者低电平就可以控制LED灯的亮,或者灭。
三 单片机GPIO相关寄存器的介绍(了解)
因为STM8单片机(以及后面的STM32单片机)的寄存器比较多,如果像51单片机一样,直接对寄存器操作的话,程序代码相对比较复杂。 为了方便工程师的开发,ST官方将对单片机内部寄存器的操作封装成了库文件,方便我们调用。 目前ST提供了两种库,一种是标准库,一种是hal 库。 各有优势。
所以方便大家的学习,建议大家再学习的初期直接使用库函数使用,不要花太多的精力再寄存器上面,我们需要改变对51单片机开发的思维模式,所以本小段仅供大家了解。
GPIO口相关的寄存器:
我们再深入的探讨一下GPIO口。因为单片机的库函数最终是对单片机的内部寄存器的操作,所以再这里给大家简单的介绍一下GPIO的寄存器。
我们打开STM8单片机的数据手册,根据目录跳到GPIO口部分,来产看GPIO的寄存器说明:
STM8单片机共有5个寄存器来配置GPIO口。
第1个: Px_ODR 输出配置寄存器。
输出配置寄存器,配置为1输出高电平,0,输出低电平。
GPIOA_ODR|= 0X80; GPIOA_ODR = (GPIOA_ODR| 0X80)
xxxx xxxx
0000 1000
—————-
xxxx 1000
0&0 = 0;
0&1 = 1;
1&1 = 1;
第2个寄存器: PX_IDR 输入状态寄存器
读取本寄存器,获取GPIO的输入状态, 1为高电平 0为低电平
第3个寄存器: Px_CR1 配置端口的输入输出模式。
配置为1 表示端口为输出模式,0表示为输入模式
第4个寄存器: PX_CR1输入输出模式寄存器1:
本寄存器配置和和第三个寄存器相关:
端口模式为输入模式:
配置为1,表示端口是上拉输入模式
配置为0,表示端口是悬空输入模式
端口模式为输出模式:
配置为1,上拉输出
配置为0,开漏输出
第5个寄存器: PX_CR2输入输出模式寄存器2:
本寄存器配置和第三个寄存器配置相关:
端口模式为输入模式:
配置为1,端口外部中断使能
配置为0,端口外部中断不使能
端口模式为输出模式:
配置为1,输出的速率是10MHZ
配置为0,输出的速率是2MHZ
综上就是STM8单片机GPIO的介绍,关于内部寄存器,大家可以通过GPIO的库文件对应学习。
四 官方提供的GPIO口例程 (掌握)
因为官方提供的例程代码是基于ST官方的开发板开发的,所以例程代码我们不能直接用来测试,只用来用参考。
测试官方提供的例程代码。
六 实现代码(必须掌握)
1.GPIO代码实现流程:
① 增加头文件 stm8l10x.h
② 初始化: 配置输入输出模式。
③ GPIO的输入输出操作。
2.备份标准工程:
修改main.c 文件。
3.实现代码:(实现的效果: LED2灯闪烁)
①增加STM8单片机的头文件:
#include “stm8l10x.h”
②定义LED2的GPIO 口:
#define LED_GPIO_PORT GPIOA
#define LED_GPIO_PINS GPIO_Pin_3
③延时函数:
void Delay(uint16_t nCount)
{
while (nCount != 0)
{
nCount–;
}
}
④GPIO 口的初始化:
GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
⑤LED2灯的闪烁:
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PINS);
Delay(0xFFFF);
GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PINS);
Delay(0xFFFF);
⑥最终代码:
#include “stm8l10x.h”
#define LED_GPIO_PORT GPIOA
#define LED_GPIO_PINS GPIO_Pin_3
void Delay(uint16_t nCount)
{
while (nCount != 0)
{
nCount–;
}
}
void main(void)
{
GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
while (1)
{
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PINS);
Delay(0xFFFF);
GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PINS);
Delay(0xFFFF);
}
}
七 程序烧录与功能测试
1.实验需要的器材:
2.连接图如下:
连接方式:
①ST-LINK 和门磁主板的烧录接口P3的丝印要一一对应。 如上图蓝色所示:
- VCC —- 3.3V
- GND —- GND
- SWIM —- SWIM
- REST —- RST
②电池供电 3.7V 锂电池插到J1 接口,如上图黄色所示。
③ST LINK 插到电脑USB接口。 如上图红色所示。
④建议大家都可以自行购买一个USB Hub。 这样测试更加方便,也可以避免电脑的USB插拔次数过多而老化。
3.代码的编译:
4.下载程序:
5.查看测试效果:
本节课结束,感谢查看。