0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在STM8微控制器上使用GPIO

454398 ? 来源:工程师吴畏 ? 2019-07-31 09:18 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

原理图

如何在STM8微控制器上使用GPIO

通用设计

使用PIC和AVR器件时,您通常需要获取该特定器件的数据表,并了解如何使用外设。有时,一个PIC上的外设可能与另一个PIC上的外设不同,因此不能简单地将代码从一个PIC复制并粘贴到另一个PIC。但是,STM8完全不同,因为所有STM8设备都使用通用布局而不是具有唯一配置。这意味着为一个STM8设计的代码可以直接复制并粘贴到不同的控制器,它仍然可以工作(假设新设备具有所需的外设)。

一个典型的例子是UART外设。 STM8器件最多可以有三个UART端口(1,2和3),一个STM8器件上的UART1与另一个STM8器件上的UART1相同。但是,各个STM8器件的数据表中没有太多关于如何使用外设的信息,因此在使用任何STM8器件时,您需要使用数据表;包含引脚分布的器件专用数据表,以及包含器件系列细节的另一个数据表。

对于我们的STM8项目,我们将利用这两个数据表中的信息:

STM8S103F3器件数据表(PDF) - 包含基本细节和引脚信息

STM8系列器件概述(PDF) - 包含详细的外设和CPU信息

如果您想知道设备上的引脚位置,请使用设备数据表,如果您想了解如何使用外围设备,请使用系列设备概述表。

GPIO

虽然开发板允许我们对STM8进行编程微控制器和CPU功能,除非我们可以将微型连接到其他设备和外部电路,否则它是毫无意义的。为了能够执行此类任务,使用通用输入输出或GPIO。 GPIO是器件上的引脚,可以电连接到外部电路,以控制它们或从中读取信息。虽然可以读取模拟数据,但本教程仅关注数字值(打开或关闭的数字值)。

说到GPIO,有四个主要寄存器

DDR - 数据方向寄存器

ODR - 输出数据寄存器

IDR - 输入数据寄存器

CR1和CR2 - 控制寄存器

图片由RM0016参考手册提供。

访问寄存器和位

访问STM8上的GPIO有点类似于AVR ,除了STM8S.h使用结构。例如,STM8S上的PORT B有自己的结构,称为GPIOB,内部是控制它的所有寄存器(如DDR,ODR,IDR等)。访问这些寄存器可以如下所示:

GPIOB→xxx其中xxx是有问题的寄存器

数据方向寄存器(DDR)

与PIC和AVR器件一样,STM8使用数据方向寄存器来确定引脚是输入还是输出。这些寄存器为8位宽,直接对应I/O端口上的引脚。例如,PORT B最多可以有8个引脚,B0对应端口B DDR寄存器中的第0位,而B7对应端口B DDR寄存器中的第7位。

将引脚配置为输入时,需要清零相应的DDR位(0),对于输出,需要设置该位(1)。因此,比方说,我们只想将B0和B1配置为输入,同时将其余部分保持为输出。我们可以执行以下操作:

GPIOB→DDR = 0xFC;

GPIOB→DDR = 0b11111100;

控制寄存器CR1和CR2

CR1和CR2是控制寄存器,可配置为提供不同的I/O功能。例如,它们可以配置为允许在各个引脚上产生中断,并可用于创建具有推/拉功能的输出驱动器。与其他寄存器一样,CR1和CR2寄存器中的每个位对应一个特定的引脚。因此,例如,CR1和CR2中的位0用于端口的引脚0。下表(摘自数据表)演示了CR1和CR2寄存器的用途。

输出数据寄存器( ODR)

输出数据寄存器用于输出数字值(1和0)到一个端口。可以写入各个位(使用位掩码),也可以更改整个寄存器。将1位写入ODR位将使相应的引脚导通,写入0将使相应的引脚关闭。下面的第一个示例用于打开端口上的所有引脚,第二个示例关闭所有引脚。

GPIOB→ODR = 0xFF;或GPIOB→ODR = 0b11111111;//打开所有引脚

