STM32之SPI的思考

来源:本站
导读:目前正在解读《STM32之SPI的思考》的相关信息,《STM32之SPI的思考》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32之SPI的思考》的详细说明。
简介:STM32之SPI的思考

选择了与硬件打交道,就得戒骄戒躁,踏踏实实,一步一步的走下去。可能因为一个非常小的问题,就导致你失败。失败不可怕,可怕的是不能静下心来去思考。我在公司第一次调试硬件,spi的通信,是stm32的硬件既有的通信接口。之前用51的io口模拟过i2c的,感觉spi相对来说更简单些,结果调试spi的读写花费了我3天的时间。stm32f0与网上关于stm32f1大量的例程还不一样,刚刚上市半年多,应该是,并且有几项设置是stm32f1没有的,这也正是关键的地方。你直接把他们的程序拿过来用,可能就卡死了,为什么?因为f0多了个fifo设置,fifo不设置,默认应该是half of 32 bits,当你只接收到8个bit时,rxne不会置位,程序会一直在这里等待。或许你会说,加一个容错处理不就完了。但是这样,可能读完后,数据是缺少第一个byte和最后一个byte的,还可能出现只读到偶数位的数据(与数据处理有关),因为在读第二个的时候读到的其实是fifo中的低8bit,高8bit如果没有处理可能就丢了,比如你定义的接收数据为unsigned char,高8bit就被滤掉了。如果接收的数据byte数为奇数,可能最后一byte可能就读不出来了,直到下次再有数据才能把它挤到高8bit上。这样读出的数据怎么也不会正确了。

为避免这种情况,设置下fifo就可以了,满了8bit就置位rxne,就可以读走接收到的数据。fifo设置为与通信数据bit数相同就行了。

spi的收发可以设置为全双工模式,但是时钟却都是由主机控制的,在读从机数据时,需要发送从机内部数据的地址,接着需要提供要求的n个时钟信号,才能把从机的数据读出来。这时需要发送无效的数据位来产生时钟,无效数据一般可以为0xff或者0x00,这个需要根据不同主机在使能后mosi线的电平以及从机设备要求来确定。

另外硬件spi需要设置相关的时钟极性,以及第一个时钟沿还是第二个时钟沿读取数据。stm32f0需要设置时钟线在闲置时的电平上拉还是下拉。

spi通信配置

1、GPIO时钟使能,SPI时钟使能。

2、配置GPIO片选,推挽输出,上拉;SCLK、MOSI、MISO所用到的引脚为复用功能;SCLK下拉,MOSI推挽复用,MISO无推挽。

3、SPI初始化,配置工作模式为全双工,主机模式,SCLK闲时电平为低,第二个时钟沿(下降沿)采样数据,SCLK时钟128预分频,CRC校验置默认值0x07,内部从机选择软件管理模式。设置接收FIFO为四分之一,内部从机选择设置为主机(置1),使能SPI。

4、从机设备一般上电是默认写使能的,因此若需要读取数据先关闭写使能。

5,stm32f0在使能spi后,miso和mosi都被拉低,因此在读取从机数据时,需要先发送的无效数据为0x00

提醒:《STM32之SPI的思考》最后刷新时间 2024-03-14 01:14:04,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32之SPI的思考》该内容的真实性请自行鉴别。