STM32之SPI库函数介绍

发布者:温馨幸福最新更新时间:2019-04-11 来源: eefocus关键字:STM32  SPI  库函数 手机看文章 扫描二维码
随时随地手机看文章

首先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);

关键字:STM32  SPI  库函数 引用地址:STM32之SPI库函数介绍

上一篇:Stm32调试之assert_param() 断言机制
下一篇:STM32库函数开发工程模板

推荐阅读最新更新时间:2024-03-16 16:27

STM32日志之总结篇1--跑马灯实验
//======================================================// **基于学习STM32有一段时间了,特意写下一篇关于一个简单的跑马灯 的例程,梳理思路,也希望我自己的理解能帮到一些学习STM32的初学者 //======================================================// 首先,GPIO的配置种类有8种。分别为模拟输入、浮空输入,上拉输入、下拉输入、开漏输出、推挽输出、复用开漏输出、复用推挽输出。 下面将以实例的方式讲解GPIO的设置及实现过程。 事例1:跑马灯实验 跑马灯实验的功能:LED灯进行有规律闪烁。(下面的LED灯的数
[单片机]
STM32的几种输入模式以及外部中断的配置
  要求:将连接按键的IO口配置为上拉输入,按键一端接IO口,一端接地,即当按键按下后,该IO口会产生一个下降沿,触发下降沿中断。   问题:将相应的IO口配置好后,测了引脚的的电压,并不是3.3V左右,而是0.1V左右。于是猜想:   1. 外围电路对IO口产生了影响。   2. STM32内部上拉能力较弱,一次只能上拉一个IO口。   于是开始从这两个想法着手解决。首先第一个,很容易就排除了。将外围电路撤掉,我用的是杜邦线,直接拔掉测量引脚上的电压,依然是0.1V左右,于是第1个猜想排除。   第二个,查看万能的参考手册,发现每一个IO口都是有独立的驱动电路,这样第2个也排除了。   最后各种纠结,然后发现:在主函数的开头部分
[单片机]
STM32的IO口配置
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 GPIO端口的每个位可以由软件分别配置成多种模式。 1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽式输出 7、推挽式复用功能 8、开漏复用功能 每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPI
[单片机]
逻辑分析仪的使用(UART、SPI
首先上一张接线示意图 上方是UART的接线方式,下方则是SPI的 事实上,这样接就能收到信号了 如果是SPI,要设定自己为主机,UART则没有这个问题 下面来说明逻辑分析仪的界面设定 设定介绍完了 下面首先是UART的界面 如果曾经写过UART传输,应该对这些设定不陌生吧? 波特率、几位数据传输、停止位、奇偶校验。。。 最后的三个选项,应该选Standart(标准)、None就可以了吧 不太清楚是指哪部分,不过,我实测是有波形出来的 UART的部分就结束了,下面是SPI的 上方的4个通道,应该不陌生,就是SPI的通讯方式 接下来的4个,设定高位在前,或是低位在前,然后是几位数据 CPOL和CPHA,如果
[测试测量]
逻辑分析仪的使用(UART、<font color='red'>SPI</font>)
基于STM32的物联网环境监测系统
本应用笔记以STM32单片机作为控制和数据处理的单元,使用AHT10、BH1750和BMP280传感器去监测周围的环境参数,在LCD屏完成传感器数据和相关信息的显示。 同时,采用了无线模组与单片机之间进行数据交互。当无线通讯模组成功连接网络,并接入机智云物联网云平台时,用户可以通过登录物联网云平台后台查看传感器上报的数据和进行远程控制。 01 总体方案设计 本环境监测系统设计选取了控制和数据处理能力强的ST32单片机作为核心部件。使用温湿度传感器对周围环境中的温度与湿度监测,选取高精度的光强度传感器完成对周围环境的光照强度的测量,对于气压数据的测量,将选取高精度的气压传感器完成工作。 该系统使用液晶显示屏幕完成对
[单片机]
基于<font color='red'>STM32</font>的物联网环境监测系统
基于STM32原子战舰板内存管理源码详解
简介:走到今天,已经开始涉及到计算机核心一点的东西了---内存管理。通过本实验的学习,能够较为深刻体会到“指针是c语言的灵魂”这句话的分量。自然对c语言的能力要求就高很多了。本文是基于原子老师的c源码,自己的学习的心得,只是对源码作出自己的学习理解,同时也插补了一些涉及到的c语言知识。贴出本文不为别的,一来但愿能有有缘人看到本文,提出指正;二来,为了那些不眠的夜,安慰一下自己。 1, 内存管理简介 内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,他们其实最终都是要实现2个函数:malloc和free;malloc函
[单片机]
STM32直流电机启动(一)驱动电路的介绍
驱动电路 典型的H桥驱动电路如下: 要使电机旋转只需导通对角线上的两个三极管即可,如导通Q1,Q4,关闭Q2,Q4即可驱动电机正转; 若想电机反向转动,即导通三极管Q2,Q3,关闭Q1,Q4。 此时电路图可简化为如下所示: 但当我们直接导通一个半桥上的Q1,Q3(或Q2,Q4)时,电源被短接,由于三极管电阻很小,此时流过三极管的电流很大,非常容易烧坏三极管,因此实际运用中一定不能导通同一个半桥上的三极管。 但是在实际情况中,三极管导通/关闭和电路中的其它原件操作都存在一定延时的,因此不能简单的认为,只需要同时将Q1,Q4导通,Q2,Q3关闭即可驱动电机; 为避免上述情况的发生,一般有如下两种方式: 1.硬件上采
[单片机]
如何利用定时器产生PWM波
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波 pwm.c #include pwm.h voidTIM1_PWM_Init
[单片机]
如何利用定时器产生PWM波
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved