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