1456|2

6105

帖子

4

TA的资源

版主

楼主
 

【Luckfox幸狐 RV1106 Linux 开发板测评】04 应用程序交叉编译与gpio [复制链接]

 
本帖最后由 damiaa 于 2024-2-27 21:29 编辑

               【Luckfox幸狐 RV1106 Linux 开发板测评】04 应用程序交叉编译与gpio

 

 

一、RV1106和电脑交互的方式有多种
串口登录和控制
Ssh登陆和文件拷贝(scp)
adb登录和文件传送
samba传输文件 这里推荐用它
 
二、编译程序
如果是用python就不需要编译,直接编写好拷贝进去就可以运行,或者用板子上带的vi编辑。
C语言应用程序的编译是使用的交叉编译工具,工具的地址在
/home/z@z-virtual-machine:~/rv-xxxx/rv1106-spinand/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin$
vi ~/.bashrc (但我检查了一下好像加进去了!)
我们只需要在home/z/.bashrc文件后面添加
export =PATH=home/z/rv-xxxx/rv1106-spinand/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH 保存后重启,环境变量就加进去了。这样在任何地方都可以调用上图路径的gcc编译应用程序了。
 
三、GPIO的操作
 GPIO 的命名方式为 GPIO{bank}_{group}{X},如下所示:
GPIO0_A0 ~ A7
GPIO0_B0 ~ B7
GPIO0_C0 ~ C7
GPIO0_D0 ~ D7
GPIO1_A0 ~ A7
....
GPIO1_D0 ~ D7
....
GPIO4_D0 ~ D7
GPIO 编号计算方法如下:
GPIO 引脚编号计算公式:pin = bank * 32 + number
GPIO 组内编号计算公式:number = group * 8 + X
综上:pin = bank * 32 + (group * 8 + X)
以 GPIO1_C7_d 为例说明,其中:
  • bank :1
  • group :2 (A=0, B=1, C=2, D=3)
  • X :7
所以 GPIO1_C7_d 的引脚编号为:1 x 32 + ( 2 x 8 + 7 ) = 55
 
设备目录
ls /sys/class/gpio/
查看设备属性
cd /sys/class/gpio/gpio55
ls
把GPIO1_C7_d GPIO1_C6_d跨接
然后到
echo 55 > /sys/class/gpio/export
echo 55 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio54/direction
echo in > /sys/class/gpio/gpio55/direction
echo 1 > /sys/class/gpio/gpio54/value
cat /sys/class/gpio/gpio55/value
 
四、python控制gpio就把程序直接推送到板子运行程序 python3 gpio.py
from periphery import GPIO
import time

Write_Pin = 55  
Read_Pin = 54   

Write_GPIO = GPIO(Write_Pin, "out")
Read_GPIO = GPIO(Read_Pin, "in")

try:
    while True:
        try:
            Write_GPIO.write(True)
            pin_state = Read_GPIO.read()
            print(f"Pin state: {pin_state}")

            Write_GPIO.write(False)
            pin_state = Read_GPIO.read()
            print(f"Pin state: {pin_state}")

            time.sleep(1)

        except KeyboardInterrupt:
            Write_GPIO.write(False)
            break

except IOError:
    print("Error")

finally:
    Write_GPIO.close()
    Read_GPIO.close()

 

 
五、c语言控制gpio
编辑好的程序交叉编译
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    int gpio_pin;
    
    printf("Please enter the GPIO pin number: ");
    scanf("%d", &gpio_pin);
    
    FILE *export_file = fopen("/sys/class/gpio/export", "w");
    if (export_file == NULL) {
        perror("Failed to open GPIO export file");
        return -1;
    }
    fprintf(export_file, "%d", gpio_pin);
    fclose(export_file);

    char direction_path[50];
    snprintf(direction_path, sizeof(direction_path), "/sys/class/gpio/gpio%d/direction", gpio_pin);
    FILE *direction_file = fopen(direction_path, "w");
    if (direction_file == NULL) {
        perror("Failed to open GPIO direction file");
        return -1;
    }
    fprintf(direction_file, "out");
    fclose(direction_file);

    char value_path[50];
    char cat_command[100];
    snprintf(value_path, sizeof(value_path), "/sys/class/gpio/gpio%d/value", gpio_pin);
    snprintf(cat_command, sizeof(cat_command), "cat %s", value_path);
    FILE *value_file = fopen(value_path, "w");
    if (value_file == NULL) {
        perror("Failed to open GPIO value file");
        return -1;
    }   

    for (int i = 0; i < 3; i++) {
        fprintf(value_file, "1");
        fflush(value_file);

        system(cat_command);
        sleep(1);

        fprintf(value_file, "0");
        fflush(value_file);
        
        system(cat_command);
        sleep(1);
    }

    fclose(value_file);

    FILE *unexport_file = fopen("/sys/class/gpio/unexport", "w");
    if (unexport_file == NULL) {
        perror("Failed to open GPIO unexport file");
        return -1;
    }
    fprintf(unexport_file, "%d", gpio_pin);
    fclose(unexport_file);

    return 0;
}

 

然后拷贝到 板子
修改执行属性
运行查看结果
好实验先到这里,谢谢。

最新回复

感觉还是用python控制更方便一些   详情 回复 发表于 2024-2-28 19:27
点赞 关注
 
 

回复
举报

7159

帖子

2

TA的资源

版主

沙发
 

感觉还是用python控制更方便一些

点评

那是 都不需要编译。  电脑都不要。直接在板子上的vi 或vim编辑就运行。  详情 回复 发表于 2024-2-28 20:08
 
 
 

回复

6105

帖子

4

TA的资源

版主

板凳
 
wangerxian 发表于 2024-2-28 19:27 感觉还是用python控制更方便一些

那是 都不需要编译。  电脑都不要。直接在板子上的vi 或vim编辑就运行。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表