中级会员
 
- 积分
- 212
- 金钱
- 212
- 注册时间
- 2020-6-22
- 在线时间
- 42 小时
|
1金钱
用STM32F4的SPI+DMA读取运动传感器数据,在定时中断里控制DMA读取传感器的加速度计,温度,陀螺仪数据,寄存器地址需要每次都发送吗,程序会卡在ICM42605_SendByte(reg|0x80);。 while(SPI_I2S_GetFlagStatus(ICM42605_SPI,SPI_I2S_FLAG_RXNE) == RESET),接收缓存区一直不为空,有遇到的大佬吗。帮忙指点下! {
if((SPITimeout--)==0) return SPI_TIMEOUT_UserCallback(1);
}
void SPI_DMA_ENABLE(void)
{
DMA_Cmd(DMA2_Stream0,DISABLE);
DMA_SetCurrDataCounter(DMA2_Stream0,SendBuff_Size);
DMA_Cmd(DMA2_Stream0,ENABLE);
DMA_Cmd(DMA2_Stream5,DISABLE);
DMA_SetCurrDataCounter(DMA2_Stream5,SendBuff_Size);
DMA_Cmd(DMA2_Stream5,ENABLE);
}
void DMA_ICM_ReadData(u8 reg,u16 NumByteToRead)
{
ICM42605_CS_LOW();
SPI1->DR;
SPI1->SR;
ICM42605_SendByte(reg|0x80);
SPI_DMA_ENABLE();
}
void DMA_SPI1_RX_IRQHANDLER(void)
{
ICM42605_CS_HIGH();
while(DMA_GetITStatus(DMA2_Stream0,DMA_IT_TCIF0)==RESET);
DMA_ClearITPendingBit(DMA2_Stream5,DMA_IT_TCIF5);
DMA_Cmd(DMA2_Stream0,DISABLE);
// printf("0");
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)//检查指定的TIM中断发生与否:TIM 中断源
{
//读取数据
DMA_ICM_ReadData(ICM_TEMP_OUTH_REG,SendBuff_Size);
SysTick_Delay_ms(1);
//数据合并
DATA_Combine();
LED_R_REV;
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源
}
}
|
|