[求助]stm32串行CH375操作键盘鼠标

从51单片机改变成串行CH375操作键盘鼠标,但是串口打印出来信息不对,估计是程序改的不对; get device descr failed config get config descr failed config 2 set idle report get report descr failed set report set report failed 程序是这样的,第一个failed是出现在这里,我想麻烦问下可能的原因是,因为也不太了解,一人没啥能力,麻烦了,谢谢 unsigned char get_descr_ex() { unsigned char descr_len; unsigned char *p=data_buf; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf); issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* SETUP阶段操作成功 */ { endp6_mode=0xc0; toggle_recv(); } else return(0); issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* DATA阶段操作成功 */ { if(flag_config_2)descr_len=data_buf[2]-rd_usb_data(data_buf); else descr_len=data_buf[0]-rd_usb_data(data_buf); while(descr_len>0) { toggle_recv(); p+=0x08; issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS) /* DATA阶段操作成功 */ descr_len-=rd_usb_data(p); else return(0); } } else return(0); endp7_mode=0xc0; toggle_send(); wr_usb_data(0,Request.Req_buf); issue_token(( 0 << 4 ) | DEF_USB_PID_OUT);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* 状态阶段操作成功 */ return(1); else return(0); }

因为你修改了接口,所以你最好做一下测试命令,确保通讯正常。另外,有没有检测到设备的连接?确保中断配置正确。


1测试命令通过了 2.检测到了设备的连接 3.确保中断配置正确?这个我认为不对, void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7); EXTI_ClearITPendingBit(EXTI_Line7);

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_Line = EXTI_Line7; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } 下降沿有效,是否可以?


中断配置你改成检测低电平有效,试一下?


但是stm32中断貌似没有低电平有效,而且我看网上说低电平有效没有必要


那你改成检测中断引脚电平的方式来判断中断的产生。


恩恩,好的,我试试,谢谢


刚试了不行,不知道为什么,总感觉从51复制到stm32上的函数有些问题,要改又不知道是哪的问题,晚上再试,下午参加招聘会去啦,ps我投了沁恒,能问问为什么没消息吗,


还有一个可能,STM32是32位单片机,51是8位的在变量定义那块有区别。你的命令没有正确发过去,所以导致收的不对。


我把unsigned char 全改成uint8_t,unsigned int全改成uint16_t,还是不行,我想问下,测试命令通过了是否代表我的写命令,写数据,读数据程序是对的?


在get_descr_ex()里setup阶段status==USB_INT_SUCCESS操作成功,但是DATA阶段status不等于USB_INT_SUCCESS操作不成功,会是什么原因呢


在这中间有产生中断吗?


测试命令你发0x55返回0xAA,发0xAA返回0x55,这样如果测试 通过说明三个读写子函数没有问题了。在setup阶段返回0x14说明命令下发成功了,DATA阶段不成功说明没有收到设备的数据。中间会产生中断。


unsigned char idata data_buf[96];//描述符缓冲区可以适当减小,这个数组怎么看不到怎样赋值的奇怪


“测试命令你发0x55返回0xAA,发0xAA返回0x55,这样如果测试 通过说明三个读写子函数没有问题了。在setup阶段返回0x14说明命令下发成功了,DATA阶段不成功说明没有收到设备的数据。中间会产生中断。”三个读写子函数没有问题。没有收到设备的数据??什么意思呢,如果读写没错误,应该能读到函数的数据啊


在获取描述符里不是有rd_usb_data(data_buf);来获取数据吗?数据传输的时候需要切换同步标志,如果没有切换传输也会失败的。


只有登录才能回复,可以选择微信账号登录