GPIOB→ODR = 0x00;或GPIOB→ODR = 0b00000000;//关闭所有引脚

输入数据寄存器(IDR)

IDR寄存器可用于读取端口引脚上的数字值。这些值可以是(1)或关闭(0),IDR寄存器的第0位对应引脚0,而第7位对应引脚7.

pinRead = GPIOB→IDR;

有用的位操作

因为我/O端口由各个引脚组成,与整个寄存器相比,访问个别位更有帮助。但是,个别位不可用(类似于AVR设备),因此我们需要使用一些位操作。由于这已经在AVR系列中进行了解释,我们只会看一些非常有用的宏。

这些非常有用的宏有助于摆脱不可读的位掩码:

#define setBit(reg,bit)(reg = reg |(1 《

#define clearBit(reg,bit)(reg = reg&?(1 《

#define toggleBit(reg,bit)(reg = reg ^(1 《

将此代码复制并粘贴到代码顶部,然后,您可以像函数一样使用它们,而不必编写位操作代码。那么让我们看一些如何在代码中使用它们的示例!

setBit(GPIOB→DDR,3);//将端口B上的第3位设置为输出

clearBit(GPIOA→ODR,4);//关闭端口a上的输出位4

toggleBit(GPIOC→ODR) ,5);//在端口c上切换第5位

然而,读取引脚使用一个简单的位操作,包括使用AND来屏蔽我们不需要的所有位,然后测试查看结果是否为0。

if( (GPIOB→IDR & 0b00000001) )

{

// Code here executes IF bit 0 is on

}

if( !(GPIOB→IDR & 0b00000001) )

{

// Code here executes IF bit 0 is off

}

基本配置示例

在本例中,我们将引脚A1配置为输入,B5配置为输出,每当按下开关(连接到A1)时,LED连接到B5将切换。这里我们也利用内部上拉,因此我们的按钮不需要上拉电阻工作(通过设置CR1中的位来完成)。

/* MAIN.C file

*

* Copyright (c) 2002-2005 STMicroelectronics

*/

#include “stm8s.h”

#define setBit(reg, bit) (reg = reg | (1 《《 bit))

#define clearBit(reg, bit) (reg = reg & ~(1 《《 bit))

#define toggleBit(reg, bit) (reg = reg ^ (1 《《 bit))

void simpleDelay(void);

main()

{

GPIOA-》DDR = 0x00; // Make all pins on PORT A inputs

GPIOA-》CR1 = 0xFF; // Ensure that internal pull up is on

GPIOA-》CR2 = 0x00; // Ensure that interrupts are turned off

GPIOB-》DDR = 0xFF;

while (1)

{

// Testing bit 1 (bit 0 would be 1)

if( !(GPIOA-》IDR & 0x02) )

{

toggleBit(GPIOB-》ODR, 5);

simpleDelay();

}

}

}

// Simple delay used for debouncing

void simpleDelay(void)

