STM8单片机IO口输出、标准库函数、对应寄存器,代码实现、程序烧录详解

STM8单片机教程-05  GPIO口的输出

注意:本文章需要配合无际单片机编程-STM8单片机教程视频学习。

注意:本文章需要配合无际单片机编程-STM8单片机教程视频学习。

 

一 本节课的任务:

  1. 学习了解 LED灯驱动电路
  2. 学习STM8单片机GPIO口的标准库相关函数
  3. 实现LED灯控制。
  4. 了解GPIO口的相关寄存器 
  5. 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.查看测试效果:

本节课结束,感谢查看。

 

 

给TA买糖
共{{data.count}}人
人已赞赏
单片机百科单片机自学指南

STM8单片机标准工程搭建详解

2023-5-25 11:11:01

单片机百科单片机自学指南

STM8单片机GPIO口输入、按键检测、代码功能实现详解

2023-5-25 11:57:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