STM32 USB 上位機程式實現

2021-08-05 20:59:56 字數 2724 閱讀 8537

libusb是開源的c庫,使用該庫是的使用者可以在應用程式中直接訪問 usb 裝置,無需為 usb 裝置編寫核心驅動。libusb支援多個平台 (linux, window, ios),所以可以很方便地將應用程式移植到其他平台。

# tar jxvf libusb-1.0.20.tar.bz2

# cd libusb-1.0.20

# ./configure

# make

# sudo make install

ubuntu下可以通過以下命令快速安裝。

sudo apt-get isntall libusb*
安裝後,libusb的標頭檔案被安裝在/usr/local/include/libusb-1.0 ,鏈結庫被安裝在/usr/loacal/lib目錄下。

這個例程演示如何使用 libusb 庫,編寫 usb bulk xfer 上位機demo,可以正常接收和傳送資料。注意,修改程式中的 vid 和 pid 的值和你 device 板子上所定義的一致,傳輸資料塊的大小不要超過 device 定義的最大傳輸長度。

#include 

#include

#include

#include

#include "libusb.h"

#define vid 0x8888

#define pid 0x0088

#define edp2in 0x82

#define edp2out 0x02

int main(void)

i = 0;

while((dev = devs[i++]) != null)

if ((desc.idvendor == vid) && (desc.idproduct == pid))

}handle = libusb_open_device_with_vid_pid(ctx, vid, pid);

if (handle == null) else

libusb_free_device_list(devs, 1);

if (libusb_kernel_driver_active(handle, 0) ==1)

else

}ret = libusb_claim_inte***ce(handle, 0);

if (ret < 0) else

char data[64];

int actual_len = 0;

int didi = 1000;

for (int i = 0; i< 1000; i++) else

usleep(200000);

*/char *str = "am host";

sprintf(data, "am host %d\r\n", i);

ret = libusb_bulk_transfer(handle, edp2out, data, strlen(data), &actual_len, 0);

if (actual_len != 0)

usleep(200000);

}libusb_close(handle);

error:

printf("free device list\r\n");

libusb_free_device_list(devs, 1);

libusb_exit(null);

return

0;}

編譯**可以使用 makefile 檔案,也可以是使用命令列命令編譯,這裡給出兩種編譯方法。

cc = gcc

# your libusb library path, be careful your path.

ldir = /usr/loacal/lib

# link flag

lflag = -lusb-1.0

# libusb hearder file path

includes = /usr/local/include/libusb-1.0

cflags = -i$(includes) -std=c99

src = $(wildcard *.c)

obj = $(patsubst %.c, %.o, $(src))

.phony: all clean

all: main

main: $(obj)

$(cc) $(obj) -o main -l$(ldir) $(lflag)

%.o:%.c

$(cc) $(cflags) -c $< -o $@

clean:

@-rm -f main $(obj)

gcc -i/usr/local/include/libusb-

1.0-std

=c99 main.c -o main -l/usr/local/lib/

-lusb

-1.0

編譯後會在當前目錄下生成乙個名叫「main「的可執行檔案,執行這個檔案。如果開啟usb裝置時出錯提示permission error,那麼使用

# sudo ./main
執行後,host每隔200ms 向 device 傳送乙個資料報。

我的原始碼已上傳到 ,包含stm32f4discovery板子的 usb bulk 傳輸的工程檔案和 使用 libusb 編寫的上位機程式。

STM32 USB 復合裝置實現

可實現用乙個usb介面實現多個usb裝置,如 hid msc hid cdc hid cdc msc等等 使用hal庫,以hid msc為例 具體步驟 目錄四 初始化使用 增加端點,同時修改fifo配置大小,stm32 usb fs fifo總大小為1.25kb,設定是使用的單位是32bit 原始碼...

STM32 USB學習筆記

stm32 usb學習筆記 一 usb fs device firmware library 使用韌體庫開發程式,需要包含幾個檔案 從圖中可見,應用程式介面部分,有 usb pwr,usb conf,usb desc,usb istr,usb prop,usb endp六個檔案,在裝置驅動中有六個檔...

STM32 USB設計 硬體篇

stm32晶元內部整合了usb外設,大大減輕了usb電路的設計負擔,只需設計usb介面電路,就可以實現基於stm32晶元的電路板的usb通訊設計。本文將具體講述基於stm32f103rbt6晶元的usb設計 本文為硬體篇。首先,我們來認識一下stm32f103rbt6晶元。其中usb相關引腳為pa1...