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

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

3天内不再提示

STM32入门学习笔记之GPIO输入输出实验(下)

jf_78858299 来源:滑小稽笔记 作者:电子技术园地 2023-02-16 10:04 次阅读

5.2.5 端口输出数据寄存器:GPIOx_ODR(x=A..E)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

Bit 15~Bit 0:端口输出数据(这些位属于只读并只能以字的形式操作)

注:在输入模式下,ODR的数据可以控制端口内部是上拉还是下拉,写入1意味着端口上拉输入。

5.3 GPIO的输入与输出例程

我们现在在PA0端口接一个按键,PA端口接一个LED,当按下按键的时候,LED以100ms亮,100ms灭,抬起按键后LED常亮。

(1)在stm32f103x.h文件中添加GPIO的结构体和地址映射。

图片

图片

图片

(2)在HEADERWARE目录下创建GPIO文件夹,并创建gpio.c和gpio.h两个文件。

图片

(3)在gpio.h文件中输入以下内容:

图片

(4)在gpio.c文件中输入以下内容

图片

(5)将gpio.c文件和gpio.h文件添加进项目

图片

图片

(6)在1.c文件中输入以下内容:

图片

注:实验中,按键一端接GND,LED一端接VCC,所以按键是检测到0代表按下,端口输出低电平代表LED点亮。

5.4 CM3内核的位带操作

Cortex-M3内核中有一个非常有用的功能,叫做位带操作,支持了位带操作以后,可以使用普通的加载/存储指令来对单一的比特进行读写。在CM3中,有两个区中实现了位带。其中一个是SRAM区的最低1MB范围,第二个则是片内外设区的最低1MB范围。这两个区中的地址除了可以像普通的RAM一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。下图从另一个侧面演示比特的膨胀对应关系。

图片

欲设置地址0x20000000中的比特2,则使用位带操作的设置过程如下图所示。

图片

30年前其实就已经有位带操作的概念了,自8051单片机开始,到现在的CM3内核,位带操作有什么优越性呢?最容易想到的就是通过GPIO的管脚来单独控制每盏LED的点亮与熄灭。另一方面,也对操作串行接口器件提供了很大的方便(典型如74HC165,CD4094)。位带操作使代码更简洁,这只是位带操作优越性的初等体现,位带操作还有一个重要的好处是在务中,用于实现共享资源在任务间的“互锁”访问。多任务的共享资源必须满足一次只有一个任务访问它——亦即所谓的“原子操作”。

5.5 利用位带操作实现GPIO的输入与输出

现在利用位带操作来实现上一题目中的功能。

(1)在sys.h文件中添加实现位带操作的代码。

图片

(2)修改gpio.h中的代码如下图所示。

图片

(3)修改gpio.c中的代码如下图所示。

图片

(4)修改1.c中的代码如下图所示。

图片

5.6 外部中断的实现

关于STM32F103的中断机制在之前已经详细讲述过,现在利用外部中断来实现上一题目的功能。

(1)修改gpio.c中的代码如下图所示。

图片

(2)添加代码到文件stm32f103.h中。

图片

(3)修改1.c中的代码如下图所示。

图片

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

    关注

    0

    文章

    405

    浏览量

    38658
  • adc
    adc
    +关注

    关注

    97

    文章

    5714

    浏览量

    540673
  • STM32
    +关注

    关注

    2249

    文章

    10725

    浏览量

    350290
