1.第一步按照官网要求在开发主机安装下面的库4 S$ k8 e% O I( g1 b 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-perl0 B! c/ E" k! O) L- Q m6 {; ^ PC $> sudo apt-get install ncurses-dev bc linux-headers-generic gcc-multilib libncurses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev* m4 q+ n- U# R; t' M: w' w PC $> sudo apt-get install default-jre 4 f4 t0 F% v U: L2 w) L5 I" d 2.添加 conf文件+ O7 H9 C0 d$ k) ~. M8 P0 Z( H 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即可7 S) ~2 Q, T) S3 v bin文件下 安装sh文件,输入安装的路径, V! H$ a) S% Q" a2 V3 t7 t3 b 6 @8 Z; v U* m! E# ? 5 e9 ~ A8 t( D! s0 j 上图表示安装成功. A9 i. x( m, J4 w5 P. |$ m & a9 T7 p1 E% m1 W, z7 `( p7 ? # ? Z8 b9 J5 C) U! A/ y) z: \ 4.按官网指示,在sdk同级目录下创建source 编写 代码 - p, {) `5 {' J5 w% t7 B0 O+ f Z9 K9 v9 @$ O! }7 L# w #include <gtk/gtk.h> #include <errno.h>3 Z7 |* x( i# f #include <fcntl.h>6 q0 c5 V' v9 g' S/ ^ #include <stdio.h>2 D, b% M% g( S( ~& \4 h #include <stdlib.h> #include <string.h>! h6 |, F6 W4 q1 d1 R- K& K #include <sys/ioctl.h>- r: N J, W6 C #include <unistd.h>9 n, g' O6 r7 m: S* |' [ #include<linux/gpio.h>9 }, a7 S/ d8 J6 C: R! W 2 M& U% i5 H2 }& } struct gpiohandle_request req;! s% u6 z8 I, f! L. z& F% S struct gpiohandle_data data; char chrdev_name[20]; int fd, ret; , \& \, o! _5 A$ |1 t* ]3 G* `! W 6 r' o# }! x$ S" |$ h / W+ C- \ ~* G2 R0 Z static void 7 H! k' [) q* W* s4 e' y( C6 h6 M led_control(GtkWidget *widget,0 B( \0 ]/ {; X# ^, F gpointer data1) {; I- @! U5 T' C: }/ _6 _0 c4 v data.values[0] = !(data.values[0]); ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data); if (ret == -1) {5 }* l0 H2 r+ p& Y. B v ret = -errno; fprintf(stderr, "Failed to issue %s (%d)\n", "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret); }, @8 N6 X v8 E" v5 t if(data.values[0]) {. W' X8 C7 B2 c g_print("close led \n"); 9 D. [" D6 n8 ]) w T7 S' m } else$ i3 ]5 i. U. {, M. f- }/ s {8 a" r4 o3 I. ?2 v& U( f) h) I2 `4 s g_print("open led \n"); 2 v6 b) H$ T) J; i5 W+ f$ v } B1 S5 w. j6 S+ ~- t9 N ( O3 P' h% q! n4 i- | " z @0 B' c$ s) y$ \ } # {* R- n- G/ \2 l, I static void activate (GtkApplication *app,: o; |* q9 S/ R/ i8 ?2 K gpointer user_data) { GtkWidget *window;- s0 k q* n5 `( Q1 I+ u GtkWidget *button_led;( K% i( }" Q. ?& ?5 ] GtkWidget *led_label;% B* V$ w! j+ _+ Z ! m% g5 B$ D# G' {8 ~ 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);" {* L$ E1 N. N5 [# _9 w% O( a , L; Y6 A7 p% A . Q9 S) Y8 \: T/ ^, @; ]) P7 `: |' w button_led = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);+ J% m, ~. B4 b/ `& ^0 v( t gtk_container_add(GTK_CONTAINER (window), button_led); led_label = gtk_button_new_with_label ("LED");5 L. b& {+ h, e6 J3 ] g_signal_connect (led_label, "clicked", G_CALLBACK (led_control), NULL);( @5 e# l, `9 `) |; W gtk_container_add(GTK_CONTAINER (button_led), led_label);# v! B0 _& l# z! f( r : y1 X% I, C- }( l , [9 Y- T4 L* b. y$ s8 i' N gtk_widget_show_all (window);6 F) U+ l, v3 h- x; a. R }: W/ z' Q: m3 u" R int main (int argc,char **argv)/ [: ?' e! g L4 ?" O, V; e1 f { GtkApplication *app;, G" ?8 k' w7 U int status; 7 z. C1 y5 N2 A5 M6 p9 p% A; U' X) M app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); M$ x) A( Y. z6 z5 Q$ W K g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);( J4 L# N5 w5 m z) u 7 j3 _7 U- Z5 o4 q( V0 h+ C4 }4 W! X strcpy(chrdev_name, "/dev/gpiochip0");( p6 C1 ^8 @2 X$ R /* Open device: gpiochip0 for GPIO bank A */ fd = open(chrdev_name, 0);: ?4 i: N5 H1 G. ^8 C( y& V if (fd == -1) {7 n' H: w1 h2 E/ @! D2 f/ Y o% F; | ret = -errno;) M9 b( a& L2 G/ P1 i fprintf(stderr, "Failed to open %s\n", chrdev_name);/ S: [( Z+ ?! W: [$ J% C 9 q- \2 |) Z0 E; U9 z, `1 C return ret;. e4 T! ^) o# P' F- g1 C } /* request GPIO line: GPIO_A_14 */ req.lineoffsets[0] = 14;! K, g% o! }8 c! ~+ y3 a% } req.flags = GPIOHANDLE_REQUEST_OUTPUT; memcpy(req.default_values, &data, sizeof(req.default_values)); strcpy(req.consumer_label, "led_gpio_a_14");+ N& o2 @+ } W N7 j- X req.lines = 1;. Z2 F7 E5 i+ J 2 R" {) B: O* G. {) A- O8 J; v ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req); if (ret == -1) {+ x6 q( v: D4 ?% I+ @ ret = -errno; fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n", ret); }2 J7 j1 A) [* s3 m$ ^ if (close(fd) == -1){ 1 j" T3 E A; q# U: q perror("Failed to close GPIO character device file");, u; w1 r% I8 }& M* @, v/ z } status = g_application_run (G_APPLICATION (app), argc, argv);( k& T" d3 T. B h g_object_unref (app); " ]" C5 B8 f& G. [ return status;+ }. T5 Y4 Y+ j, h5 w, Z" N } 2 i3 {$ Z& ]) L. b7 `; `3 x! ^/ o 1 a5 [- K5 @/ u- \# k5 ? 4编写Makefile% o; H( g' a3 y# C/ J PROG = gek_led SRCS = 3.c. ^& u o8 C9 F& @) @5 X% | CLEANFILES = $(PROG) # Add / change option in CFLAGS and LDFLAGS, C% V$ O- V) }* O2 u! H! r! P CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0) LDFLAGS += $(shell pkg-config --libs gtk+-3.0)$ c' q |/ h5 a all: $(PROG)$ Y$ {4 j9 z& d4 @ ( p; u5 m3 B1 Z3 ~0 s $(PROG): $(SRCS) $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) clean:8 ^% w! K7 y, N0 p+ ^ rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)) , O; @5 l3 R% j/ j$ n 5 source 下 sdk目录下的env开头文件,检查$CC --version 是否有输出 6. 在 source 目录下 make 产生gek_led ,通过scp 或者 filezilla 传到目标板上运行: ^. d' Y$ @- p9 R 7. 界面点击led button 同时log 和灯会跟着控制! R- \1 \5 v* x8 v0 } 3 X: W& q# L) R$ T2 x $ A9 ~: s/ t. t2 I/ S0 D$ r7 [ 9 T$ M4 \* O$ P: M |
最新消息:意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS!意法半导体兑现了之前的承诺!
STM32MP135F-DK开发板评测-开箱亮屏
意法半导体扩展STM32Cube开发环境,简化单核STM32MP1裸机软件开发
1月18日有奖直播 | 如何在STM32MP13x上实现FOTA升级?
【STM32MP13x直播回顾】 直播答疑汇总
STM32MP135 开发平台介绍
使用STM32MP13: 如MCU般在Cortex-A核上裸 跑应用程序
米尔核心板加速基于STM32MP1的产品开发
STM32MP1充电桩全数字交互实现
STM32MP13 产品线 应用于工业和安全的高性价比MPU
界面就是一个按钮