历史上的今天
今天是:2025年03月30日(星期日)
2021年03月30日 | STM32之SPI的思考
2021-03-30 来源:eefocus
选择了与硬件打交道,就得戒骄戒躁,踏踏实实,一步一步的走下去。可能因为一个非常小的问题,就导致你失败。失败不可怕,可怕的是不能静下心来去思考。我在公司第一次调试硬件,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如何设置定时器
史海拾趣
|
我是做网站设计的,对程序有一定的了解,自学软件测试快一个月了,常常是下班后自己在网上找资料看看,但是现在感觉头很大,知识很混乱,不知道怎么系统的去学习,哪位高手可以帮我出点主意吗,有什么好的参考资料吗?谢谢啦… 查看全部问答> |
|
//CopyRight:www.mcuisp.com//版权: 单片机在线编程网详细代码请到www.mcuisp.com下载… 查看全部问答> |
|
针对空调压缩机有线数据采集系统存在的不足, 结合空调压缩机的结构特征,从传感器节点的低成本低功耗角度发, 利用单片机 MS P 4 3 0和n R F 9 0 5芯片在电池供电的低功耗应用中具有的优势, 提出了一种无线数据采集系统的方案。 该方 案利用n R F ...… 查看全部问答> |
|
本人现在成都,因为参加各种竞赛没有去去学校安排的实习地方,现在事情已经完了,接下来就是找工作的事,可是一看网上的要求都是工作经验和啥子精通的,说实话我们大学本科毕业的最多就是了解或者熟悉,精通这个词对于我们来说太恐怖了,在学 ...… 查看全部问答> |
|
我是最近才接触zigbee的,要完成一个zigbee无线发送模块的设计课题,给出的参考设计方案是cc2480和MCU实现,我最近下了一些关于cc2480的管脚图和管脚说明,但是发现还是不容易看懂啊 ,不知道这个课题该从什么方面着手,请高人 ...… 查看全部问答> |
|
请教一个问题,我用的LM3S6911芯片,把C51字库操作移植过来,结果显示字符是不对的!不知道哪位能否给出移植的指示!我怀疑就是需要重写或者需要下载支持软件!比如一个字符串,51用多长来表示,LM3S6911又是用多长来表示呢?… 查看全部问答> |
|
驾驶助理技术商Mobileye融资4亿美元 腾讯科技讯(中涛)北京时间7月8日消息,据国外媒体报道,总部位于荷兰阿姆斯特丹的汽车驾驶助理技术开发商Mobileye周日表示,该公司近日已进行了新一轮融资,融资总额约为4亿美元,5家机构投资者对Mobileye的 ...… 查看全部问答> |




