1.第一步按照官网要求在开发主机安装下面的库" Y) U% n0 p4 F5 Y 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+ h1 F9 o, d* z$ g$ Y: Q( N 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, z- @% ~0 I$ w |5 k- l- Q PC $> sudo apt-get install default-jre( J- t: ^8 W% `! b 0 n" _$ P! O; P& a, t! B5 w 2.添加 conf文件 ]" C. b4 @0 y2 q/ E. @) Z PC $> echo 'options mmc_block perdev_minors=16' > /tmp/mmc_block.conf/ ^- H5 \. V$ O' M7 b PC $> sudo mv /tmp/mmc_block.conf /etc/modprobe.d/mmc_block.conf4 R8 r; q& g& S) J . H a2 L8 W) `! x 3解压gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf文件。,添加bashrc即可 bin文件下 安装sh文件,输入安装的路径4 w2 T p4 Y6 g3 [3 f! \2 J / B' w: W; n' U$ P 上图表示安装成功 % p9 q$ Y" B' T# O1 C: w r8 J i( _/ y+ e a5 p# @8 s 4.按官网指示,在sdk同级目录下创建source 编写 代码7 G2 w( D: J7 } ' d3 @/ }3 j# g; ` 0 h# x7 B( G& |" x9 c #include <gtk/gtk.h>5 `) m4 h Z; b #include <errno.h>) q" x7 \7 i/ c; f7 [* m7 D. ?* D #include <fcntl.h>3 Y0 B6 M+ K1 ^: ` #include <stdio.h> #include <stdlib.h> #include <string.h>; B* s( o+ V" }0 S& c& p. q #include <sys/ioctl.h>% g) v( W$ P. b& K. }) w& U0 ? #include <unistd.h>+ \+ l2 \# i; y #include<linux/gpio.h> struct gpiohandle_request req;3 c, x7 H2 y: u! Y6 L struct gpiohandle_data data; char chrdev_name[20]; int fd, ret; . _2 {' s+ F L' I 8 {3 s7 T. q, v$ Z) ?& P+ [ static void led_control(GtkWidget *widget, d3 {6 U, L9 B4 M gpointer data1)& M3 c) t0 C) I* F! X7 |" m { data.values[0] = !(data.values[0]); ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);+ g# H% H4 |( |& R0 `2 U if (ret == -1) {2 V2 t. b K7 w. e& l ret = -errno; fprintf(stderr, "Failed to issue %s (%d)\n", "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret); }3 E+ V; E/ Q# o* a+ R/ ] $ V* s( [/ \& m* Q$ j9 r: { ' Y: ]* _5 P i2 I5 T if(data.values[0])" Q7 u, T' i( C# @1 G" i' M {8 q4 m/ n( N9 n: @( s9 O g_print("close led \n"); } else% K8 g$ W# N: U {% x4 b# d, ?* U) N$ H g_print("open led \n"); 7 Q M0 z! n$ O( t, | }2 V% F2 v* \: E7 L8 E 3 l/ H: H$ ]% H: L- e }8 o [* W4 f7 S8 a( K9 J6 W2 z' U ; ]0 i% X/ \4 M0 {8 ~ static void activate (GtkApplication *app, gpointer user_data)9 q5 Y$ R5 Z) P6 s { GtkWidget *window;$ Z- c) L6 }1 V0 ] GtkWidget *button_led;& D4 o" y/ G u$ p GtkWidget *led_label; window = gtk_application_window_new (app);% K. `- W/ p9 k/ o4 ?5 r gtk_window_set_title (GTK_WINDOW (window), "led test"); gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);- U' h7 c& D3 j% i% v. q * Z5 P. T& v/ ~. } ) {3 F. D: e( \5 Y2 [( T7 p+ n 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);" j# [: l( x3 E) G9 U( d4 A0 u gtk_container_add(GTK_CONTAINER (button_led), led_label); 9 _) h! g& Q$ ~: L" D1 ^ ; D/ N, Z0 g& f1 e ] gtk_widget_show_all (window); % {/ g' _; F& [& V } int main (int argc,char **argv)4 _( P$ Z: R0 ^6 Y {4 @) \ L7 I* g/ s$ H GtkApplication *app;+ G* K6 z/ g9 l1 f int status; 6 R o: w5 I( b3 x app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);+ C! B1 s! a# S' D T strcpy(chrdev_name, "/dev/gpiochip0");: I9 u3 l8 I, t1 \ /* Open device: gpiochip0 for GPIO bank A */" K0 k! G6 i0 [" t8 c5 Z fd = open(chrdev_name, 0);4 ?4 I X6 L9 [2 D6 s, k5 k if (fd == -1) {2 Z, v, z }0 n7 r W% P; [; h ret = -errno;: T* B0 k8 o: y2 b4 \; g r fprintf(stderr, "Failed to open %s\n", chrdev_name);$ l- n* G1 H* F) }" T4 F/ E: d ( r! P& Y6 Q0 Q! s) m return ret; } 8 f8 m' B9 [7 y6 F % `) q: C9 A# F* M4 w# V; k- [ /* 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");2 T8 G m6 _) ` H# B. C. c req.lines = 1; 2 y, W% K( K0 j$ L ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req); if (ret == -1) { ret = -errno;3 K: t4 N* r, Z2 M: i2 A fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n",; u- y8 ^6 e8 h. v& O ret); }0 S/ f7 Z* B0 n( D' P( J if (close(fd) == -1){: B3 F3 L1 N! S+ w perror("Failed to close GPIO character device file");2 R" W6 i9 r, `0 p3 e } status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); 0 n0 \ Z6 O0 e) n! k return status; } 0 Y' R; e7 a, v- P 4编写Makefile PROG = gek_led8 t7 e! g7 A( u9 m0 J! l9 j% i SRCS = 3.c 5 |5 M$ U6 w% J+ b* e2 m/ B CLEANFILES = $(PROG)) y6 L! S) _' K8 z' P4 K # Add / change option in CFLAGS and LDFLAGS! G( y* M& y4 h2 P* v' \9 K CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0); |) v, C1 A7 r; V LDFLAGS += $(shell pkg-config --libs gtk+-3.0)7 A% j% n* Z7 h% b all: $(PROG) 8 }7 b, g0 }7 u" |3 r# j/ \ $(PROG): $(SRCS) $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)) O3 s; W1 x* \9 m' `1 u2 p( _0 A clean: rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))3 b& c- O9 D! p8 i8 A& R( d( s1 V4 a 5 source 下 sdk目录下的env开头文件,检查$CC --version 是否有输出 5 e1 e, _3 V" V 2 C& C! S5 w F# J0 I 6. 在 source 目录下 make 产生gek_led ,通过scp 或者 filezilla 传到目标板上运行 ; X3 I- n; g' u5 @ 7. 界面点击led button 同时log 和灯会跟着控制, s9 J9 b8 N* [& y9 `2 J% _ 2 D& }8 H4 c! U/ ]' I 5 \) w- K3 K: ^6 v5 g |
最新消息:意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS!意法半导体兑现了之前的承诺!
STM32MP135F-DK开发板评测-开箱亮屏
意法半导体扩展STM32Cube开发环境,简化单核STM32MP1裸机软件开发
1月18日有奖直播 | 如何在STM32MP13x上实现FOTA升级?
【STM32MP13x直播回顾】 直播答疑汇总
STM32MP135 开发平台介绍
使用STM32MP13: 如MCU般在Cortex-A核上裸 跑应用程序
米尔核心板加速基于STM32MP1的产品开发
STM32MP1充电桩全数字交互实现
STM32MP13 产品线 应用于工业和安全的高性价比MPU
界面就是一个按钮