1. 综诉

也许单片机在你看来是一件不太容易的事,但据我所知,单片机,无非就是控制它的GPIO口,所以可以看出,学会如何操作控制GPIO口对使用单片机来说是很重要的一件事。

在装载STM8的单片机中,I/O共有12种工作模式。实际上这里的概念也是和STM32等其他单片机,理解了这12种状态,也就基本上理解了大部分I/O口。

2. STM8S103的GPIO介绍

GPIO(英文:General-purpose input/output),通用型之输入输出的简称,其引角可以供使用者由程控自由使用,PIN脚依现实参考量可作为通用输入(GPI)或者输出(GPO)或通用输入输出(GPIO)。

打开官方IAR例程中的库文件stm8s_gpio.h文件中可以找到,STM8全部的I\O模式

 typedef enum
{
GPIO_MODE_IN_FL_NO_IT = (uint8_t)0x00, /*!< Input floating, no external interrupt */
GPIO_MODE_IN_PU_NO_IT = (uint8_t)0x40, /*!< Input pull-up, no external interrupt */
GPIO_MODE_IN_FL_IT = (uint8_t)0x20, /*!< Input floating, external interrupt */
GPIO_MODE_IN_PU_IT = (uint8_t)0x60, /*!< Input pull-up, external interrupt */
GPIO_MODE_OUT_OD_LOW_FAST = (uint8_t)0xA0, /*!< Output open-drain, low level, 10MHz */
GPIO_MODE_OUT_PP_LOW_FAST = (uint8_t)0xE0, /*!< Output push-pull, low level, 10MHz */
GPIO_MODE_OUT_OD_LOW_SLOW = (uint8_t)0x80, /*!< Output open-drain, low level, 2MHz */
GPIO_MODE_OUT_PP_LOW_SLOW = (uint8_t)0xC0, /*!< Output push-pull, low level, 2MHz */
GPIO_MODE_OUT_OD_HIZ_FAST = (uint8_t)0xB0, /*!< Output open-drain, high-impedance level,10MHz */
GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0, /*!< Output push-pull, high level, 10MHz */
GPIO_MODE_OUT_OD_HIZ_SLOW = (uint8_t)0x90, /*!< Output open-drain, high-impedance level, 2MHz */
GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0 /*!< Output push-pull, high level, 2MHz */
}GPIO_Mode_TypeDef;

在芯片资料中我们可以看到,I/O口的基本结构如下:

由于我们使用库函数开发,因此本文就不再解释具体的寄存器操作了,如想了解请察看STM8芯片的手册。

3. 模式介绍

3.1 浮空输入(Input Floating)

  浮空输入在 I\O 模式中带有 IN_FL 字眼,如:GPIO_MODE_IN_FL_NO_IT 、GPIO_MODE_IN_FL_IT。

  浮空输入也叫悬浮输入,一般把浮空输入和上拉输入做类比学习。浮空输入的电平不确定的,即使外部的一个很小的输入信号都会使其发生改变。如果引脚设置为悬空的情况下,读取该端口的电平是不确定的。

3.2 上拉输入(Input pull-up)

  上拉输入在 I\O 模式中带有 IN_PU 字眼,如:GPIO_MODE_IN_PU_NO_IT 、GPIO_MODE_IN_PU_IT。

  上拉输入的时候,引脚内部有一个上拉电阻通过开关连接到电源VDD, 当引脚没有和外部电路连接时,设置上拉输入方式的I/O引脚电平是确定的高电平。

3.3 开漏输出(Output open-drain)

  开漏输入在 I\O 模式中带有 OUT_OD 字眼,如:GPIO_MODE_OUT_OD_LOW_FAST 、GPIO_MODE_OUT_OD_LOW_SLOW 、 GPIO_MODE_OUT_OD_HIZ_FAST 、 GPIO_MODE_OUT_OD_HIZ_SLOW。        

  开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。输出端出跟集电极开路十

分相似,工作原理也是一样的。不同的是,开漏输出使用的场效应管,使用时要加上拉电阻。

3.4 推挽输出(Output push-pull)

  推挽输入在 I\O 模式中带有 Output push-pull 字眼,如:GPIO_MODE_OUT_PP_LOW_FAST 、 GPIO_MODE_OUT_PP_LOW_SLOW 、 GPIO_MODE_OUT_PP_HIGH_FAST 、GPIO_MODE_OUT_PP_HIGH_SLOW。

  推挽输出可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

3.5 中断和输出速度

  中断在 I\O 模式中带有 IT 字眼。中断只存在 I\O 输入中,因为在输出中设置中断也没有任何意义。中断的意思就是中止当前的工作,然后去执行另外的任务,执行完之后再回来执行原来的任务。

  输出速度也只存在 I\O 输出中,可以调整 I\O 的输出速度来将它们进行等级划分,如:low level,10MHz、low level,2MHz、high-impedance level,10MHz、high level,10MHz、high-impedance level, 2MHz、high level, 2MHz。

 3.6 初始电平

  我们初始化GPIO时候,会有一个初始电平的操作,例如GPIO_MODE_OUT_OD_LOW_FAST,GPIO_MODE_OUT_OD_HIZ_FAST,GPIO_MODE_OUT_PP_HIGH_FAST中,含有LOW、HIZ、HIGH,分别为低电平、高阻抗电平、高电平三种状态。

  

4. 例程

