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

STM8S005K6,SPI问题

[复制链接]
11wqwewe 提问时间:2018-5-16 11:22 /
问题描述:使用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能帮我解答一下,不胜感激。


评分

参与人数 1 ST金币 -1 收起 理由
ouyang11111111 -1

查看全部评分

收藏 评论8 发布时间:2018-5-16 11:22

举报

8个回答
xiajintaord 回答时间:2018-5-16 11:53:51
以下是你实际接收的数据?

“我接收到的是(字符):101100111010110011101011001110101100111000000011101011001110101100111010110011101011001100000000111010110011101011001110101100111010110011100000001110101100110000000000000000


把你预期接收到的数据贴出来看看

评分

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

查看全部评分

11wqwewe 回答时间:2018-5-16 13:49:06
xiajintaord 发表于 2018-5-16 11:53
以下是你实际接收的数据?

“我接收到的是(字符):10110011101011001110101100111010110011100000001110 ...

这个是预期应该接收到的数据000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11wqwewe 回答时间:2018-5-16 13:53:40
xiajintaord 发表于 2018-5-16 11:53
以下是你实际接收的数据?

“我接收到的是(字符):10110011101011001110101100111010110011100000001110 ...

预期应该受到的是:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000即十进制30,但是有的0(30)变成了1(31)即最后一个位从0变成了1
yqsqqq 回答时间:2018-5-16 13:56:09
这些芯片都可以读ID的把,你首先确保能读到ID,再去判断无线模块问题,SPI网上大把的,百度一个吧

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

11wqwewe 回答时间:2018-5-16 13:57:15
yqsqqq 发表于 2018-5-16 13:56
这些芯片都可以读ID的把,你首先确保能读到ID,再去判断无线模块问题,SPI网上大把的,百度一个吧 ...

ID可以读到的。
11wqwewe 回答时间:2018-5-16 14:00:59

百度了,不是每个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);
比如说这种初始化就读不到数据
11wqwewe 回答时间:2018-5-16 14:01:21
yqsqqq 发表于 2018-5-16 13:56
这些芯片都可以读ID的把,你首先确保能读到ID,再去判断无线模块问题,SPI网上大把的,百度一个吧 ...

百度了,不是每个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);
比如说这种初始化就读不到数据
11wqwewe 回答时间:2018-5-17 16:23:49
11wqwewe 发表于 2018-5-16 14:01
百度了,不是每个SPI初始化都能使用
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);
  

自己结贴吧,SPI从IC是SI4463.spi速率为62.5k时会出现上面问题,调到500k该问题解决。真是个坑。。。。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版