• 物联网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. }
  • 相关阅读:
    c语言初学者对scanf函数难分辨理解的两个点(欢迎补充)
    SparkSession - Spark SQL 的 入口
    MySQL高级-SQL优化- update 优化(尽量根据主键/索引字段进行数据更新,避免行锁升级为表锁)
    0. HarmonyOS开发环境搭建问题
    (8)Lightweight OpenPose轻量化模型之 模型封装 + 摔倒检测
    verilog实现AM调制及仿真验证
    Docker | 常用命令——排错很有帮助
    DBeaver 安装及配置离线驱动
    C语言从0到1之《三子棋》的实现
    粒子群优化算法(PSO)python实践
  • 原文地址:https://blog.csdn.net/qq_39724355/article/details/131145704