版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二节 通讯及总线-SPI总线复 习 总结uart 1、两根线:发送和接收 2、发送器:TE使能,发送一个空闲帧+一个下降沿,表明开始传输 3、接收器:如果辨认出序列1 1 1 0 X 0 X 0 X 0 0 0 0,那么就认为侦测到一个起始位,开始接收。 4、一帧数据包括起始位,数据位和停止位(或者包括奇偶校验位),根据事先的配置或约定SPI总线协议 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX 系列处理器上定义的。SPI总线系统是一种同步串行外设接口通信以交换信息。外围设置FLASH,R
2、AM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。接口包括以下四种信号:接口包括以下四种信号:(1)MOSI 主器件数据输出,从器件数据输入 (主发从收)(2)MISO 主器件数据输入,从器件数据输出 (主收从发)(3)SCLK 时钟信号,由主器件产生 (时钟线)(4)CS 从器件使能信号,由主器件控制 (片选线)SPI通信以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。 从选择(NSS)脚管理 有2种NSS模式: 软件NSS模式:设置SPI_CR1寄存器的SSM位来使能这种模式。在这种模式下NSS引脚
3、可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动 从选择(NSS)脚管理 硬件NSS模式,分两种情况: NSS输出被使能:当STM32为主SPI,并且NSS输出已经通过SPI_CR2寄存器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从SPI设备。 当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这时将产生一个硬件失败错误(Hard Fault)。 NSS输出被关闭:允许操作于多主环境。 S
4、PI通讯至少两个设备,一个作为主设备,一个作为从设备。通过配置CR1决定主从设备,通过NSS(CS)管理其他从设备 如何实现通讯?除去NSS管脚,还剩3根线。MISO,MOSI,SCK。SCKSPISPI接口实际上是两个简单的移位寄存器接口实际上是两个简单的移位寄存器, ,传输的数据为传输的数据为8 8位位, ,在主器件产在主器件产生的从器件使能信号和移位脉冲下生的从器件使能信号和移位脉冲下, ,按位传输按位传输, ,高位在前高位在前, ,低位在后。低位在后。 上升沿发送,下降沿接收。(有的器件是上升沿接收,下降沿发送)上升沿发送,下降沿接收。(有的器件是上升沿接收,下降沿发送)D7D7. .
5、 . . .D0D0D0D0. . . . .D7D7 SPI相当于一个环形移位寄存器脉冲 主机sbuff 从机sbuff sdi sdo 0 10101010 01010101 0 0 1上 0101010 x 1010101x 0 1 1下 01010100 10101011 0 1 2上 1010100 x 0101011x 1 0 2下 10101001 01010110 1 0 3上 0101001x 1010110 x 0 1 3下 01010010 10101101 0 1 如果要正常发送和接收,则: 如果主设备MO上升沿改变数据,则高电平保持线上数据,低电平总线空闲;从设备SI
6、下降沿接收数据; 同时,SO上升沿改变数据,高电平保持线上数据,主设备MI下降沿接收数据 如果主设备MO下降沿改变数据,则低电平保持线上数据,高电平总线空闲;从设备SI上升沿接收数据; 两个概念: 时钟极性(CPOL): 0: 空闲状态时,SCK保持低电平; 1: 空闲状态时,SCK保持高电平。 时钟相位(CPHA) 0: 数据采样从第一个时钟边沿开始; 1: 数据采样从第二个时钟边沿开始。 四种组合模式选择不同组合的依据是什么?一般主设备是MCU,可通过编程改变从设备为SPI外设,具有固定的通讯模式因此,主设备(STM32)选择何种模式基于从设备的通讯模式比如:M25P64,64M flas
7、h存储器,支持SPI访问,允许的SPI模式为: CPOL=0, CPHA=0 CPOL=1, CPHA=1如何配置及访问SPI设备?Stm32之SPI配置 Step 1:使能时钟 因此,要使能的时钟包括: PA口,AFIO口,SPI口Stm32之SPI配置 Step 1:使能时钟 根据参考手册,以上端口隶属于APB2总线,因此使能的库函数可以为: RCC-APB2ENR |= RCC_APB2Periph_GPIOA; RCC-APB2ENR |= RCC_APB2Periph_AFIO; RCC-APB2ENR |= RCC_APB2Periph_SPI1Stm32之SPI配置 Step 2
8、:管脚配置 PA5-PA7 配置为复用功能 PA4配置为输出功能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructu
9、re.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure);Stm32之SPI配置Step 3:spi参数配置根据SPI原理,可将器件配置为主设备和从设备。以基于SPI的flash访问为例,将STM32配置为主设备,外部存储器flash型号为:M25P64Stm32之SPI配置 有关M25P64 64 Mbit of Flash memory 2.7 V to 3.6 V single supply voltage SPI bus compatible serial interface 75 MHz cl
10、ock rate (maximum) More than 100 000 Erase/Program More than 20-year data retention组织结构包括: 8388608 字节 128 扇区 32768 页Stm32之SPI配置 有关M25P64 支持的SPI模式: CPOL=0, CPHA=0 CPOL=1, CPHA=1所以,总是上升沿改变数据,下降沿采集数据问题: 如何去操作M25P64,包括读,写,擦除通过SPI总线,向器件写操作指令Stm32之SPI配置 Step 3:spi参数配置 所以,需要将stm32配置为主设备配置步骤 1. 通过SPI_CR1寄存器
11、的BR2:0位定义串行时钟波特率。 2. 选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系3. 定义8位或16位数据帧格式。 4. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。 5. 如果需要NSS引脚工作在输入模式。硬件模式下,在整个数据帧传输期间应把NSS脚连接到高电平;在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。如果NSS引脚工作在输出模式,则只需设置SSOE位。 6. 设置MSTR位和SPE位。 Stm32之SPI配置配置步骤 1. 通过SPI_CR1寄存器的BR2:0位定义串行时钟波特率。 SPI控制寄存器1(SPI_CR1)Stm32支持支
12、持18M Hz 波特率,波特率,M25P64支持最高支持最高75M Hz所以,若所以,若PCLK=72M Hz,则,则SPI1-CR1 |=0 x0008Stm32之SPI配置配置步骤 2. 设置CPOL和CPHA位,确定极性和相位关系 SPI控制寄存器1(SPI_CR1)根据根据M25P64要求,只能为:要求,只能为:0 x00h,或,或0 x03hStm32之SPI配置配置步骤 3. 定义8位或16位数据帧格式。 4. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。 SPI控制寄存器1(SPI_CR1)Stm32之SPI配置配置步骤 5. 如果需要NSS引脚工作在输入模式。硬件模
13、式下,在整个数据帧传输期间应把NSS脚连接到高电平;在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。如果NSS引脚工作在输出模式,则只需设置SSOE位。两种选择:硬件:固定主从关系 软件:可改变Stm32之SPI配置配置步骤 5. 如果需要NSS引脚工作在输入模式。硬件模式下,在整个数据帧传输期间应把NSS脚连接到高电平;在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。如果NSS引脚工作在输出模式,则只需设置SSOE位。若NSS引脚工作在输出模式,此时,该设备不能工作于多主设备的网络中,只能作为单一主设备进行工作SPI控制寄存器2(SPI_CR2) Stm32之SP
14、I配置配置步骤 6. 设置MSTR位和SPE位。SPI控制寄存器1(SPI_CR1)Stm32之SPI配置完整配置代码:unsigned short temp=0;temp |= 0 x0008;/定义波特率为18M Hztemp |= 0 x0003;/定义极性及相位关系,为11temp &=0 xF77F;/定义8位数据格式,且高位在前传输temp |= 0 x0200;/NSS引脚工作在软件模式下temp |= 0 x0042;/配置为主模式,并启动SPISPI1-CR1=temp;接下来的问题:数据如何发送和接收Stm32之SPI配置首先确定连接方式。1、硬件连线确定2、软件配
15、置确定Stm32之SPI配置首先确定连接方式。1、BIDIMODE=0 BIDIOE=x RXONLY=0双线双向,即全双工2、BIDIMODE=0 BIDIOE=x RXONLY=1用于多个从设备时,禁止未被访问的设备发送数据Stm32之SPI配置首先确定连接方式。4、BIDIMODE=1 BIDIOE=x RXONLY=0双向,只发送3、BIDIMODE=1 BIDIOE=x RXONLY=1双向,此时只接收5、BIDIMODE=0 BIDIOE=x RXONLY=1单向,只接收Stm32之SPI配置全双工模式全双工模式(BIDIMODE=0并且并且RXONLY=0) 当写入数据到SPI_
16、DR寄存器(发送缓冲器)后,传输开始; 在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,然后按顺序被串行地移位送到MOSI引脚上; 与此同时,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。 对于发送器:MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIRST位的设置。数据从发送缓冲器传输到移位寄存器时TXE标志将被置位,如果设置了SPI_CR1寄存器中的TXEIE位,将产生中断。 对于接收器来说,当数据传输完成时: 传送移位寄存器里的数据到接收缓冲器,并且RXNE标志被置位
17、。 如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。 Stm32之SPI配置SPI 数据寄存器(SPI_DR) Stm32之SPI配置完整配置代码:unsigned short temp=0;temp |= 0 x0008;/定义波特率为18M Hztemp |= 0 x0003;/定义极性及相位关系,为11temp &=0 xF77F;/定义8位数据格式,且高位在前传输temp |= 0 x0200;/NSS引脚工作在软件模式下temp &=0111 1011 1111 1111=0 x7BFF;/全双工模式temp |= 0 x0042;/配置为主模式,并启动
18、SPI接下来,即向SPI1-DR寄存器中写或读数即可,实现发送和接收Stm32之SPI读写SPI_FLASH_SendByte(0 x9F);SPI1-DR = 0 x9F;Temp0 = SPI_FLASH_SendByte(Dummy_Byte);Temp1 = SPI_FLASH_SendByte(Dummy_Byte);Temp2 = SPI_FLASH_SendByte(Dummy_Byte);Temp0 =SPI1-DRTemp1 =SPI1-DRTemp2 =SPI1-DR具体读写数据,需根据从设备的器件要求Stm32之SPI读写M25P64操作The memory is org
19、anized as: 8388608 bytes (8 bits each) 128 sectors (512 Kbits, 65536 bytes each) 32768 pages (256 bytes each).每页256个字节 256个页组成一个扇区 128个扇区组成整个块(bulk或block)允许写页,写不支持扇区和块擦除只支持扇区和块Flash中默认为0,写操作其实是1-0改写对应擦出操作,即是0-1的改写。Stm32之SPI读写M25P64操作1、首先拉低片选,操作完成后,拉高片选SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(0 x9F);Tem
20、p0 = SPI_FLASH_SendByte(Dummy_Byte);Temp1 = SPI_FLASH_SendByte(Dummy_Byte);Temp2 = SPI_FLASH_SendByte(Dummy_Byte);SPI_FLASH_CS_HIGH();Stm32之SPI读写M25P64操作2、写使能步骤:拉低片选,发送指令,拉高片选 SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(WREN); 0 x06 指令码SPI_FLASH_CS_HIGH();Stm32之SPI读写3、擦除操作步骤:写使能,拉低片选,发送擦除指令,发送擦除地址, 拉高片选SP
21、I_FLASH_WriteEnable();SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(SE);0 xD8,扇区擦除指令SPI_FLASH_SendByte(SectorAddr & 0 xFF0000) 16);SPI_FLASH_SendByte(SectorAddr & 0 xFF00) 8);SPI_FLASH_SendByte(SectorAddr & 0 xFF);SPI_FLASH_CS_HIGH();Stm32之SPI读写4、写操作步骤:擦除目标扇区,写使能,拉低片选,发送写指令, 发送写地址,循环DR寄存器中写数据发送,
22、拉高片选SPI_FLASH_SectorErase(FLASH_SectorToErase); SPI_FLASH_WriteEnable();SPI_FLASH_CS_LOW();SPI_FLASH_SendByte(WRITE);0 x02,扇区擦除指令SPI_FLASH_SendByte(SectorAddr & 0 xFF0000) 16);SPI_FLASH_SendByte(SectorAddr & 0 xFF00) 8);SPI_FLASH_SendByte(SectorAddr & 0 xFF); while (NumByteToWrite-) SPI_FLASH_SendByte(*pBuffer);pBuffer+; SPI_FLASH_CS_HIGH();Stm32之SPI读写4、读操作步骤:拉低片选,发送读指令,发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电梯吊装作业安全操作规程
- 2025-2026学年浙江省舟山市初中历史九年级期末上册提升难点突破题(附答案)
- PCN生产变更通知考核试题(含详细答案解析)
- 烧烤店炭火使用安全及防中毒方案
- 2026年麻醉科麻醉并发症处理流程规范考核试题及答案解析
- PCDS(持续性躯体症状障碍)专项试题及详细答案解析
- OTG技术实操考核试题(含详细答案)
- OpenGL程序设计期末试题(含详细答案)
- 检查井砌块砌筑及井盖安装方案
- 婴幼儿生理特点与卫生保健试题及答案
- 购买救护车合同范本
- 关于进一步完善中小学岗位设置管理的指导意见
- 康复运动疗法技术
- 医院培训课件:《急性胸痛早期识别处置转运》
- 特种作业操作证(低压电工)
- 义务教育地理课程标准(2011-年版)
- 吉林大学《大学英语BI》2021-2022学年第一学期期末试卷
- 秋冬季老年人防病保健
- 加油站消防安全检查总结
- 履带吊安拆施工方案交底
- TSG+23-2021气瓶安全技术规程
评论
0/150
提交评论