|
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文件6 W# u1 e4 Z3 ?( U0 ^ PC $> echo 'options mmc_block perdev_minors=16' > /tmp/mmc_block.conf& N2 `7 _/ a6 l+ l: f6 v ? PC $> sudo mv /tmp/mmc_block.conf /etc/modprobe.d/mmc_block.conf # @- A7 m- y ` 3解压gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf文件。,添加bashrc即可 bin文件下 安装sh文件,输入安装的路径, h& Z" H* Z7 Y$ ?- D& |' k o# G4 h2 @3 X$ ?; ?! Y4 P7 z3 `
上图表示安装成功# x8 c2 { q3 n& [ 4.按官网指示,在sdk同级目录下创建source 编写 代码 #include <gtk/gtk.h>, l. w' @) d2 ~ #include <errno.h>5 N' i* v3 N/ @. J' s #include <fcntl.h> #include <stdio.h>* ?% j" D8 }' o6 j) k #include <stdlib.h>3 V8 B% D% j/ _* M) X #include <string.h>2 X, G/ x9 x/ s! s #include <sys/ioctl.h>$ v! b, Q* _& _7 x! P4 A7 U #include <unistd.h>: m0 j! K! Z V$ r ^" m #include<linux/gpio.h> , \& [' x8 R# D' \' ~& Y: K struct gpiohandle_request req;: U0 I5 [# i7 k" o+ o struct gpiohandle_data data;& J6 f5 H" Q2 L" N$ K) w C char chrdev_name[20]; int fd, ret; ; {" `# ~5 t! M) U4 c. a ; V. x/ Q t1 Z2 n static void led_control(GtkWidget *widget,0 ^/ ]0 X# Z _ gpointer data1)/ n# q t: G! V& r4 h {& q2 e' Z: s- \6 C1 c8 b) c data.values[0] = !(data.values[0]);+ m; h y0 v3 H ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data); if (ret == -1) {; F+ h7 f8 t$ N# _; ]4 K ret = -errno;( |& q# N0 C$ X' j- Y$ y! ]! [8 f fprintf(stderr, "Failed to issue %s (%d)\n", "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret); } ! D- J% A) r( o' |, \ if(data.values[0])9 o; G& m5 J1 m; F3 a% | {1 @" i/ A2 ^! v1 Z ) j( H$ [! _5 n; Q' k# F g_print("close led \n"); W9 N6 G9 u/ L3 Q! C * J* s/ m& P, U1 {( C k } else! [, F2 g( }7 J4 s' v$ b3 d$ q { g_print("open led \n"); }& Z4 t e" L! {( |! g+ k & J# G1 a8 ?; K 2 @1 K- I' }* D ]' z% O: z) c } static void activate (GtkApplication *app, gpointer user_data) {, j; _' W- [! S1 \1 v5 x GtkWidget *window;3 S* K, P% _0 z9 w6 c4 M; p GtkWidget *button_led;6 r5 z3 u) L" n f6 Y GtkWidget *led_label; 0 x( m4 y: t- g* ^7 v- [ window = gtk_application_window_new (app);, p5 S' K0 ?& K3 N7 {! g gtk_window_set_title (GTK_WINDOW (window), "led test");+ T: \/ F: T4 n gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);, k- S3 p$ `6 _; ~, i3 s r/ H: U; W / q+ C' Y f% c% G / H3 ?, a+ x1 p$ ? button_led = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER (window), button_led);/ V* ?! Q2 z3 j$ d' k4 J + }. \& I9 i# _; D& w9 w/ W led_label = gtk_button_new_with_label ("LED"); g_signal_connect (led_label, "clicked", G_CALLBACK (led_control), NULL);) K( O& j) c3 y2 r. ?7 z! ` gtk_container_add(GTK_CONTAINER (button_led), led_label);0 x X$ K2 o" P( n0 W8 g* y' V* i9 S + R* `! m5 Z! A7 B( a 0 E4 ]2 } j( S gtk_widget_show_all (window); ! R/ O, F0 R' Z' | } 7 _' F& n- v1 j6 g! Z! y! C6 b6 d- U1 r! E int main (int argc,char **argv) {: {5 K1 s# h5 J8 w5 Z: o+ ` GtkApplication *app; int status; 3 T$ j% f! h8 n; h2 g) O app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);4 W5 q* {: {4 ?/ c/ z2 c 8 @# ~! k, L, U( x, @ strcpy(chrdev_name, "/dev/gpiochip0");' f9 W% V4 `' Z1 X$ b. p/ s /* Open device: gpiochip0 for GPIO bank A */ fd = open(chrdev_name, 0);" Y& G. R* G- Z1 W if (fd == -1) { ret = -errno;7 ^3 _, T5 y+ l" ~% Z fprintf(stderr, "Failed to open %s\n", chrdev_name); , P+ ]% E+ W; w& t return ret;6 H( I7 D5 y& w( U1 @# h } p: D; n; {! x6 {0 F5 s! r C6 k8 Z7 h& b) Z7 H$ s: I. M( D /* request GPIO line: GPIO_A_14 */1 [& n+ l6 y& n8 H+ _ req.lineoffsets[0] = 14; req.flags = GPIOHANDLE_REQUEST_OUTPUT;9 g8 l$ \6 N' j" Q5 K' ~( ] memcpy(req.default_values, &data, sizeof(req.default_values)); strcpy(req.consumer_label, "led_gpio_a_14");8 K; n# \* @, ^: Y% _ req.lines = 1; ' u9 I- l% H: B f1 E ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req); if (ret == -1) {2 R. O& g! i" @' { ret = -errno; fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n", ret); }# h# \9 R/ }6 E! P+ V9 J: h3 Q if (close(fd) == -1){ perror("Failed to close GPIO character device file"); }0 T# C$ [, }8 G$ m; W status = g_application_run (G_APPLICATION (app), argc, argv);0 m% J9 y" d; l8 G8 }5 f g_object_unref (app); return status; }' a2 F j* w3 z; I9 @ ' M: I$ Q, Y0 x& B2 Y. T; B 4编写Makefile % r' l. P( P/ ?, K) K PROG = gek_led SRCS = 3.c7 Z( D: m e0 X( h& W4 H CLEANFILES = $(PROG)* w$ w( Z* x% y, \3 |0 |1 e; h # Add / change option in CFLAGS and LDFLAGS9 Y- P l: ?# B9 g6 [) } CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0)* u2 b4 b9 ?* t' |* I LDFLAGS += $(shell pkg-config --libs gtk+-3.0)8 S3 z3 q7 d! V b# k& Q 8 [1 {7 o/ B4 I* d all: $(PROG) ! {6 {5 `' w2 v" _" r/ |# E $(PROG): $(SRCS)4 W- _! F5 D8 w( _6 c9 J* m $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) 4 H, h" F( P( b, R+ d; h clean:* @3 P& v" H7 q9 `7 S% V rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)) ! m2 a) M' J5 M) u) p& m1 Q ; P! B6 I+ C0 H* C, \ 5 source 下 sdk目录下的env开头文件,检查$CC --version 是否有输出 * S: M1 P0 n9 X! ~1 D ' `2 m+ x* w2 ` . c1 z4 N* U L " ]. E1 J% {' v( P4 ^! c% u4 a! Q, b 6. 在 source 目录下 make 产生gek_led ,通过scp 或者 filezilla 传到目标板上运行+ Z8 I! H9 x5 i* f4 p/ W 7. 界面点击led button 同时log 和灯会跟着控制: ]+ H' }: Y9 S+ F # s' y2 T6 a" S6 R1 j/ K5 m
7 o% _& i5 O3 m0 a# q3 P+ W) E " w; R0 `; c4 v) D |
扩展STM32微处理器,实现高性价比、低功耗和灵活性能
STM32MP1 自举程序编程:USB DFU/USART 协议全解析
兔哥心中的ST中文论坛
我心中的ST中文论坛
STM32 开发者指南:ST.com 全新 MCU 产品阵容视觉布局深度解析
深度拆解 STM32MP1 Boot 链路
STM32串口自动识别波特率的原理
STM32MP135 MP157 MP257 CoreMark移植&&跑分对比&&多核心负载不均衡问题排查与解决
STM32--STM32 微控制器详解
为什么学了几天STM32一脸茫然?
微信公众号
手机版
界面就是一个按钮