导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    如何调用GPIO生成下降沿?

    MR Series
    2
    20
    5113
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      mgeekfb LV 3 最后由 编辑

      譬如调用D1板载16号针角(GPIO10),对应的GPIO_PIN index应该是多少呢?

      1 条回复 最后回复 回复 引用 分享 0
      • BedRock
        BedRock LV 6 最后由 编辑

        根据帖https://bbs.aw-ol.com/topic/336/的图

        GPIO10 SOCNO 为 PB9 对应的 在Tina中的命名规范 PB0 为32 + 9 = 41

        所以需要向/sys/class/gpio/export 写入 41

        之后会生成 GPIO41 的文件夹

        检查/sys/class/gpio/gpio41/direction 是否为 out

        如果是,则可以给/sys/class/gpio/gpio41/value 写入 0 则为低电平

        M 1 条回复 最后回复 回复 引用 分享 1
        • M
          mgeekfb LV 3 @BedRock 最后由 编辑

          @bedrock

          echo 41 > export
          

          显示Invalid Argument

          BedRock 1 条回复 最后回复 回复 引用 分享 0
          • BedRock
            BedRock LV 6 @mgeekfb 最后由 编辑

            @mgeekfb 查看原理图 GPIO10 的SOCNO 应该是 PP1
            d93e2c51-fef9-4090-bd76-494a35e3db91-image.png
            PIN10 才是 PB9 PB9 默认被用作 UART0 当然不可以打开了

            PP1 对应的编号为 GPIO2021 (因为 PPx 是用芯片扩展出来的 GPIO 默认从2020开始)

            M 1 条回复 最后回复 回复 引用 分享 1
            • M
              mgeekfb LV 3 @BedRock 最后由 编辑

              @bedrock 那么2021该怎么调用呢, export 2021 > export 无效

              BedRock 1 条回复 最后回复 回复 引用 分享 0
              • BedRock
                BedRock LV 6 @mgeekfb 最后由 编辑

                @mgeekfb echo

                M 1 条回复 最后回复 回复 引用 分享 0
                • M
                  mgeekfb LV 3 @BedRock 最后由 编辑

                  @bedrock
                  明白了!如果我直接在程序中使用GPIO2021生成下降沿的话,这样用封装好的函数可以吗?

                  #include <sys/types.h>    
                  #include <sys/stat.h>    
                  #include <fcntl.h>
                  
                  static int GPIO_Point_IN1_fd;
                  #define GPIO_Point_IN1 2021
                  #define GPIO_Point_Set write(GPIO_Point_IN1_fd, "1", 1)
                  #define GPIO_Point_ReSet write(GPIO_Point_IN1_fd, "0", 1)
                  #define delay_us(x)  (usleep(x))
                  void falling_edge(void) {
                    GPIO_Point_IN1_fd = GPIO_Point_IN1;
                    GPIO_Point_Set;
                    delay_us(100);
                    GPIO_Point_ReSet;
                  }
                  
                  BedRock 2 条回复 最后回复 回复 引用 分享 0
                  • BedRock
                    BedRock LV 6 @mgeekfb 最后由 编辑

                    @mgeekfb 不可以,因为我上传的代码没有并入 Tina SDK ,所以你需要包含我的头文件,才能使用我这种方法

                    M 1 条回复 最后回复 回复 引用 分享 0
                    • M
                      mgeekfb LV 3 @BedRock 最后由 编辑

                      @bedrock
                      额...那我应该怎样在程序里实现呢?

                      BedRock 1 条回复 最后回复 回复 引用 分享 0
                      • BedRock
                        BedRock LV 6 @mgeekfb 最后由 编辑

                        @mgeekfb 然后我的程序是按照上面说过的,打开一个GPIO,检查状态,然后再进行写入,这种逻辑来的,你默认使用的话,推荐也是按照这种方法,防止后面出错

                        1 条回复 最后回复 回复 引用 分享 0
                        • BedRock
                          BedRock LV 6 @mgeekfb 最后由 编辑

                          @mgeekfb 你先下载我的代码,从 main 函数进入仔细看看😘 😘

                          M 1 条回复 最后回复 回复 引用 分享 0
                          • M
                            mgeekfb LV 3 @BedRock 最后由 编辑

                            @bedrock
                            您的代码是在?我看帖子里提到了GitHub,可以给我一下github的链接嘛?

                            BedRock 1 条回复 最后回复 回复 引用 分享 0
                            • BedRock
                              BedRock LV 6 @mgeekfb 最后由 编辑

                              @mgeekfb 好吧,这个是我的问题,我只贴了代码没有上传😆 😆

                              M 1 条回复 最后回复 回复 引用 分享 0
                              • M
                                mgeekfb LV 3 @BedRock 最后由 编辑

                                @bedrock
                                https://bbs.aw-ol.com/topic/338/用用d1上的gpio-封装好的函数?_=1632734368948
                                我看您这个里面也是直接用的write函数呀,没有定义它

                                BedRock 1 条回复 最后回复 回复 引用 分享 0
                                • BedRock
                                  BedRock LV 6 最后由 编辑

                                  找到了 在这个帖子里
                                  https://bbs.aw-ol.com/topic/349/

                                  1 条回复 最后回复 回复 引用 分享 0
                                  • BedRock
                                    BedRock LV 6 @mgeekfb 最后由 编辑

                                    @mgeekfb 有点旧了,看我在模块中上传的代码😘

                                    M 1 条回复 最后回复 回复 引用 分享 0
                                    • M
                                      mgeekfb LV 3 @BedRock 最后由 编辑

                                      @bedrock 我看您在模块里也是直接用的write函数来调整电位?没有关于write的定义了

                                      BedRock 1 条回复 最后回复 回复 引用 分享 0
                                      • BedRock
                                        BedRock LV 6 @mgeekfb 最后由 编辑

                                        @mgeekfb write 是操作系统的接口,其实在GPIO底层驱动已经写好了

                                        M 1 条回复 最后回复 回复 引用 分享 0
                                        • M
                                          mgeekfb LV 3 @BedRock 最后由 编辑

                                          @bedrock 嗯嗯,那么我之前那个代码应该是可以的吧?我只用了write函数。

                                              
                                          Mmgeekfb 大约5小时之前
                                          譬如调用D1板载16号针角(GPIO10),对应的GPIO_PIN index应该是多少呢?
                                          
                                           分享  0 
                                          BedRockBedRock 大约5小时之前
                                          根据帖https://bbs.aw-ol.com/topic/336/的图
                                          
                                          GPIO10 SOCNO 为 PB9 对应的 在Tina中的命名规范 PB0 为32 + 9 = 41
                                          
                                          所以需要向/sys/class/gpio/export 写入 41
                                          
                                          之后会生成 GPIO41 的文件夹
                                          
                                          检查/sys/class/gpio/gpio41/direction 是否为 out
                                          
                                          如果是,则可以给/sys/class/gpio/gpio41/value 写入 0 则为低电平
                                          
                                           分享  1 
                                          Mmgeekfb 大约4小时之前
                                          @bedrock
                                          
                                          echo 41 > export
                                          显示Invalid Argument
                                          
                                           分享  0 
                                          BedRockBedRock 大约4小时之前
                                          @mgeekfb 查看原理图 GPIO10 的SOCNO 应该是 PP1
                                          d93e2c51-fef9-4090-bd76-494a35e3db91-image.png
                                          PIN10 才是 PB9 PB9 默认被用作 UART0 当然不可以打开了
                                          
                                          PP1 对应的编号为 GPIO2021 (因为 PPx 是用芯片扩展出来的 GPIO 默认从2020开始)
                                          
                                           分享  1 
                                          Mmgeekfb 大约2小时之前
                                          @bedrock 那么2021该怎么调用呢, export 2021 > export 无效
                                          
                                           分享  0 
                                          BedRockBedRock 大约2小时之前
                                          @mgeekfb echo
                                          
                                           分享  0 
                                          Mmgeekfb 大约2小时之前
                                          @bedrock
                                          明白了!如果我直接在程序中使用GPIO2021生成下降沿的话,这样用封装好的函数可以吗?
                                          
                                          #include <sys/types.h>    
                                          #include <sys/stat.h>    
                                          #include <fcntl.h>
                                          
                                          static int GPIO_Point_IN1_fd;
                                          #define GPIO_Point_IN1 2021
                                          #define GPIO_Point_Set write(GPIO_Point_IN1_fd, "1", 1)
                                          #define GPIO_Point_ReSet write(GPIO_Point_IN1_fd, "0", 1)
                                          #define delay_us(x)  (usleep(x))
                                          void falling_edge(void) {
                                            GPIO_Point_IN1_fd = GPIO_Point_IN1;
                                            GPIO_Point_Set;
                                            delay_us(100);
                                            GPIO_Point_ReSet;
                                          }
                                          
                                          BedRock 1 条回复 最后回复 回复 引用 分享 0
                                          • BedRock
                                            BedRock LV 6 @mgeekfb 最后由 编辑

                                            @mgeekfb 不可以 你可以看看我的 fd 是 使用 open 打开了 value 才使用 write 写入的

                                            1 条回复 最后回复 回复 引用 分享 0
                                            • 1 / 1
                                            • First post
                                              Last post

                                            Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                                            行为准则 | 用户协议 | 隐私权政策