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

关于STM32F103的SPI,读操作的时候没有时钟是怎么回事?

[复制链接]
i_am_me 提问时间:2015-7-17 11:55 /
是不是我配置的有问题?我用的SPI1,配置代码如下
        SPI_InitTypeDef SPI_InitStruct;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_SPI1, ENABLE );        
        RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI2, ENABLE );        
        
        /*失能*/
        SPI_I2S_DeInit(SPI1);
        SPI_I2S_DeInit(SPI2);
        
        SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;                                                                                                        //数据捕获于第二个时钟沿
        SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;                                                                                                        //串行时钟的稳态:时钟悬空高
        SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;        //定义波特率预分频的值:波特率预分频值为16   (SPI 4.5M@sys 72M)
        SPI_InitStruct.SPI_CRCPolynomial = 7;                             //CRC值计算的多项式
        SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;   //SPI设置为双线双向全双工
        SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;                    //SPI发送接收8位帧结构
        SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;                          //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPI_InitStruct.SPI_Mode = SPI_Mode_Master;                        //主模式
        SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;                                        //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
        SPI_Init(SPI1,&SPI_InitStruct);
        SPI_Cmd(SPI1, ENABLE);


示波器观察的信号波形

示波器观察的信号波形

代码

代码
收藏 评论9 发布时间:2015-7-17 11:55

举报

9个回答
moyanming2013 回答时间:2015-7-17 12:34:02
帮顶。。。
i_am_me 回答时间:2015-7-17 12:38:01
跪求大神
creep 回答时间:2015-7-17 12:51:57
读操作要有MCU来写数据提供时钟啊。一般写0xff或者0x00到从设备来提供读取的时钟。
i_am_me 回答时间:2015-7-17 12:57:15
creep 发表于 2015-7-17 12:51
读操作要有MCU来写数据提供时钟啊。一般写0xff或者0x00到从设备来提供读取的时钟。 ...

恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是0xff,
creep 回答时间:2015-7-17 13:35:03
i_am_me 发表于 2015-7-17 12:57
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是 ...

那就好,通信没有问题的话就再找找其他的原因。
i_am_me 回答时间:2015-7-17 13:50:17
creep 发表于 2015-7-17 13:35
那就好,通信没有问题的话就再找找其他的原因。

嗯嗯,好的,多谢帮忙
埃斯提爱慕 回答时间:2015-7-17 22:53:47
提示: 作者被禁止或删除 内容自动屏蔽
yanhaijian 回答时间:2015-7-18 09:03:53
i_am_me 发表于 2015-7-17 12:57
恩,多谢了,现在可以了,在示波器上显示的波形跟手册上写的返回值对应了,不过通过软件读出来的值一直是 ...

SPI无非就那两个参数,不行就一个个试,也只要试4次。
i_am_me 回答时间:2015-7-18 10:50:05
yanhaijian 发表于 2015-7-18 09:03
SPI无非就那两个参数,不行就一个个试,也只要试4次。

我用时钟第一个上升沿读取的话,读到ID是正确的,但其他寄存器读的是错的,用时钟第二个上升沿读的ID是错的,其他寄存器是正确的,,,很奇怪。之前没用过L3G4200,,不知道是否是这样

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版