完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题描述:使用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能帮我解答一下,不胜感激。 |
|
相关推荐
8个回答
|
|
以下是你实际接收的数据?
“我接收到的是(字符):101100111010110011101011001110101100111000000011101011001110101100111010110011101011001100000000111010110011101011001110101100111010110011100000001110101100110000000000000000 ” 把你预期接收到的数据贴出来看看 |
|
|
|
这个是预期应该接收到的数据000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
|
|
|
预期应该受到的是:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000即十进制30,但是有的0(30)变成了1(31)即最后一个位从0变成了1 |
|
|
|
这些芯片都可以读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); 比如说这种初始化就读不到数据 |
|
|
|
百度了,不是每个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该问题解决。真是个坑。。。。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 04:19 , Processed in 0.851783 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号