你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32MP157A-DK1】gtk 按钮控制灯实现

[复制链接]
xinshuwei 发布时间:2020-4-9 21:58
1.第一步按照官网要求在开发主机安装下面的库

PC $> sudo apt-get update
PC $> sudo apt-get install sed wget curl cvs subversion git-core coreutils unzip texi2html texinfo docbook-utils gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ desktop-file-utils chrpath libxml2-utils xmlto docbook bsdmainutils iputils-ping cpio python-wand python-pycryptopp python-crypto
PC $> sudo apt-get install libsdl1.2-dev xterm corkscrew nfs-common nfs-kernel-server device-tree-compiler mercurial u-boot-tools libarchive-zip-perl
PC $> sudo apt-get install ncurses-dev bc linux-headers-generic gcc-multilib libncurses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev
PC $> sudo apt-get install default-jre

2.添加 conf文件
PC $> echo 'options mmc_block perdev_minors=16' > /tmp/mmc_block.conf
PC $> sudo mv /tmp/mmc_block.conf /etc/modprobe.d/mmc_block.conf

3解压gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf文件。,添加bashrc即可
bin文件下 安装sh文件,输入安装的路径

SDK成功安装.png

上图表示安装成功


4.按官网指示,在sdk同级目录下创建source 编写 代码


#include <gtk/gtk.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include<linux/gpio.h>


struct gpiohandle_request req;
struct gpiohandle_data data;
char chrdev_name[20];
int fd, ret;




static void
led_control(GtkWidget *widget,
             gpointer   data1)
{
   data.values[0] = !(data.values[0]);
        ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
        if (ret == -1) {
            ret = -errno;
            fprintf(stderr, "Failed to issue %s (%d)\n",
                    "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret);
        }


   if(data.values[0])
   {

     g_print("close led \n");

   }
   else
   {
      g_print("open led \n");

   }
   

   

}

static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;
  GtkWidget *button_led;
  GtkWidget *led_label;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "led test");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);




  button_led  = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
  gtk_container_add(GTK_CONTAINER (window), button_led);

led_label =  gtk_button_new_with_label ("LED");
  g_signal_connect (led_label, "clicked", G_CALLBACK (led_control), NULL);
gtk_container_add(GTK_CONTAINER (button_led), led_label);



  gtk_widget_show_all (window);

}

int main (int    argc,char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  
    strcpy(chrdev_name, "/dev/gpiochip0");
    /*  Open device: gpiochip0 for GPIO bank A */
    fd = open(chrdev_name, 0);
    if (fd == -1) {
        ret = -errno;
        fprintf(stderr, "Failed to open %s\n", chrdev_name);

        return ret;
    }



      /* request GPIO line: GPIO_A_14 */
    req.lineoffsets[0] = 14;
    req.flags = GPIOHANDLE_REQUEST_OUTPUT;
    memcpy(req.default_values, &data, sizeof(req.default_values));
    strcpy(req.consumer_label, "led_gpio_a_14");
    req.lines  = 1;

    ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req);
    if (ret == -1) {
        ret = -errno;
        fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n",
            ret);
    }
    if (close(fd) == -1){

  perror("Failed to close GPIO character device file");
  }
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}




4编写Makefile

PROG = gek_led
SRCS = 3.c

CLEANFILES = $(PROG)

# Add / change option in CFLAGS and LDFLAGS
CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0)
LDFLAGS += $(shell pkg-config --libs gtk+-3.0)

all: $(PROG)

$(PROG): $(SRCS)
    $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)

clean:
    rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))


5 source 下 sdk目录下的env开头文件,检查$CC --version 是否有输出



6. 在 source 目录下 make 产生gek_led ,通过scp 或者 filezilla 传到目标板上运行

7. 界面点击led button  同时log 和灯会跟着控制

开关灯.png




收藏 评论2 发布时间:2020-4-9 21:58

举报

2个回答
any012 回答时间:2020-5-8 09:50:26
你倒是上个界面的图啊。
xinshuwei 回答时间:2020-5-9 08:47:49
any012 发表于 2020-5-8 09:50
你倒是上个界面的图啊。

界面就是一个按钮

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版