stm32USB LIB

cubeMX配置 时钟 中断 串口
在这里插入图片描述
串口配置:
在这里插入图片描述
串口开启dma传送
在这里插入图片描述
到此串口配置完成,程序中调用只需要使用:

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

就可以向外部发送数据,例如自己实现的debug 函数

#define debug(...){\
	int len=0;\
	len=snprintf((char*)trans_buf,128,__VA_ARGS__);\
	if(len>0)\
	{\
		HAL_UART_Transmit_DMA(&huart1, (uint8_t*)trans_buf, len);\
	}\
}
//当然还可以实现一个自己的printf 函数 例如
#include <stdarg.h>
#include <stdstring.h>
unsigned char buffer[120]={0};//发送数据缓冲区大小
int stmPrintf(char *format, ...)
{
    va_list aptr;
    int ret;
    va_start(aptr, format);//从堆栈缓冲区中将数据取出来
    ret = vsprintf((char *)buffer, format, aptr);//格式化输出字符串
    va_end(aptr);
    if(ret>=0)//输出
        HAL_UART_Transmit_DMA(&huart1, buffer, ret);//通过DMA 将数据传出去
	return ret;
}

调用debug函数:
在这里插入图片描述
USB 配置,由于使用的是c8t6所以只有FS 模式
在这里插入图片描述
Middleware USB 配置,其他保持默认即可
在这里插入图片描述
PB12 LED 上拉 PB13KEY1 上拉开启中断:
在这里插入图片描述
在这里插入图片描述
时钟树配置:
在这里插入图片描述
最后生成工程:在这里插入图片描述
在这里插入图片描述
其他保持默认即可。
附:stlink 解决下载一次后不能使用的问题:
在这里插入图片描述
cubeMX配置完整工程:
在这里插入图片描述
hid mose 鼠标工程只需要更改usbd_hid.c 中HID_MOUSE_ReportDesc 数组,其向主机描述了鼠标有哪些按时间发送的数据报长等,该数据报文可以由:
在这里插入图片描述
HID 软件生成 ,具体可以参考HID 1.1 报文 协议:
在这里插入图片描述
例如以下:

#define HID_MOUSE_REPORT_DESC_SIZE 50
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE]  __ALIGN_END =
{
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,                    // USAGE (Mouse)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x09, 0x01,                    //   USAGE (Pointer)
    
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x05, 0x09,                    //     USAGE_PAGE (Button)
    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
    0x95, 0x03,                    //     REPORT_COUNT (3)
    0x75, 0x01,                    //     REPORT_SIZE (1)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0x95, 0x01,                    //     REPORT_COUNT (1)
    0x75, 0x05,                    //     REPORT_SIZE (5)
    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)
    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //     REPORT_SIZE (8)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x06,                     //     INPUT (Data,Var,Rel)
    0xc0,
    0xc0,	
	
  
};

在这里插入图片描述
发送函数:

USBD_HandleTypeDef hUsbDeviceFS;//usb_device.c
uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, //usb 设备 USBD_HandleTypeDef hUsbDeviceFS;
                            uint8_t *report,//发送数据指针
                            uint16_t len)//发送数据长度

如图我实现的发送函数:
在这里插入图片描述
然后通过按键就可以看到数鼠标状态改变了

参考资料连接:
https://download.csdn.net/download/u012850999/12021160

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值