[MM32软件] MM F103 USB测试驱动

[复制链接]
 楼主| stm32jy 发表于 2020-3-30 20:42 | 显示全部楼层 |阅读模式
USB IO初始化
  1. void usb_gpio(void)
  2. {
  3.     GPIO_InitTypeDef  GPIO_InitStructure;
  4.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  5.     GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_11 | GPIO_Pin_12;
  6.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                                         //模拟输入
  8.     GPIO_Init(GPIOA, &GPIO_InitStructure);


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

  12.     GPIO_ResetBits(GPIOA, GPIO_Pin_5);
  13. }



 楼主| stm32jy 发表于 2020-3-30 20:42 | 显示全部楼层
USB外设初始化
  1. void usb_test(void)
  2. {
  3.     NVIC_InitTypeDef NVIC_InitStructure;
  4.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);                                 //USB CLK EN

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

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


 楼主| stm32jy 发表于 2020-3-30 20:43 | 显示全部楼层
鼠标报告数据
  1. void mouse_ctrl(char clickEnt, char x, char y, char rol)
  2. {
  3.     write_mreg32(USB_EPn_FIFO(EPIN), clickEnt);                                        //单击事件
  4.     write_mreg32(USB_EPn_FIFO(EPIN), x);                                                        //x坐标相对移动位置 (-128~127)
  5.     write_mreg32(USB_EPn_FIFO(EPIN), y);                                                        //y坐标相对移动位置 (-128~127)
  6.     write_mreg32(USB_EPn_FIFO(EPIN), rol);                                                //滚轮相对移动位置 (-128~127)
  7.     write_mreg32(USB_EPn_CTRL(EPIN), 0x84);                                                //send 4 bytes packet
  8. }


 楼主| stm32jy 发表于 2020-3-30 20:43 | 显示全部楼层
键盘报告数据
  1. #define KEY_NONE         0x00
  2. #define KEY_UP            0x1A
  3. #define KEY_DOWN          0x16
  4. #define KEY_LEFT          0x04
  5. #define KEY_RIGHT         0x07
  6. #define KEY_A                0x18
  7. #define KEY_B                0x0C
  8. #define KEY_C                0x0D
  9. #define KEY_D                0x0E

  10. #define KEY_L_CTRL        0x01
  11. #define KEY_L_SHIFT        0x02
  12. #define KEY_L_ALT        0x04
  13. #define KEY_L_WIN        0x08
  14. #define KEY_R_CTRL        0x10
  15. #define KEY_R_SHIFT        0x20
  16. #define KEY_R_ALT        0x40
  17. #define KEY_R_WIN        0x80
  18. void keyBoard_value(char spcKey, char nomKey0, char nomKey1, char nomKey2,
  19.                     char nomKey3, char nomKey4, char nomKey5)
  20. {
  21.     write_mreg32(USB_EPn_FIFO(EPIN), spcKey);                                        //功能键
  22.     write_mreg32(USB_EPn_FIFO(EPIN), 0x00);                                                //保留
  23.     write_mreg32(USB_EPn_FIFO(EPIN), nomKey0);                                        //常用按键键值,按键1为0x59 数字依次类推
  24.     write_mreg32(USB_EPn_FIFO(EPIN), nomKey1);                                        //常用按键键值
  25.     write_mreg32(USB_EPn_FIFO(EPIN), nomKey2);                                        //常用按键键值
  26.     write_mreg32(USB_EPn_FIFO(EPIN), nomKey3);
  27.     write_mreg32(USB_EPn_FIFO(EPIN), nomKey4);
  28.     write_mreg32(USB_EPn_FIFO(EPIN), nomKey5);
  29.     write_mreg32(USB_EPn_CTRL(EPIN), 0x88);                                                //send 4 bytes packet
  30. }


 楼主| 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);
}
pattywu 发表于 2020-4-5 19:19 | 显示全部楼层
楼主,有MM32F103的USB底层驱动吗?
给我一份。
103319389@qq.com.
谢啦
598330983 发表于 2020-4-5 20:42 | 显示全部楼层
楼主在哪儿下载的资料。
lienjin 发表于 2021-4-20 17:51 | 显示全部楼层
楼主  请问你有遇到挂起和唤醒方面的问题吗?我这边碰到接台式主机会出现自动唤醒的问题,请问可以分享一下您的挂起和唤醒的程序吗?谢谢!!
yangjiaxu 发表于 2021-5-23 17:52 | 显示全部楼层
效果咋样?
Carmen7 发表于 2021-5-27 22:13 | 显示全部楼层
讲的很详细,挺好的,之前使用了某顺的MCU,然后替代某T的MCU ,竟然不完全兼容,插上设备就提示未识别,很尴尬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1118

帖子

4

粉丝
快速回复 返回顶部 返回列表