收藏 人收藏

    评论

    相关推荐

    第二章 stm32 cubemx GPIO输入输出实验以及proteus仿真 精选资料分享

    第二章 stm32 cubemx GPIO输入输出实验以及proteus仿真文章目录第二章 stm32 cubemx
    发表于 07-22 07:51

    STM32F2技术培训_通用输入输出端口_GPIO

    STM32F2技术培训_通用输入输出端口_GPIO
    发表于 12-03 17:34 0次下载

    MCU学习笔记_GPIO工作原理

    purpose input output, 通用输入输出端,可通过程序软件配置成输入或者输出端。引脚与GPIO的区别和联系STM32的引脚
    发表于 10-25 11:21 17次下载
    MCU<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>_<b class='flag-5'>GPIO</b>工作原理

    STM32的8种GPIO输入输出模式

    STM32的8种GPIO输入输出模式参考文章“STM32的8种GPIO输入输出模式深入详解”和“
    发表于 11-26 17:06 16次下载
    <b class='flag-5'>STM32</b>的8种<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b>模式

    [STM32]STM32F407系列教程之二,gpio输入输出实验

    [STM32]STM32F407系列教程之二,gpio输入输出实验
    发表于 11-29 14:06 17次下载
    [<b class='flag-5'>STM32</b>]<b class='flag-5'>STM32</b>F407系列教程之二,<b class='flag-5'>gpio</b><b class='flag-5'>输入输出</b><b class='flag-5'>实验</b>

    2、【STM32F0系列学习】之—通用输入输出端口(GPIO)

    STM32F0系列学习】之—通用输入输出端口GPIO1、GPIO端口配置说明1、GPIO端口配
    发表于 11-29 16:51 66次下载
    2、【<b class='flag-5'>STM32</b>F0系列<b class='flag-5'>学习</b>】之—通用<b class='flag-5'>输入输出</b>端口(<b class='flag-5'>GPIO</b>)

    ZYNQ学习笔记_GPIO输入输出

    ZYNQ学习笔记_GPIOGPIO介绍MIO介绍EMIO介绍控制GPIO接口的寄存器原理GPIO介绍GPIO的英文全称为General-pu
    发表于 12-04 19:36 10次下载
    ZYNQ<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>_<b class='flag-5'>GPIO</b>之<b class='flag-5'>输入输出</b>

    [STM32CubeMX]学习笔记1:GPIO输出LED流水灯

    [STM32CubeMX]学习笔记1:GPIO输出LED流水灯
    发表于 12-05 13:36 12次下载
    [<b class='flag-5'>STM32</b>CubeMX]<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>1:<b class='flag-5'>GPIO</b><b class='flag-5'>输出</b>LED流水灯

    GPIO通用输入输出

    GPIO通用输入输出一、GPIO的功能概述用途:GPIO是通用输入输出(General Purpose I/O)的简称,主要用于工业现场需要
    发表于 12-20 18:58 6次下载
    <b class='flag-5'>GPIO</b>通用<b class='flag-5'>输入输出</b>

    STM32F1学习笔记

    (二)STM32学习GPIO1、GPIO简介GPIO 是通用输入输出端口的简称,简单来说就是
    发表于 12-24 19:18 2次下载
    <b class='flag-5'>STM32</b>F1<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    STM32学习笔记---GPIO

    STM32学习笔记GPIO我使用的是STM32F401ZGT6,有7组IO口,每组16个引脚,共112个引脚。因为太菜了,确实容易出错,
    发表于 01-13 16:31 6次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>---<b class='flag-5'>GPIO</b>

    第二章 stm32 cubemx GPIO输入输出实验以及proteus仿真

    第二章 stm32 cubemx GPIO输入输出实验以及proteus仿真文章目录第二章 stm32 cubemx
    发表于 01-17 10:28 8次下载
    第二章 <b class='flag-5'>stm32</b> cubemx <b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b><b class='flag-5'>实验</b>以及proteus仿真

    STM32入门学习笔记GPIO输入输出实验(上)

    STM32中每个IO口都有很多个作用,比如这次我们使用的STM32F103ZET6的PA0口,既可以作为IO口使用,还可以作为待机唤醒(WAKEUP),模拟输入(ADC功能)等。根据数据手册中列出的每个I/O端口的特定硬件特征,
    的头像 发表于 02-16 10:04 995次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>入门</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>之<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b><b class='flag-5'>实验</b>(上)

    i.MX6ULL学习笔记GPIO按键输入捕获

    掌握GPIO输入输出是必备技能,这篇推文继续来学习操作GPIO,这篇主要学习GPIO
    的头像 发表于 04-06 10:37 788次阅读

    MSPM0L1306开发板教程之GPIO输入输出

    GPIO算是所有MCU入门的第一步,今天的教程就来教大家设置MSPM0L系列的GPIO输入输出功能。
    的头像 发表于 05-04 17:22 3739次阅读
    MSPM0L1306开发板教程之<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b>