关于【女人梦见路不好走却走过去了】,女人梦见路不好走预示什么,今天犇涌小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
内容导航:1、SPI协议详解2、女人梦见路不好走却走过去了:女人梦见路不好走预示什么1、SPI协议详解
SPI(Serial peripheral interface)即串行外围设备接口,是由Motorola首先在其MC68HCxx系列单片机上定义的,基于高速全双工总线的通讯协议。(又是高速,而且全双工,确实强大)被广泛应用于ADC、LCD等设备与MCU之间。
跟前面学习I2C、USART一样,学习一种协议,还是从两个层面分析:物理层和协议层。
1. SPI物理层
SPI通讯需要使用4条线:3条总线和1条片选
图1
SPI还是遵循主从模式,3条总线分别是SCK、MOSI和MISO,片选线为nSS(低电平有效),SPI协议适用于一主多从的工作场景:
图2
(1) nSS(Slave Select):片选信号线,用于选中SPI从设备。每个从设备独立拥有这条nSS信号线,占据主机的一个引脚。设备的其他总线是并联到SPI主机的,即无论多少个从设备,都共同使用这3条总线。当从设备上的nSS引脚被置拉低时表明该从设备被主机选中。
(2) SCK(Serial Clock):时钟信号线,通讯数据同步用。时钟信号由通讯主机产生,它决定了SPI的通讯速率。
(3) MOSI(Master Ouput Slave Input):主机(数据)输出/从设备(数据)输入引脚,即这条信号线上传输从主机到从机的数据。
(4) MISO(Master Input Slave Ouput):主机(数据)输入/从设备(数据)输出引脚,即这条信号线上传输从机从到主机的数据主从机通过两条信号线来传输数据,那么自然是全双工通讯的了。之前的I2C通讯,数据只在一条SDA线上传输,主从机数据交互只能采用半双工。
2. SPI协议层
图3
如上为SPI通讯时序图,nSS、SCK、MOSI信号均由主机产生,MISO信号由从机产生。在nSS为低电平的前提下,MOSI和MISO信号才有效,在每个时钟周期MOSI和MISO传输一位数据。
跟I2C通讯类似,SPI通讯也需要通讯的起始/结束信号,有效数据和同步时钟。
2.1 通讯的起始/结束信号
图中的nSS信号由高电平变为低电平即为SPI通讯的起始信号,反过来,nSS信号由低电平变为高电平即为SPI通讯的结束信号。这个可比I2C简单得多吧。当从机检测到自身的nSS引脚被拉低时就知道自己被主机选中,准备和主机进行通讯。
2.2 有效数据的采集
SPI通讯的数据采集是个相对复杂的环节,先不说其他,以上图为例:
图中红色框框即为有效数据被采集的时间点,"CPOL = 0"所在的脉冲信号表示的是用于进行数据同步的SCK,MOSI和MISO线上的数据在每个SCK时钟周期传输一位数据,注意,数据的输入/输出是可以同时进行的。
由图可见,在SCK为奇数(更正:这里应该是偶数)边沿(在这里该边沿为下降沿)时,数据得到有效采样,也就是说,在这个时刻,MISO和MOSI的数据有效,高电平表示数据1,低电平表示数据0,在其它时刻数据并无效,可以理解为为下一次MISO和MOSI的数据传输做准备。
数据在传输中,高位在先还是低位在先,SPI协议并无明确规定,但是数据要在主从机中正确传输,自然双方要先约定好,一般会采用高位在先(MSB)方式传输。
这里需要再提及的概念是时钟极性(CPOL)和时钟相位(CPHA)。
时钟极性(CPOL)指通讯设备处于空闲状态(SPI开始通讯前、nSS线无效)时,SCK的状态。
CPOL = 0:SCK在空闲时为低电平
CPOL = 1:SCK在空闲时为高电平
1 | CPOL = 0:SCK在空闲时为低电平2 | CPOL = 1:SCK在空闲时为高电平
时钟相位(CPHA)指数据的采样时刻位于SCK的偶数边沿采样还是奇数边沿采样。
CPHA = 0:在SCK的奇数边沿采样
CPHA = 1:在SCK的偶数边沿采样
1 | CPHA = 0:在SCK的奇数边沿采样2 |CPHA = 1:在SCK的偶数边沿采样
那么这样说来,SPI的采样时刻并非由上升沿/下降沿决定的。注意的是,在数据采样时刻,MOSI和MOSI的电平为有效电平,数据不能在这个时刻进行切换,在非采样时刻MOSI和MISO上的信号才能切换。
完整的时序图如下:
图4
图5
所以说,SPI有4中工作模式:
图6
更正:工作模式3的CPOL应为1。
注意要让主机和从机需要在相同的工作模式下,这样才可以实现正常通讯。
下面介绍用STM32库函数实SPI通讯代码。
#ifndef __SPI_H#define __SPI_H#include "stm32f10x.h"void SPI2_Config(void);void SPI2_SetSpeed(uint8_t Speed);uint8_t SPI2_WriteReadData(uint8_t dat);void SPI1_Config(void);void SPI1_SetSpeed(uint8_t speed);uint8_t SPI1_WriteReadData(uint8_t dat);/***************************************************************************** Function Name : SPI1_Config* Description : ³õʼ»¯SPI2* Input : None* Output : None* Return : None****************************************************************************/void SPI1_Config(void){GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); 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_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); //PA5.6.7ÉÏÀ/***************************************************************************//************************* ÉèÖÃSPIµÄ²ÎÊý ***********************************//***************************************************************************/SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//Ñ¡ÔñÈ«Ë«¹¤SPIģʽSPI_InitStructure.SPI_Mode = SPI_Mode_Master; //Ö÷»úģʽSPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8λSPISPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //ʱÖÓÐü¿Õ¸ßµçƽSPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //ÔÚµÚ¶þ¸öʱÖӲɼ¯Êý¾ÝSPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NssʹÓÃÈí¼þ¿ØÖÆSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//´Ó×î¸ßλ¿ªÊ¼´«ÊäSPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Cmd(SPI1, ENABLE);SPI_Init(SPI1, &SPI_InitStructure);} /***************************************************************************** Function Name : SPI2_Config* Description : ³õʼ»¯SPI2* Input : None* Output : None* Return : None****************************************************************************/void SPI2_Config(void){GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);/***************************************************************************//************************* ÉèÖÃSPIµÄ²ÎÊý ***********************************//***************************************************************************/SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//Ñ¡ÔñÈ«Ë«¹¤SPIģʽSPI_InitStructure.SPI_Mode = SPI_Mode_Master; //Ö÷»úģʽSPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8λSPISPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //ʱÖÓÐü¿Õ¸ßµçƽSPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //ÔÚµÚ¶þ¸öʱÖӲɼ¯Êý¾ÝSPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NssʹÓÃÈí¼þ¿ØÖÆSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//´Ó×î¸ßλ¿ªÊ¼´«ÊäSPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Cmd(SPI2, ENABLE);SPI_Init(SPI2, &SPI_InitStructure);} /***************************************************************************** Function Name : SPI1_SetSpeed* Description : ÉèÖÃSPI1µÄ´«ÊäËٶȡ£* Input : ËٶȲ¨ÌØÂÊ·ÖƵ* Output : None* Return : None****************************************************************************/void SPI1_SetSpeed(uint8_t speed){SPI1->CR1 &= 0xFFC7; SPI1->CR1 |= speed;SPI_Cmd(SPI1, ENABLE);}/***************************************************************************** Function Name : SPI2_SetSpeed* Description : ÉèÖÃSPI2µÄ·ÖƵÊý£¬ÒԸıäSPI2µÄËÙ¶È.* Input : Speed£º·ÖƵÊý* Output : None* Return : None****************************************************************************/void SPI2_SetSpeed(uint8_t Speed){SPI2->CR1 &= 0xFFC7; SPI2->CR1 |= Speed;SPI_Cmd(SPI2,ENABLE); }/***************************************************************************** Function Name : SPI1_WriteReadData* Description : ʹÓÃSPI1дÈëÒ»¸ö×Ö½ÚÊý¾Ýͬʱ¶ÁÈ¡Ò»¸ö×Ö½ÚÊý¾Ý¡£* Input : dat£ºÒªÐ´µÄ8λÊý¾Ý* Output : None* Return : ¶ÁÈ¡µ½µÄ8λÊý¾Ý****************************************************************************/uint8_t SPI1_WriteReadData(uint8_t dat){uint16_t i = 0; while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){i++;if(i > 10000){return 0xFF;}} SPI_I2S_SendData(SPI1, dat);while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); return SPI_I2S_ReceiveData(SPI1);}/***************************************************************************** Function Name : SPI2_WriteReadData* Description : ʹÓÃSPI2дÈëÒ»¸ö×Ö½ÚÊý¾Ýͬʱ¶ÁÈ¡Ò»¸ö×Ö½ÚÊý¾Ý¡£* Input : dat£ºÐ´ÈëµÄÊý¾Ý* Output : None* Return : ¶ÁÈ¡µ½µÄÊý¾Ý* * ¶Áȡʧ°Ü·µ»Ø0xFF****************************************************************************/uint8_t SPI2_WriteReadData(uint8_t dat){uint16_t i = 0; while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){i++;if(i > 10000){return 0xFF;}} SPI_I2S_SendData(SPI2, dat);while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); return SPI_I2S_ReceiveData(SPI2);}
2、女人梦见路不好走却走过去了:女人梦见路不好走预示什么
女人梦见路不好走预示什么
梦见路不好走:预示梦者的运势挺好的,还会有很好的事情发生在你身上,也许是会有朋友给你介绍不错的新朋友,让你的人际关系变得比较好。
从工作方面来看:找工作的女人梦见路不好走,预示着你近期的求职运势很好,自己之前做的一些功课没有白费,可能有机会得到自己想要的职位。
从本命年的运势来看:本命年的女人梦见了路不好走,预示梦者需要心情要放松,切记要少管闲事,以免给自己惹来血光之灾。
从恋爱方面来看:单身的女人梦见路不好走,预示着你近期的爱情运势不好,并且自己平时对恋人的关心不够,导致恋人很有可能会变心。恋爱中的女人梦见了路不好走,预示两人之间误会化解之后就能重归于好,最后婚姻可成。
女人梦见路不好走预示什么
梦见路不好走:预示梦者的运势挺好的,还会有很好的事情发生在你身上,也许是会有朋友给你介绍不错的新朋友,让你的人际关系变得比较好。
从工作方面来看:找工作的女人梦见路不好走,预示着你近期的求职运势很好,自己之前做的一些功课没有白费,可能有机会得到自己想要的职位。
从本命年的运势来看:本命年的女人梦见了路不好走,预示梦者需要心情要放松,切记要少管闲事,以免给自己惹来血光之灾。
从恋爱方面来看:单身的女人梦见路不好走,预示着你近期的爱情运势不好,并且自己平时对恋人的关心不够,导致恋人很有可能会变心。恋爱中的女人梦见了路不好走,预示两人之间误会化解之后就能重归于好,最后婚姻可成。
女人梦见路不好走预示什么
女人梦见路不好走的`梦境解析
女人梦见路不好走,预示近期梦者的运势不错,虽要经历磨炼,但只要坚持努力,定会取得不平凡的成功。
不同的女人梦见路不好走的梦境解析
做生意的人梦见了路不好走,代表营利得财,名利双收,宜多谨慎处理。
恋爱中的人梦见了路不好走,说明误会化解之后复归于好,婚姻可成。
本命年的人梦见了路不好走,意味着心情放开,闲事少管,慎防血光之灾。
怀孕的人梦见了路不好走,预示生男,秋占生女,慎防胎死腹中。
女人梦见路不好走的相关梦境解析
女人梦见崎岖狭窄的道路不好走,表示你要经历坎坷磨炼,或是心中有痛苦难以排解。
女人梦见路不好走,但有人帮助你,预示着你近期的运势很好,有好的事情发生在自己的身上,有可能是朋友给自己介绍新朋友。
女人梦见自己走路摔倒,一般来说意味着自己的工作或生活上将会出现障碍和阻力,自己已经感觉到了一种无形的压力,反应到梦里就是摔倒
女人梦见路不好走的心理学解析
心理分析:在心理学中,路表示生活道路。当一个人面临选择时,他就会梦见路有分岔,不同的道路有不同的景象,表示他的不同选择。而在梦中你走了某一条路,则表示你内心深处,或说你潜意识里,或说你的“原始人”,选择了那一条路。女人梦见路不好走,可能是梦者觉得最近生活艰辛,所以才有此梦。
原版周公解梦分析女人梦见路不好走
见四通路,名利遂。《周公解梦》
道泥荆棘,事大成。《周公解梦》
大道崩馅,主失财。《周公解梦》
女人梦见路不好走的吉凶
基础坚固,毫无变动,如立盘石之上发展,达成目的,向上进取,努力奋斗,容易成功富贵,顺利发展,安泰健身长寿。【大吉昌】
女人梦见路不好走的宜忌
「宜」宜午饭少吃,宜看书写字,宜给朋友打电话。
「忌」忌逛动物园,忌当机立断,忌道歉。
本文关键词:女人梦见路不好走预示什么呢,女人梦见道路不好走,梦见路不好走是怎么回事,女人梦见路不好走预示什么预兆,女人梦见前面的路不好走。这就是关于《女人梦见路不好走却走过去了,女人梦见路不好走预示什么(SPI协议详解)》的所有内容,希望对您能有所帮助!