码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 物联网Lora模块从入门到精通(四)对某些端口的初始化


    一、前言

            由于程序设计开发具有的不确定性,我们常常需要初始化某些特定的引脚,并读取引脚电平状态或向引脚输出高低电平。

    二、代码实现

            快速找到端口的初始化语句:

            首先,找到board.c文件,在下图的位置,我们可以看到关于LED灯的端口的初始化语句。

            通过 Go Definition功能或者直接找到gpio.c文件,可以看到具体的实现方法:

    1. /*
    2. / _____) _ | |
    3. ( (____ _____ ____ _| |_ _____ ____| |__
    4. \____ \| ___ | (_ _) ___ |/ ___) _ \
    5. _____) ) ____| | | || |_| ____( (___| | | |
    6. (______/|_____)_|_|_| \__)_____)\____)_| |_|
    7. (C)2013 Semtech
    8. Description: Generic GPIO driver implementation
    9. Comment: Relies on the specific board GPIO implementation as well as on
    10. IO expander driver implementation if one is available on the target
    11. board.
    12. License: Revised BSD License, see LICENSE.TXT file include in the project
    13. Maintainer: Miguel Luis and Gregory Cristian
    14. */
    15. #include "board.h"
    16. #include "gpio-board.h"
    17. void GpioInit( Gpio_t *obj, PinNames pin, PinModes mode, PinConfigs config, PinTypes type, uint32_t value )
    18. {
    19. GpioMcuInit( obj, pin, mode, config, type, value );
    20. }
    21. void GpioSetInterrupt( Gpio_t *obj, IrqModes irqMode, IrqPriorities irqPriority, GpioIrqHandler *irqHandler )
    22. {
    23. GpioMcuSetInterrupt( obj, irqMode, irqPriority, irqHandler );
    24. }
    25. void GpioRemoveInterrupt( Gpio_t *obj )
    26. {
    27. GpioMcuRemoveInterrupt( obj );
    28. }
    29. void GpioWrite( Gpio_t *obj, uint32_t value )
    30. {
    31. GpioMcuWrite( obj, value );
    32. }
    33. void GpioToggle( Gpio_t *obj )
    34. {
    35. GpioMcuToggle( obj );
    36. }
    37. uint32_t GpioRead( Gpio_t *obj )
    38. {
    39. return GpioMcuRead( obj );
    40. }

            本次,我们主要使用的方法为:GpioInit()

            该方法有五个参数,我们依次展开来看。

            参数一:Gpio_t *obj :我们在使用时需要先创建一个Gpio_t类型的变量,并在初始化时传入,方便我们后面去对其操作。

            参数二:PinNames pin:此处我们填写需要操作的端口,例如PB_2。

            参数三:PinModes mode:此处我们可以填常见的两种,即PIN_INPUT(输入模式),PIN_OUTPUT(输出模式),而PIN_ALTERNATE_FCT与PIN_ANALOGIC暂时不需要我们关注。

            参数四:PinConfigs config:此处我们一般写PIN_PUSH_PULL(推挽)即可。

            参数五:PinTypes type:此处我们根据需要选择PIN_NO_PULL,PIN_PULL_UP,PIN_PULL_DOWN即可。

            参数六:填0即可。

            代码示例:

            下面展示读取PB_2电平,低电平点亮LED1的操作:

     

    1. Gpio_t Device;
    2. int main( void )
    3. {
    4. Init();
    5. GpioInit(&Device,PB_2,PIN_INPUT,PIN_PUSH_PULL,PIN_PULL_UP,0);
    6. while( 1 )
    7. {
    8. if(GpioRead(&Device)==0)
    9. GpioWrite(&Led1,0);
    10. else
    11. GpioWrite(&Led1,1);
    12. }
    13. }
  • 相关阅读:
    微服务版mall电商项目本地开发环境启动前后端服务详细指导教程
    关于nginx整合fastdfs时http请求无法访问,nginx正常启动类但是访问不能请求的解决方法
    vue-quill-editor富文本编辑器使用方法,最全,含部分源码解读,含图片上传,如果页面有多个富文本,图片上传解决方案
    PX4模块设计之十三:WorkQueue设计
    大家经常提到的RPA是什么!跟我来!带你全面了解RPA!
    【高效办公_PDF】如何快速批量整合多个PDF???---Python方法
    汽车驾驶自动化分级L1~L5
    分库分表实战(6):小试牛刀 — 千万级数据之sql优化上篇
    JavaScript奇淫技巧:清理无效的垃圾代码
    每日分享html之2个悬停、2个加载、1个button
  • 原文地址:https://blog.csdn.net/qq_39724355/article/details/131145704
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号