1.第一步按照官网要求在开发主机安装下面的库 0 P3 r2 {2 w3 \4 H- s. }" g PC $> sudo apt-get update9 k, p* V3 i5 f4 t5 j# [% I" N3 [ 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+ W3 `4 [, j, g5 J) F PC $> sudo apt-get install ncurses-dev bc linux-headers-generic gcc-multilib libncurses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev% F& C2 E" {! `- ]% t PC $> sudo apt-get install default-jre% C0 t* } q3 O7 C( _ . U# x) k# G: J9 m6 z 2.添加 conf文件3 m; {1 l4 z; X( g* K3 D4 E 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即可0 X; @$ z% @: p bin文件下 安装sh文件,输入安装的路径 & s/ K; `! F: H0 Y+ Q* C6 O0 i , X6 u2 M4 [9 V; [ 上图表示安装成功 3 ~! k; [, U/ Y: C+ | 2 r4 t) z" T# ~* H9 e; O 4.按官网指示,在sdk同级目录下创建source 编写 代码2 ?2 |5 T, F2 S1 R) _! J$ g+ h: v: @ ! d7 d9 z! r9 [* h p: ` #include <gtk/gtk.h> #include <errno.h> #include <fcntl.h>+ c" l5 M' u) o- M; y1 | a9 p #include <stdio.h> #include <stdlib.h>2 z. B1 R7 R( {; ]0 W #include <string.h> #include <sys/ioctl.h>) E# t# j+ B% g6 o. _" c0 v6 h #include <unistd.h>+ n( ^3 w6 |; h1 S! `3 o' M #include<linux/gpio.h> ( D. J6 Z# z- z+ Y/ s5 ~ struct gpiohandle_request req; struct gpiohandle_data data;: A% k, }! O4 m8 m& B char chrdev_name[20]; int fd, ret; 7 I9 N, o) H/ [3 p/ H& p& N . D; T% e+ S, F3 a static void . Q/ F& P6 ]( ]. T 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",# L- j' P9 W& F "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret);0 o q- B( b) P5 W; }8 p }$ I: n4 n1 V* M& Q: a3 ?$ n & z8 \( N% }, \7 I& P ( y& _6 L% P+ R4 z3 r9 N9 Q if(data.values[0])/ V1 }; T1 M( v- d2 g( c { g_print("close led \n"); }5 W# W4 G. _$ s, L/ y else& Z' \4 H7 R9 u& @- s, C { g_print("open led \n"); } } static void activate (GtkApplication *app, gpointer user_data) {) Q8 l. [ t* i; S b. i1 J GtkWidget *window;9 I' _; C. p2 y `' e, R0 e GtkWidget *button_led; GtkWidget *led_label;0 y; R( D4 e9 G8 q4 ^, u ! L# w9 o0 @9 B. \1 p/ f+ c; O1 x window = gtk_application_window_new (app);1 N/ F7 a0 ^/ A0 g" @. U& x gtk_window_set_title (GTK_WINDOW (window), "led test");1 d7 v# n8 C1 ?+ ~8 Z 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);" e: ~0 y; c4 I6 Z X: a+ L3 p F 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); 9 z' X( Q! a# b2 N# ? " T F: _' c/ K7 a( W* U& I gtk_widget_show_all (window);& i! c V" Q( r # x E/ o2 s* l: y0 ^4 g% N& | }% n3 Z2 F- Z, c " ~ l" T# R A8 y' W% y7 k: h int main (int argc,char **argv). \6 `) b3 }% J' ^7 z0 c {- z2 p' ?7 Z# @- s0 v. t GtkApplication *app;4 E, ?% v" M' n; q: M: H int status;8 q6 H/ g" A6 P, ~0 H: O9 O- }: { app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);4 X3 f2 \2 W8 d9 g7 q ( k/ T2 @5 W1 s; P; e strcpy(chrdev_name, "/dev/gpiochip0"); ]3 W+ k& |+ W6 i /* Open device: gpiochip0 for GPIO bank A */) t: f, \% N& v0 i fd = open(chrdev_name, 0); if (fd == -1) { ret = -errno; fprintf(stderr, "Failed to open %s\n", chrdev_name); return ret; }9 C/ R, v" [( m+ E8 j 4 S3 u) Z; l2 @* u- v$ r1 h$ ~ /* request GPIO line: GPIO_A_14 */. Q/ w1 T" r y. L' _ req.lineoffsets[0] = 14; req.flags = GPIOHANDLE_REQUEST_OUTPUT; memcpy(req.default_values, &data, sizeof(req.default_values));1 ^* I4 {) H; [- B+ V/ q2 i4 [ strcpy(req.consumer_label, "led_gpio_a_14"); req.lines = 1; ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req);" _* h* s! [; N8 j9 k if (ret == -1) { ret = -errno; fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n",' W2 x; ]" _1 |2 m+ ^ ret); }) E. X) R4 |$ u: p if (close(fd) == -1){5 n' y+ }. ~) p perror("Failed to close GPIO character device file");: |1 o/ L* Q( g( w } status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); return status; }$ j! h5 E( v9 `8 U! H , A9 q8 l3 l8 Y" Q" g3 m* E2 G7 K " Q1 A* J0 Q2 i5 F1 q$ W + z8 N$ p3 B" k/ m; A) z3 r9 ] 4编写Makefile* Q5 O0 m+ {1 s, q PROG = gek_led: G+ m9 M6 z& i: P6 R0 z1 f; S% q SRCS = 3.c CLEANFILES = $(PROG)1 s( e3 s ^' X1 a# ? # Add / change option in CFLAGS and LDFLAGS CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0) LDFLAGS += $(shell pkg-config --libs gtk+-3.0)* r8 i D2 X' J: x1 v all: $(PROG)7 i" e& u5 n9 h $(PROG): $(SRCS)1 V# X7 U( g4 ]: w $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) clean:$ @5 J4 z1 f6 L: p4 y) O. r rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))# Z0 n4 n: }7 ?$ G, V( P5 A! | 5 z- w+ w- s0 T; \. r* e$ h 5 source 下 sdk目录下的env开头文件,检查$CC --version 是否有输出 6. 在 source 目录下 make 产生gek_led ,通过scp 或者 filezilla 传到目标板上运行% G n2 N7 r* l/ c 7. 界面点击led button 同时log 和灯会跟着控制- v p0 S$ Z2 v0 y) l+ Z6 ?0 M9 c- n 3 P) b- A2 M" ^ 1 S/ M' x, ^2 s2 j6 ^3 X: C+ b5 B |
最新消息:意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS!意法半导体兑现了之前的承诺!
STM32MP135F-DK开发板评测-开箱亮屏
意法半导体扩展STM32Cube开发环境,简化单核STM32MP1裸机软件开发
1月18日有奖直播 | 如何在STM32MP13x上实现FOTA升级?
【STM32MP13x直播回顾】 直播答疑汇总
STM32MP135 开发平台介绍
使用STM32MP13: 如MCU般在Cortex-A核上裸 跑应用程序
米尔核心板加速基于STM32MP1的产品开发
STM32MP1充电桩全数字交互实现
STM32MP13 产品线 应用于工业和安全的高性价比MPU
界面就是一个按钮