1.第一步按照官网要求在开发主机安装下面的库! G+ N0 q3 I; e4 w 1 b1 q4 R1 ~; ]) @5 s 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+ m0 n! W6 U, }2 c0 J 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; l1 S+ V# _4 y, h! q+ B) ~ b 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-jre2 j% M- a$ t0 a / U9 l$ L+ H& Y& h2 N9 B: D3 } 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即可/ m+ z( X& d. R( K z$ \$ q bin文件下 安装sh文件,输入安装的路径 ; t' H4 a% `) E$ N2 [ n% y% w % o6 e. O' D6 O6 X0 ]7 f, S 上图表示安装成功# C4 K0 { t; W5 K 4 Q2 E3 x5 M8 h0 C) f $ F" l" I9 |! |6 w2 \2 L2 a- h 4.按官网指示,在sdk同级目录下创建source 编写 代码8 N: j1 Z. g2 y4 V1 i N/ l #include <gtk/gtk.h>) i4 ?, z+ `9 c #include <errno.h> #include <fcntl.h>3 }' L+ K( |5 a/ u F5 G #include <stdio.h> #include <stdlib.h> #include <string.h>- t, v6 m( v2 _ #include <sys/ioctl.h> #include <unistd.h>: e z: N( F3 d# u6 I #include<linux/gpio.h>7 I( q: z6 a0 z8 ~& q! v# Z ( {0 C' x1 v( W5 d) P # O% l8 p4 j: A8 c% b" R struct gpiohandle_request req; struct gpiohandle_data data; char chrdev_name[20];8 ~% n3 W# g: e( i int fd, ret; 8 H" X; R) p) d% J & V! ^4 I7 u" i5 C8 |, ]5 R, ^' L1 ~# z & M: z4 o4 d+ u9 K5 T( P6 d static void led_control(GtkWidget *widget,2 @6 q% \" h8 x6 f' s gpointer data1)7 h* Q: S) `3 q' {7 H( \ {# g$ ^6 r3 O% V7 r. {. R data.values[0] = !(data.values[0]); ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data); if (ret == -1) {" s, K& a6 e% f' P ret = -errno;* O' o! B$ d& j& m: I, x9 P! u fprintf(stderr, "Failed to issue %s (%d)\n",/ o7 i" o# I" c8 X. y- D) r' d0 X "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret); }6 o) b# M) X. L' n. ~ " {0 v, P/ `2 t$ [, [6 _' l6 Y3 s if(data.values[0]) { ) ~7 k* G( b4 R- s g_print("close led \n"); 4 C4 N$ X& x) z B7 C1 A) _ Y }& C3 }# `8 W. k' K. v else) g Y- J/ @1 R& ]' w$ } { g_print("open led \n"); , F# P9 o2 x- Q+ M' v% d } + Y" V8 d! `: p% p1 c* I 1 |8 D" j, b$ l3 q4 B4 v. W } 2 p- Y5 F5 S3 H/ E static void activate (GtkApplication *app, gpointer user_data)8 M& _. @: b7 [3 ~1 H" A: T { GtkWidget *window; GtkWidget *button_led; GtkWidget *led_label;% X$ J; M# s' }4 Y1 S# M window = gtk_application_window_new (app);: G( k1 ?1 K& q gtk_window_set_title (GTK_WINDOW (window), "led test");& C8 N; l, a: q* N gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); ! r$ _) _( f L/ C3 }4 V* N2 H: v 0 a% x- R- q8 ~ U+ }/ T button_led = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER (window), button_led); : `7 r- z9 y0 |, j/ A8 j led_label = gtk_button_new_with_label ("LED"); g_signal_connect (led_label, "clicked", G_CALLBACK (led_control), NULL);" w7 s) G! b# f% J- l gtk_container_add(GTK_CONTAINER (button_led), led_label);6 ?4 m8 M; }9 l( X9 U( s7 D P8 D0 Q gtk_widget_show_all (window); 8 F; _3 O! F# `" u1 [5 g1 F }7 q- B' G5 i, o$ ^; k 1 d4 M) T' t) ] v8 `$ n int main (int argc,char **argv)9 H' ^$ s8 k* F. W; p {8 r& U4 ]" o P* l+ u. `/ b+ | GtkApplication *app; int status; app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);) H7 d; _! _ f ^2 ^: o' Y strcpy(chrdev_name, "/dev/gpiochip0");# }! p! \( o, S' d /* Open device: gpiochip0 for GPIO bank A */ fd = open(chrdev_name, 0); if (fd == -1) {" R5 c4 D/ g3 ]- | ret = -errno; fprintf(stderr, "Failed to open %s\n", chrdev_name);. X0 H1 b) A# y# o return ret;% Q0 c; c" W- v1 R# G) h; ]- l O } /* request GPIO line: GPIO_A_14 */; @% Q# p, M# g7 M' z8 |) p req.lineoffsets[0] = 14;" i V7 [* p5 a" l req.flags = GPIOHANDLE_REQUEST_OUTPUT;7 D6 Y# K" a7 [ memcpy(req.default_values, &data, sizeof(req.default_values)); strcpy(req.consumer_label, "led_gpio_a_14"); req.lines = 1;: W7 b! K0 G) j% l6 a7 @/ \8 O , `0 w7 }/ I7 G W* H8 a2 f6 x ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req);6 T5 M. _$ ]$ k$ ~2 t- ? if (ret == -1) {! w1 V' B) c! F d i' O9 D ret = -errno;6 Y* D' X7 h& `5 W6 s# u fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n", ret); }2 X: w2 X( S: [. A- L' u! u if (close(fd) == -1){ 8 C. J2 i! V2 |& V" y2 W perror("Failed to close GPIO character device file");* ~6 j; B# L7 |5 \- K }; y8 f O/ s* C/ {$ x! B `% M status = g_application_run (G_APPLICATION (app), argc, argv);* h5 Q/ }9 l: ^* s1 ^ g_object_unref (app);2 t5 A4 y; N* R5 _7 Y/ H1 N ( X$ O; ~+ l$ e' R' J( w" K% o, M; D return status;' t1 t7 `# q: j2 n1 t2 f. N/ f8 U } & o' Z( E% C P& c7 X% x ; w, P3 s2 L5 ~5 K. b 4编写Makefile" H1 @$ V6 u5 D7 J8 G3 [ PROG = gek_led! ^) T! y+ L3 @; b" s \: A: ?9 H SRCS = 3.c CLEANFILES = $(PROG) % C3 F! v: E# Y! c. X # Add / change option in CFLAGS and LDFLAGS7 U' k I. ], K) T9 X, | CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0) LDFLAGS += $(shell pkg-config --libs gtk+-3.0) % x& O& j4 t4 Q9 B all: $(PROG) $(PROG): $(SRCS) $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) 5 X0 t1 {9 F- s clean:" }0 O! Z& K/ R; q& U1 N& y rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)), H) X) J+ g0 m& E0 O& w 6 h s. F' j( _5 L) t5 ~2 _ 5 source 下 sdk目录下的env开头文件,检查$CC --version 是否有输出 ( o4 h9 f" E2 `) f : ^0 E$ j, w- P: b 6. 在 source 目录下 make 产生gek_led ,通过scp 或者 filezilla 传到目标板上运行 7. 界面点击led button 同时log 和灯会跟着控制 9 Y) R- F% p; w$ H, O9 q 0 b. }% ~8 T$ X3 r' l: _7 o( u . s# U/ G! x6 h, j1 o |
最新消息:意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS!意法半导体兑现了之前的承诺!
STM32MP135F-DK开发板评测-开箱亮屏
意法半导体扩展STM32Cube开发环境,简化单核STM32MP1裸机软件开发
1月18日有奖直播 | 如何在STM32MP13x上实现FOTA升级?
【STM32MP13x直播回顾】 直播答疑汇总
STM32MP135 开发平台介绍
使用STM32MP13: 如MCU般在Cortex-A核上裸 跑应用程序
米尔核心板加速基于STM32MP1的产品开发
STM32MP1充电桩全数字交互实现
STM32MP13 产品线 应用于工业和安全的高性价比MPU
界面就是一个按钮