你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32SPI中断接受问题

[复制链接]
单眼皮小眼睛 提问时间:2019-6-13 17:31 /
主机SPI发送一组数 比如A[]={"123456"};
从机SPI接受用中断接受,每次数据都能完全发送出去,可是中断接受只能接收到12,其他的数据接收不到,初学者求解答
SPI主机发送函数如下
/******
void SPI_Send_char(SPI_TypeDef* SPIx,uint16_t ch)
发送一个字符函数
******/
void SPI_Send_char(SPI_TypeDef* SPIx,uint32_t ch)
{
   if(SPIx==SPI1)
         {
           SPI_I2S_SendData(SPI1,ch);
                 while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)!=SET);
         }
         if(SPIx==SPI2)
         {
           SPI_I2S_SendData(SPI2,ch);
                 
         }
         if(SPIx==SPI3)
         {
           SPI_I2S_SendData(SPI3,ch);
                 while(SPI_I2S_GetFlagStatus(SPI3,SPI_I2S_FLAG_TXE)!=SET);
         }
        
}

/****
SPI_SendString(SPI_TypeDef* SPIx, uint32_t *String)
发送字符穿函数
******/
void SPI_SendString(SPI_TypeDef* SPIx, int8_t *String)
{
  while(*String)
        {
          SPI_Send_char(SPIx,*String);
                String++;
        }               
}
/*****
SPI_SendString_Lenth(SPI_TypeDef* SPIx, uint32_t *String,uint16_t len)
发送一定长度的字符串
*******/
void SPI_SendString_Lenth(SPI_TypeDef* SPIx, int8_t *String,uint16_t len)
{
  uint16_t i=0;
        for(i=0;i<len;i++)
        {
          SPI1_End_Reindex%=SPI1_Buf_Lenth;
                SPI_Send_char(SPIx,*(String+SPI1_End_Reindex));
        }
}


从机SPI中断接受函数
void SPI1_IRQHandler()
{
   if(SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE) !=RESET)
         {
           SPI1_Start_Reindex%=SPI1_Buf_Lenth;
                 SPI1_Buf[SPI1_Start_Reindex]=SPI_I2S_ReceiveData(SPI1);
                 SPI1_Start_Reindex++;
                 
         }
         //if(SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)!=RESET)
         //{
         //  SPI_SendString_Lenth(SPI1,SPI1_Buf,SPI1_Recieve_Lenth);
        //         SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_TXE,DISABLE);                  //SPI发送中断不使能
         //}
}



收藏 评论2 发布时间:2019-6-13 17:31

举报

2个回答
Dylan疾风闪电 回答时间:2019-6-17 09:52:54
本帖最后由 Dylan疾风闪电 于 2019-6-17 09:56 编辑

上面的代码,信息量太少。
----------------------------------------------------------------
建议:
首先,检查SPI的初始化代码,请确认SPI的初始化是否有问题!
其次,CS引脚配置的是硬件控制还是软件控制,用示波器观察各功能引脚的波形,定位问题点阶段/位置。最后,再进行逐步分析、排查。
例如,发送端发送的字节数是否正确?是没发出去,还是接收端没动作?然后再一个一个的解决问题。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

单眼皮小眼睛 回答时间:2020-4-8 15:12:08
Dylan疾风闪电 发表于 2019-6-17 09:52
上面的代码,信息量太少。
----------------------------------------------------------------
建议:

谢谢 这个问题解决了   出现了另外一个问题
从机收到数据后  给从机返回固定的数据主机接受会错位,比如从机收到数据给主机发送0x5555,则主机收到的有时候正确 有时候错误位0xAAAA

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版