深圳单片机开发网
 
-- 
深圳单片机交流网
收藏本站
联系站长
关于本站
首页 信息发布 产品宣传 论坛交流 学习文章 技术人生 项目源码 技术资料 人才收录
 今天是: 2018年1月16日 星期 二
欢迎光临!单片机群号:154389772 25930265 71062262 21829895 64584393 26583231  
热门文章推荐


当前位置:首页>>>单片机学习文章>> STM32F0XX spi通信
STM32F0XX spi通信
作者:tamson给他留言 [转载] 字体:
发表于:
2015-12-06 22:45:52
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。

转载:

xuezhimeng2010的专栏


(本文引自www.mcujl.com/article.asp?conID=3165)


---------------------------------------------------------------------------------------------------
[打印文章] [关闭本页] [返回顶部]
本网站部分资料转自网上,如有侵权请来信告明,我们会尽快删除  | 网站地图
Copyright @ 2007-2010 深圳单片机开发网,单片机交流网.版权所有
网站管理员:詹工,李工
网站支持:zcl843@163.com QQ:380476830