历史上的今天
返回首页

历史上的今天

今天是:2025年04月11日(星期五)

正在发生

2019年04月11日 | STM32之SPI库函数介绍

2019-04-11 来源:eefocus

首先SPI的一些基本介绍参照相关芯片的库函数或者使用手册,以下介绍SPI库函数的基本用法和参数的定义。


1.SPI_DeInit函数的功能是将外设SPIx寄存器重设为默认值。输入参数SPIx可以是1和2,是用来选择SPI外设的。


2.SPI_Init函数的功能是根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器。SPI_InitDefType的结构体是定义在文件stm32f10x_spi.h里。


typedef struct


{


u16 SPI_Direction;//用于设置SPI单向或者双向数据模式。


u16 SPI_Mode;//用于设置SPI的工作模式;


u16 SPI_DataSize;//用于设置SPI数据大小;


u16 SPI_CPOL;//用于选择串行时钟的稳态;


u16 SPI_CPHA;//用于设置位捕捉的时钟活动沿;


u16 SPI_NSS;//用于指定NSS信号由硬件(NSS引脚)还是软件(SSI位)管理


u16 SPI_BaudRatePrescaler;//用于定义比特率预分频的值,该值用于设置发送和接收的SCK时钟


u16 SPI_FirstBit;//用于指定数据传输从MSB位还是LSB位开始


u16 SPI_CRCPolynomial;//定义用于CRC值计算的多项式


}SPI_InitTypeDef;


其中每一个参数初始化可取的值可以查询相关的手册得到,以下用一个例子来说明每一个参数的初始化使用情况。


