14027|4

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

采用stm8s的spi发送中断里接收数据,数据接收不对,求原因 [复制链接]

在用stm8s的spi发送中断方式来与flash存储器配合读写数据,在接收数据时,第一个接收到的字节总是莫名为0xff?有时候还会漏收字节?请大家指正是哪里有问题?

spi的发送中断里,完成发送和接收数据的处理:

@far @interrupt void SPI_IRQHandler(void)
{    
    if (SPI->SR & SPI_FLAG_RXNE)

  {
      if(SPI_pointer_Tx > SPI_Order_Len)
     {
       tempbuffer_rx[SPI_pointer_Rx++] = (u8)SPI->DR;
       //while(SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET); 
     }
  }
    if (SPI->SR & SPI_FLAG_TXE)
  {
     if (SPI_pointer_Tx < SPI_TDLen)
     {
            SPI->DR = tempbuffer[SPI_pointer_Tx++];
           if(SPI_pointer_Tx==SPI_TDLen)
           {
              GPIO_WriteHigh(GPIOG, GPIO_PIN_0);//置高CS           }     
        }
    else
    {

           SPI_ITConfig(SPI_IT_TXE, DISABLE);//缓冲区数据发送完成后,关闭中断,再次发送时打开      
     }
  } 
}

 

其中这句if (SPI->SR & SPI_FLAG_RXNE) 有的话,就会出现漏收,如果去掉的话就会漏收的字节出现了,但是会重复收到2次。

 

 

初始化程序如下:

 

void SPI_Initial(void)
{     
  
  /*push pull output for CLK, MOSI, pull up input for MISO */
 GPIO_Init  (GPIOC, GPIO_PIN_6 | GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_SLOW);   
 GPIO_Init  (GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_IT );//FL不进SPI中断
 GPIO_Init  (GPIOG, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_SLOW );
 GPIO_Init  (GPIOG, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_SLOW );
  /* SPI config */
  SPI_DeInit();
 /* Initialize SPI in Slave mode  */
  SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_16, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH,SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,(u8)0);//为1edge,flash不回。

 SPI_Cmd(ENABLE);   
  
}

应用时:

比如我向flash里写如16个数据:

0x05 0x06 0x07 0x08 ........0x14 0x015

但是读回来的数据就是:

0xff 0x06 0x07 0x07b 0x08 x09 .................0x12 0x13 

从读回来的数据里就可以看出,第一个字节多了一个0xff,但是却没有读到0x05,然后0x07读了2遍(if (SPI->SR & SPI_FLAG_RXNE) 有的话)。

 

其他命令时SPI也是表现多一个0xff,没分析出来是怎么回事?

 

看到spi的数据寄存器只有一个SPI_DR,是不是这个原因导致收的不及时?另外在通信时,我一直在用示波器监测数据,从示波器波形看,flash回的数据的波形正确,时序也是对的,看来就是芯片在接收时出现的问题,请大家帮助分析分析,到底是怎么回事?

挺着急的,肯请大家来分析!!指正!!!

 

 

 

此帖出自stm32/stm8论坛

最新回复

楼主,我也遇到与你相同的问题,主机我用的查询方式进行发送与接收,从机用中断进行接收与发送,请问你是怎么解决的?  详情 回复 发表于 2014-7-29 17:00
点赞 关注(1)
 

回复
举报

9

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
难道没有人建议点什么吗?我又试了试,还是不行?各位大侠们请来看看呀!!!!斑竹请帮帮忙吧!!!
此帖出自stm32/stm8论坛
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
过了一个晚上了,还是没有人帮助分析分析!?再次肯请大家来一起分析分析!!!斑竹也过来帮助看看吧!?
此帖出自stm32/stm8论坛
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

4
 
我自己结贴吧,换了一种方式,采用查询式的了,然后经过一系列的调试,终于ok。
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主,我也遇到与你相同的问题,主机我用的查询方式进行发送与接收,从机用中断进行接收与发送,请问你是怎么解决的?
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表