我在用STM32F401CB,使用TIMER2中断,中断时读取传感器数据,并通过USB传送回PC,以方便调试。但是我发现在中断内USB传送总是出错,传送的数据字节数是正确的,但是每一字节的内容都不对。在main中中测试过USB没有问题的。
进入USBD_CDC_TransmitPacket的数据是没有问题的,最后也return USB_OK了,单步调试也没找到问题,不懂USB协议。。。代码是cubeMX生成的,请大家帮我分析一下是啥问题。
代码如下:
- void TIM2_IRQHandler(void)
- {
- /* USER CODE BEGIN TIM2_IRQn 0 */
- /* USER CODE END TIM2_IRQn 0 */
- HAL_TIM_IRQHandler(&htim2);
-
- /* USER CODE BEGIN TIM2_IRQn 1 */
-
- //从传感器读取PS1_H、PS1_L、PS2_H、PS2_L
-
- /* send data to USB */
- /* defined for USB PS data transfer */
- u8 debugM[4];
- debugM[0] = PS1_H;
- debugM[1] = PS1_L;
- debugM[2] = PS2_H;
- debugM[3] = PS2_L;
- OutputDebugMessage((uint8_t *)debugM, 4);
- /* USER CODE END TIM2_IRQn 1 */
- }
- /* send pbuff to USB, begin with 0x10, end with 0x100d */
- uint8_t OutputDebugMessage(uint8_t *pbuff, uint16_t length)
- {
- if(length > 7)
- return USBD_FAIL;
- uint8_t pbuff_head_tail[10];
- pbuff_head_tail[0] = (uint8_t)0x10;
- int i = 0;
- for(i = 0; i < length; i++)
- {
- pbuff_head_tail[i + 1] = (uint8_t)pbuff[i];
- }
- pbuff_head_tail[length + 1] = (uint8_t)0x10;
- pbuff_head_tail[length + 2] = (uint8_t)0x0d;
- USBD_CDC_SetTxBuffer(&hUsbDeviceFS, (uint8_t*)pbuff_head_tail, length + 3);
- return USBD_CDC_TransmitPacket(&hUsbDeviceFS);
- }
|