/*依据SPI_InitTsructure中指定的参数初始化SPI1


SPI_InitTypeDef SPI_InitStructure;


SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI设置双线双向全双工


SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//设置为主SPI;


SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;//SPI发送接收16位帧;


SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//时钟悬空高;


SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第2个时钟沿;


SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;//NSS由外部引脚管理


SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;//比特率预分频为128;


SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//数据传输从MSB位开始


SPI_InitStructure.SPI_CRCPolynomial =7;//CRC计算的初值为7;


SPI(SPI1,SPI_InitStructure);


3.SPI_Cmd函数的功能是使能或者失能SPI外设。


SPI_Cmd(SPI1,ENABLE);


4.SPI_ITCinfig函数的功能是使能或者失能指定的SPI中断,该函数可取的参数值是SPI_IT_TXE/RXNE/ERR:发送缓存空中断频屏蔽/接受缓存非空中断屏蔽/错误中断屏蔽。


SPI_ITConfig(SPI2,SPI_IT_TXE,ENABLE);


5.SPI_DMACmd函数的功能是使能或者失能指定SPI的DMA请求。该函数可取的值为SPI_DMAReq_Tx/Rx:选择Tx/Rx缓存DMA传输请求。


SPI_DMACmd(SPI2,SPI_CmdRq_Tx,ENABLE);


6.SPI_SendData函数的功能是通过外设SIPx发送一个数据


SPI_SendData(SPI1,0XA5);


7.SPI_ReceiveData函数的功能是返回通过SPIx最近接受的数据,其中接收到的数据是16位的数据。


u16 ReceiveData;


ReceiveData = SPI_ReceiveData(SPI2);


8.SPI_GetFlagStatus函数的功能是检查指定的SPI标志位置位与否。一共有4种可取值:SPI_FLAG_BSY/OVR/MODF/RXNE:忙/超出/模式错误/接收缓存非空标志位。


9.SPI_ClearFlag函数的功能是清楚SPIx的待处理标志位。


SPI_ClearFlag(SPI2,SPI_FLAG_OVER);


10.spi_GetITStatus函数的功能是检查指定的SP中断发生与否。参数可取的值为:SPI_IT_OVR/MODF/CRC/RXNE/TXE.


ITStatus = Status;


Status = SPI_GetITStatus(SPI1,SPI_IT_OVR);


11.SPI_ClearITPendingBit函数的功能是清除SPIx的中断处理位。


SPI_ClearITPendingBit(SPI2,SPI_IT_CRCERR);

推荐阅读

史海拾趣

Global Power Technologies Group公司的发展小趣事
在电源保护、过流保护等场合,集基耦合单稳态电路可以检测异常信号并产生相应的保护动作。
Anadigm公司的发展小趣事
提供稳定的电源电压,避免因电源电压波动影响电路的正常工作。
埃派克森微电子(Apexone)公司的发展小趣事

埃派克森微电子的创立可追溯到2002年,由高勇回国并带领一支团队创立。作为一家初创公司,埃派克森在创立初期就明确了以模拟系统级芯片为突破口的发展战略。通过不断的研发和创新,埃派克森成功开发了多款具有竞争力的芯片产品,逐渐在亚太与国际市场崭露头角。这一阶段,公司的创新精神和坚持不懈的努力为后来的发展奠定了坚实基础。

飞虹(FeiHong)公司的发展小趣事

自成立以来,苏州锋驰不断投入研发力量,致力于技术创新。公司成功研发出152、153、2501等系列单片机产品,这些产品广泛应用于消费电子、小家电等产业,赢得了市场的广泛认可。随着技术的不断积累,苏州锋驰还不断推出新产品,以满足客户日益多样化的需求,进一步巩固了其在行业内的地位。

HB公司的发展小趣事

服务:Hartmann Codier GmbH深知客户是企业发展的基石。因此,公司始终将客户服务放在首位,致力于为客户提供优质的产品和服务。公司建立了完善的客户服务体系,包括售前咨询、售中支持和售后服务等环节。

成果:通过不断优化客户服务流程和提高服务质量,Hartmann Codier GmbH赢得了广大客户的信赖和支持。公司与客户之间建立了长期稳定的合作关系,共同推动了电子行业的繁荣发展。同时,公司也根据客户的反馈和需求,不断改进产品和服务,以满足市场的不断变化和升级。

COILCRAFT公司的发展小趣事

多年来,COILCRAFT公司凭借其卓越的产品质量、创新能力和良好的服务赢得了广泛的赞誉。在电子行业中,COILCRAFT已经成为高性能磁性元件设计、制造和分销领域的知名品牌。许多知名企业都选择与其合作,共同推动电子行业的发展。同时,COILCRAFT还积极参与行业交流和合作,为推动行业的进步贡献自己的力量。

以上这些故事只是COILCRAFT公司发展历程中的一部分,它们共同展示了这家公司在电子行业中的成长与壮大。未来,随着科技的不断发展和市场需求的不断变化,COILCRAFT将继续保持创新精神,为客户提供更优质的产品和服务。

问答坊 | AI 解惑

求助强人!!有做过复合频率信号频率计的帮个忙!!

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 一、任务 测量两个正弦信号的叠加信号,其中,x1是主信号,幅值为 V(偏置为0V),频率为:20-20kHz;x2是次要信号,幅值为主信号的1/4-1/6,频率为:20-20kHz;二、要求 1.基本要求 (1)利用两个 ...…

查看全部问答>

CPES-IBM未来通信电源功率架构

CPES-IBM未来通信电源功率架构…

查看全部问答>

五一快到了!发段汇编程序的问题给大家爽爽!

哈哈!我骗大家进来的,没什么爽的 问题是这样的:在PXA270上我跑这段程序:入口地址选为0X0(即NORFLASH的地址) xlli_GPIOREGS_PA_BASE EQU 0x40e00000 xlli_GAFR0_L_offset   EQU 0x00000054 xlli_GPDR0_offset     ...…

查看全部问答>

小车控制算法研究 高手大牛 来说说思路

车图 跑道 现在  要控制车子速度 通过一个舵机控制车头转动方向 转动的方向由前面的红外传感器检测到跑道的识别码得到 但是检测的识别码只可能尽量的和实际吻合但仍会有几度的误差 有时甚至会更多 程序会不停的扫描道路得到识 ...…

查看全部问答>

程序效率的问题

我使用.Net写的一个程序,里面有很多自定义控件,和一些用户控件,程序启动很慢,至少一分钟,希望各位给一些意见 先谢谢大家了…

查看全部问答>

低价转让友善之臂QQ2440V3开发板+LCD3.5液晶屏

具体请看taobao上的介绍 http://auction1.taobao.com/auction/item_detail-0db2-5a0abc7b0e70e1f7ae53ffad3582dfc4.jhtml 配件清单: 1) S3C2440核心板一片,配置64MB NAND FLASH和64MB SDRAM 2) S3C2440开发板底板一片 3) 直连九针串口线一条 ...…

查看全部问答>

'CHtmlView' : base class undefined

我在evc下pocketPC模拟器,在一个窗口上要显示网页内容,使用了CHtmlCtrl类 http://dev.yesky.com/128/2272128_1.shtml 这个是国外某达人写的。 我在stdafx.h中已经加了#include \"afxhtml.h\",但是编译后提示我 \'CHtmlView\' : base class u ...…

查看全部问答>

类CPdd16550中m_dwWaterMark是用来干什么的?

类CPdd16550中m_dwWaterMark是用来干什么的? 是波特率的mark呢还是安全相关的mark? 有劳各位!…

查看全部问答>

万利板子上的片子后缀是A

                                 这个版本的片子是不是就不能ISP下载操作!…

查看全部问答>

F149内部AD的电压问题

我今天用一个探测火源的模块去接F149的内部AD,我用3.3V给火焰传感器模块供电,输出脚悬空的时候我测输出脚是0到3V之间在变化(就是当没有火源或者火源超过探测范围的时候是3V),但我接上F149的AD的输入脚之后本来的3V输出就立即衰减为1.7V了。然 ...…

查看全部问答>