问题描述:使用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 |
STM8S003红外发送
[调查]STM8 STM32新社区首页带给你的感受是:
STM8L15x 低功耗运行模式疑问
STM8S103F3P 与STM8S103F3U 区别?
求STM8S105 看门狗程序?
STM32或者STM8有哪些系列带有运算放大器
MSP430可以用STM32( STM8 )替代吗 ?
分享一下STM8L152的段式液晶驱动程序
ST7是什么芯片?跟STM32 STM8有什么区别吗?网上资料也不多
STM8L 进入halt()模式,IWDG,停止后仍然复位
“我接收到的是(字符):101100111010110011101011001110101100111000000011101011001110101100111010110011101011001100000000111010110011101011001110101100111010110011100000001110101100110000000000000000
”
把你预期接收到的数据贴出来看看
评分
查看全部评分
这个是预期应该接收到的数据000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
预期应该受到的是:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000即十进制30,但是有的0(30)变成了1(31)即最后一个位从0变成了1
评分
查看全部评分
ID可以读到的。
百度了,不是每个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);
比如说这种初始化就读不到数据
百度了,不是每个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);
比如说这种初始化就读不到数据
自己结贴吧,SPI从IC是SI4463.spi速率为62.5k时会出现上面问题,调到500k该问题解决。真是个坑。。。。
评分
查看全部评分