4.1 编译环境:

  我的编译环境是IAR,这款软件是现在STM8的主流平台,比较推荐。不过我打算等到STCubeMX更新出比较方便的版本后再去使用Keil5,因为我在用STM32的时候就是利用Keil5,的确很方便,你们也可以学着用一下。

4.2 主芯片:

  我的主芯片是STM8S系列中的103,其中STM8S的003、005、和103、105,配置一样(外设和CPU频率,FLASH),在代码相同的情况下均可进行烧写。

4.3 代码

  先在头文件里定义相对应的LED引角参数。

 /* Define --------------------------------------------------------------------*/

 /*LED*/
#define Led_Opt_Pin GPIO_PIN_5
#define Led_Opt_GPIO_Port GPIOB

  在主函数调用MX_GPIO_Init()函数初始 I\O 的引角,再调用GPIO_TogglePin()函数对 I\O 进行一个翻转,直接将一个LED灯进行翻转的话则可以看到明显的变化。

 /*******************************************************************************
* Function Name : MX_GPIO_Init
* Description : GPIO_Init
* Input : None
* Output : None
* Return : None
********************************************************************************/
void MX_GPIO_Init(void)
{
//LED 模式为推挽高速输出
GPIO_Init(Led_Opt_GPIO_Port,Led_Opt_Pin, GPIO_MODE_OUT_PP_HIGH_FAST); } /*******************************************************************************
* Function Name : GPIO_TogglePin
* Description : None
* Input : None
* Output : None
* Return : None
********************************************************************************/
void GPIO_TogglePin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{ GPIOx->ODR ^= GPIO_Pin; }

        

             LED灭                                              LED亮

5. 结尾

  对STM8的GPIO的说明和引用到这里结束,感谢各位看官的点击。

  如果觉得有所收获请点下推荐,若认为该博客中存在错误的说明或者对博客中某方面有疑问请留言。

作 者:浩宇99✌
出 处:https://www.cnblogs.com/zhenghaoyu/p/10676192.html
版权声明:本文原创发表于 博客园,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

基于STM8的GPIO操作---STM8-第一章的更多相关文章

  1. 读书笔记-《基于Oracle的SQL优化》-第一章-3

    优化器: 1.优化器的模式: 用于决定在Oracle中解析目标SQL时所用优化器的类型,以及决定当使用CBO时计算成本值的侧重点.这里的“侧重点”是指当使用CBO来计算目标SQL各条执行路径的成本值时 ...

  2. Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考

    第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...

  3. 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础

    第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1    初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...

  4. STM8的GPIO驱动

    芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写 首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO ...

  5. 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML.

    笔记说明 <CSS3实战手册第3版(影印版)>可以消除Web设计工作的痛苦,并且带给你:HTML--重新入门.如果你是HTML新手,你会学到如何以CSS友好的方式进行基本页面构造.若你是H ...

  6. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  7. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

  8. 第一章 Andorid系统移植与驱动开发概述 - 读书笔记

    Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...

  9. 精通Web Analytics 2.0 (3) 第一章:网站分析的新奇世界

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第一章:Web Analytics 2.0的新奇世界 多年以来,我们很清楚的知道,网站分析能够真正的改革网络上业务的完成方式.那 ...

随机推荐

  1. Anagram字符串处理(STL真方便啊。。)

    题意:给出一些字符串,认为各个字符个数相同的字符串就是相同的,不区分大小写,找出这些字符串中不与其他字符串相同的字符串并挨个输出 用char orgin[][]把每个字符串保存起来,然后对每个字符串都 ...

  2. Kubernetes移除node节点

    1.kubectl delete node {{节点名称}} 2.删除node节点上由kubelet自动生成的kubelet.kubeconfig配置文件,和ssl密钥证书kubelet.key,ku ...

  3. 监测NGINX服务的shell脚本

    Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 偶尔会出现以下情况的:php-cgi 进程突然消失 ...

  4. AI之旅(2):初识线性回归

    前置知识   矩阵.求导 知识地图   学习一个新事物之前,先问两个问题,我在哪里?我要去哪里?这两个问题可以避免我们迷失在知识的海洋里,所以在开始之前先看看地图.   此前我们已经为了解线性回归做了 ...

  5. 网上搜集python面试题(更新中......)

    武Sir博客拿的面试题,答案都是自己写的,多有不足,请多多指教.更新中...... 1.为什么学习Python? a.写起来快,看起来明白.作为通用性的语言,除了一些对性能要求很高的场合,几乎什么都能 ...

  6. webservice接口和http接口介绍---更新版

    web service(SOAP)与HTTP接口的区别什么是web service? soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为: te ...

  7. javap反汇编命令

    https://blog.csdn.net/qq_36330643/article/details/73841313 有关反汇编的具体

  8. 软件测试_MYSQL

    # MYSQL## 基础知识点### 进入数据库:在偏好设置中打开 — 打开终端 /usr/local/mysql/bin/mysql -u root -p### 可以把完整的命令分成几行打,完后用分 ...

  9. Mysql安装本地数据库

    1.下载解压:https://dev.mysql.com/downloads/mysql/ 2.配置环境变量path: D:\workPrograms\mysql-8.0.16-winx64\bin ...

  10. vue2.0 微信分享

    需求:首页,列表页,详情页的分享,活动页分享并进行相关操作,比如分享一次活动次数加1 首先:阅读微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_ ...