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

关于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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版