STM8S005K6使用spi读取数据某些数据最后一个位会从0变到1

2019-07-14 15:02发布

问题描述:使用spi读取数据时发现某些数据最后一个位会从0变到1,或从1变到0,  从设备是一个无线收发模块
例如:
我发送的是(字符):000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我接收到的是(字符):101100111010110011101011001110101100111000000011101011001110101100111010110011101011001100000000111010110011101011001110101100111010110011100000001110101100110000000000000000
下面是我的初始化函数
/* Enable SPI clock */
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);

  SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_256, SPI_MODE_MASTER
  , SPI_CLOCKPOLARITY_LOW, SPI_CLOCKPHASE_2EDGE,
  SPI_DATADIRECtiON_2LINES_FULLDUPLEX, SPI_NSS_SOFT,0x07);
  SPI_Cmd(ENABLE);

我在STM8S003K MCU上的spi初始化代码是这样的,读取数据正常。但是这个代码copy到STM8S005K上面SPI工作不了。然后我就把初始化代码改成了上面的代码。
void SPI_Config(void)
{

        SPI->CR1 = 0x04;                                //MSB,8M,CPOL=CPHA=0
        
        SPI->CR1 &= 0xc7;                                //单独设定SPI速率,500khz
        SPI->CR1 |= 0x20;
        
        SPI->ICR = 0X00;                                //关闭所有中断。
        SPI->CR2 = 0x00;                                //禁止NSS管理
        SPI->CR1 |= 0x40;                                //开启SPI
}
这个问题已经困扰我几天了,一直找不到问题原因,希望fae能帮我解答一下,不胜感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
manliaijun
1楼-- · 2019-07-14 23:26
hjhevildask 发表于 1970-1-1 08:00

这个是预期应该接收到的数据000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
manliaijun
2楼-- · 2019-07-15 01:56
 精彩回答 2  元偷偷看……
学生物的程序猿
3楼-- · 2019-07-15 07:21
这些芯片都可以读ID的把,你首先确保能读到ID,再去判断无线模块问题,SPI网上大把的,百度一个吧
manliaijun
4楼-- · 2019-07-15 07:34
manliaijun
5楼-- · 2019-07-15 08:23
uuwyfsdfsf 发表于 1970-1-1 08:00

百度了,不是每个SPI初始化都能使用
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);
  
  SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_256, SPI_MODE_MASTER
  , SPI_CLOCKPOLARITY_LOW, SPI_CLOCKPHASE_1EDGE,
  SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,0x07);
  SPI_Cmd(ENABLE);
比如说这种初始化就读不到数据
manliaijun
6楼-- · 2019-07-15 10:47
hgimtk 发表于 1970-1-1 08:00

百度了,不是每个SPI初始化都能使用
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);
  
  SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_256, SPI_MODE_MASTER
  , SPI_CLOCKPOLARITY_LOW, SPI_CLOCKPHASE_1EDGE,
  SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,0x07);
  SPI_Cmd(ENABLE);
比如说这种初始化就读不到数据

一周热门 更多>