[求助] SPI从机通信在使用RTOS情况下出现错误

2019-07-20 05:17发布

STM32F405的SPI3作为从机,使用DMA接收中断,接收中断代码如下:

void SPIx_DMA_RX_IRQHandler(void)
{
    HAL_DMA_IRQHandler(SpiHandle.hdmarx);

    if((aRxBuffer[0])==0x2211&&(aRxBuffer[1]) == 0x4433)
    {
        HAL_SPI_TransmitReceive_DMA(&SpiHandle, (uint8_t*)aTxBuffer, (uint8_t *)aRxBuffer,2);
    }
    else
    {
       ..
    }

}

在不使用MDK的RTOS2前,接收正常,但是一但开启了RTOS2,没有创建任何线程,就会出现错帧,
#ifdef RTE_CMSIS_RTOS2
  /* Initialize CMSIS-RTOS2 */
  osKernelInitialize();

  /* Start thread execution */
  osKernelStart();

#endif


SPI3接收的数据每隔一段时间就出现错帧:


出现错帧的现象 出现错帧的现象

正常数据是 0xaabb 0x8877,5Hz,但是频繁的出现  0xBF46将0xaabb给代替的现象

RTOS必须得使用,   求助各位高手....



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-20 09:20
 精彩回答 2  元偷偷看……
zhtbit
2楼-- · 2019-07-20 12:23
本帖最后由 zhtbit 于 2018-11-7 10:27 编辑

感谢原子哥帮顶;
昨天又调试了1byte字节发送,还是使用RTOS2,创建了一个线程,在SPIx_DMA_RX_IRQHandler中断里面置标志,然后在线程里面调用  HAL_SPI_TransmitReceive_DMA 函数,经过测试发现,从机接收到的数据只有一半进入了SPIx_DMA_RX_IRQHandler中断,
但是奇怪的是,主机收到的错误数据每帧都不一样:
G:360截图20181107102208076.jpg
正确的数据应该是 0x01 0x02 0x03依次递增,现在主机每隔一帧收到一个错误的数据
360截图20181107102208076.jpg
好像操作系统把DMA的接收中断给干扰了...
之前没有搞过RTOS下HAL库的SPI DMA中断接收,感觉很头疼,还请高手不吝赐教...

一周热门 更多>