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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版