找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1113|回复: 1
打印 上一主题 下一主题
收起左侧

用STM32F4的SPI+DMA读取传感器数据,寄存器地址需要每次都发送吗

[复制链接]
跳转到指定楼层
楼主
ID:895436 发表于 2021-7-23 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

用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 中断源
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2021-7-23 17:12 | 只看该作者
需要看接收方的说明书,有无自动地址+1的功能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表