打印
[STM32F4]

F4不能在TIMER中断时做USB传送吗?

[复制链接]
777|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pkuzhx|  楼主 | 2015-10-30 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在用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);
}




沙发
pkuzhx|  楼主 | 2015-10-30 16:31 | 只看该作者
每次传送4字节,我的传送函数会给数据加头和尾,总共就是7字节:10 xx xx xx xx 10 0d。中间4个是数据。
现在每次都接收到00 00 00 00 01 00 00

使用特权

评论回复
板凳
pkuzhx|  楼主 | 2015-10-30 16:36 | 只看该作者
现在在main传送是正确的。所以可以把传感器数据设置成全局变量,在中断中读取,然后在main的while中去传送,这样是可以工作的,但是总感觉这么做很别扭。

使用特权

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

本版积分规则

个人签名:原来可以设置签名档啊!

45

主题

730

帖子

6

粉丝