{

unsigned int i, j;

for(i = 0; i 《 1000; i ++)

{

for(j=0; j 《 10; j ++)

{

}

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM8
    +关注

    关注

    18

    文章

    392

    浏览量

    58029
  • GPIO
    +关注

    关注

    16

    文章

    1291

    浏览量

    54497
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用GPIO模拟ARGB2 LED定时序列,并在M258系列微控制器(MCU)实现彩虹波ARGB2 LED效果?

    使用GPIO模拟ARGB2 LED定时序列,并在M258系列微控制器(MCU)实现彩虹波ARGB2 LED效果
    发表于 08-20 06:55

    何在 M55M1 系列微控制器以低功耗模式使用运动检测功能?

    何在 M55M1 系列微控制器以低功耗模式使用运动检测功能。根据物体检测结果,系统将动态启用或禁用运动检测块,以实现最佳性能和能效。
    发表于 08-19 06:56

    何在MCXN947微控制器配置安全启动和生命周期

    本文档旨在介绍如何在MCXN947微控制器配置安全启动和生命周期,以确保产品在量产阶段的安全性,防止代码被窃取和篡改,并且能够安全地升级更新固件。通过本应用笔记,开发者可以更好地理解和实施安全启动和固件更新的最佳实践。
    的头像 发表于 06-26 09:49 ?1455次阅读
    如<b class='flag-5'>何在</b>MCXN947<b class='flag-5'>微控制器</b><b class='flag-5'>上</b>配置安全启动和生命周期

    8微控制器KF8A100Fxx数据手册

    电子发烧友网站提供《8微控制器KF8A100Fxx数据手册.pdf》资料免费下载
    发表于 05-30 16:11 ?2次下载

    STM8S103F3P3TR STM32F091VCH6微控制器 IC MCU 8K/256K Flash

    :100-UFBGA(7x7) 明佳达 STM8S103F3P3TR是一款8微控制器,属于STM8S系列中的一种。它具有高性能、低功耗和低成本的特点,适用于各种嵌入式系统的
    发表于 02-20 17:53

    CY8C40xx系列32 位 PSOC? Arm? Cortex? 微控制器Cypress

    CY8C40xx系列32 位 PSOC? Arm? Cortex? 微控制器CypressPSoC 4是Cypress微控制器的可扩展可重构系统架构,涵盖了Arm CortexTM-M0CPU
    发表于 01-17 09:14

    GPIO错误排查与解决

    在嵌入式系统和微控制器编程中,通用输入输出(GPIO)是最常见的接口之一。然而,在使用GPIO时,我们可能会遇到各种错误。 1. 理解GPIO GP
    的头像 发表于 01-09 09:46 ?2691次阅读

    如何配置GPIO引脚

    引脚是微控制器的一个多功能接口,可以被配置为数字输入、数字输出、模拟输入/输出或特殊功能。在数字模式下,GPIO引脚可以是高电平(逻辑1)或低电平(逻辑0)。在模拟模式下,它们可以读取模拟信号。 配置
    的头像 发表于 01-09 09:39 ?1485次阅读

    stm32 GPIO中断配置教程

    理解GPIO中断 在STM32中,GPIO中断允许微控制器在引脚状态变化时(如从低到高或从高到低)立即响应,而无需不断轮询引脚状态。这对于处理外部事件(如按钮按下、传感信号等)非常
    的头像 发表于 11-19 15:53 ?3766次阅读

    何在i.MX RT微控制器初始化LWIP协议栈

    在i.MX RT微控制器初始化LWIP协议栈是一个复杂但有趣的过程,它涉及多个步骤和关键组件的配置.
    的头像 发表于 10-12 11:48 ?947次阅读
    如<b class='flag-5'>何在</b>i.MX RT<b class='flag-5'>微控制器</b><b class='flag-5'>上</b>初始化LWIP协议栈

    调试MSP430系列微控制器的闪存问题

    电子发烧友网站提供《调试MSP430系列微控制器的闪存问题.pdf》资料免费下载
    发表于 10-09 10:27 ?0次下载
    调试MSP430系列<b class='flag-5'>微控制器</b><b class='flag-5'>上</b>的闪存问题

    ESP32 微控制器系列指南

    Systems 创建了功能强大且价格实惠的片系统 (SoC) 设备,将 Wi-Fi、蓝牙和中央处理单元 (CPU) 集成到一个微控制器封装中,使这些 SoC 成为理想的选择适用于嵌入式控制器和物联网项目
    的头像 发表于 10-02 18:21 ?5239次阅读
    ESP32 <b class='flag-5'>微控制器</b>系列指南

    增加微控制器的输入数

    电子发烧友网站提供《增加微控制器的输入数.pdf》资料免费下载
    发表于 09-21 10:30 ?0次下载
    增加<b class='flag-5'>微控制器</b><b class='flag-5'>上</b>的输入数

    什么是微控制器/它的关键组成部分有哪些?

    微控制器
    芯广场
    发布于 :2024年09月18日 15:02:33

    增加微控制器的输入数量产品概述

    电子发烧友网站提供《增加微控制器的输入数量产品概述.pdf》资料免费下载
    发表于 09-13 09:08 ?0次下载
    增加<b class='flag-5'>微控制器</b><b class='flag-5'>上</b>的输入数量产品概述