打印
[MM32软件]

MM F103 USB测试驱动

[复制链接]
992|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32jy|  楼主 | 2020-3-30 20:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USB IO初始化
void usb_gpio(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_11 | GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                                         //模拟输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;                                           //用于触发
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_ResetBits(GPIOA, GPIO_Pin_5);
}



使用特权

评论回复
沙发
stm32jy|  楼主 | 2020-3-30 20:42 | 只看该作者
USB外设初始化
void usb_test(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);                                 //USB CLK EN

    uart_printf("This is a USB Demo \r\n");

    usb_gpio();
#ifdef USB_INTR_MODE
    NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn;                //配置USB中断向量
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
#endif
    usb_init();
    uart_printf("This is %x \r\n", *(u32*)0x40010804);
}


使用特权

评论回复
板凳
stm32jy|  楼主 | 2020-3-30 20:43 | 只看该作者
鼠标报告数据
void mouse_ctrl(char clickEnt, char x, char y, char rol)
{
    write_mreg32(USB_EPn_FIFO(EPIN), clickEnt);                                        //单击事件
    write_mreg32(USB_EPn_FIFO(EPIN), x);                                                        //x坐标相对移动位置 (-128~127)
    write_mreg32(USB_EPn_FIFO(EPIN), y);                                                        //y坐标相对移动位置 (-128~127)
    write_mreg32(USB_EPn_FIFO(EPIN), rol);                                                //滚轮相对移动位置 (-128~127)
    write_mreg32(USB_EPn_CTRL(EPIN), 0x84);                                                //send 4 bytes packet
}


使用特权

评论回复
地板
stm32jy|  楼主 | 2020-3-30 20:43 | 只看该作者
键盘报告数据
#define KEY_NONE         0x00
#define KEY_UP            0x1A
#define KEY_DOWN          0x16
#define KEY_LEFT          0x04
#define KEY_RIGHT         0x07
#define KEY_A                0x18
#define KEY_B                0x0C
#define KEY_C                0x0D
#define KEY_D                0x0E

#define KEY_L_CTRL        0x01
#define KEY_L_SHIFT        0x02
#define KEY_L_ALT        0x04
#define KEY_L_WIN        0x08
#define KEY_R_CTRL        0x10
#define KEY_R_SHIFT        0x20
#define KEY_R_ALT        0x40
#define KEY_R_WIN        0x80
void keyBoard_value(char spcKey, char nomKey0, char nomKey1, char nomKey2,
                    char nomKey3, char nomKey4, char nomKey5)
{
    write_mreg32(USB_EPn_FIFO(EPIN), spcKey);                                        //功能键
    write_mreg32(USB_EPn_FIFO(EPIN), 0x00);                                                //保留
    write_mreg32(USB_EPn_FIFO(EPIN), nomKey0);                                        //常用按键键值,按键1为0x59 数字依次类推
    write_mreg32(USB_EPn_FIFO(EPIN), nomKey1);                                        //常用按键键值
    write_mreg32(USB_EPn_FIFO(EPIN), nomKey2);                                        //常用按键键值
    write_mreg32(USB_EPn_FIFO(EPIN), nomKey3);
    write_mreg32(USB_EPn_FIFO(EPIN), nomKey4);
    write_mreg32(USB_EPn_FIFO(EPIN), nomKey5);
    write_mreg32(USB_EPn_CTRL(EPIN), 0x88);                                                //send 4 bytes packet
}


使用特权

评论回复
5
stm32jy|  楼主 | 2020-3-30 20:45 | 只看该作者
键盘报告数据防重复发送
void keyBoard_ctrl(char spcKey, char nomKey0, char nomKey1, char nomKey2,
                   char nomKey3, char nomKey4, char nomKey5)
{
    keyBoard_value(spcKey, nomKey0, nomKey1, nomKey2, nomKey3, nomKey4, nomKey5);        //键值写入缓冲寄存器
    while(read_mreg32(USB_EPn_CTRL(EPIN)) & 0x80);                                                        //等待发送完成
    keyBoard_value(KEY_NONE, KEY_NONE, KEY_NONE, KEY_NONE, KEY_NONE, KEY_NONE, KEY_NONE); //清键值
    while(read_mreg32(USB_EPn_CTRL(EPIN)) & 0x80);
}

使用特权

评论回复
6
pattywu| | 2020-4-5 19:19 | 只看该作者
楼主,有MM32F103的USB底层驱动吗?
给我一份。
103319389@qq.com.
谢啦

使用特权

评论回复
7
598330983| | 2020-4-5 20:42 | 只看该作者
楼主在哪儿下载的资料。

使用特权

评论回复
8
lienjin| | 2021-4-20 17:51 | 只看该作者
楼主  请问你有遇到挂起和唤醒方面的问题吗?我这边碰到接台式主机会出现自动唤醒的问题,请问可以分享一下您的挂起和唤醒的程序吗?谢谢!!

使用特权

评论回复
9
yangjiaxu| | 2021-5-23 17:52 | 只看该作者
效果咋样?

使用特权

评论回复
10
Carmen7| | 2021-5-27 22:13 | 只看该作者
讲的很详细,挺好的,之前使用了某顺的MCU,然后替代某T的MCU ,竟然不完全兼容,插上设备就提示未识别,很尴尬

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1118

帖子

4

粉丝