
你可真行,竟然用keil 来仿真STC单片机,本来,keil 中是没有STC 单片机的,只不过是借用其它的型号建个工程。而且keil 仿真,只能仿真传统的51单片机,而STC增加的功能是无法仿真出来的。那SPI 对于keil 而言,根本就不知道是什么,怎么可能仿真出来呢?
要测试SPI功能 ,必须用STC单片机实物。
不是sbi而应该是spi吧?
SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如P89LPC900
SPI,是一种高速的,全双工,同步的通信总线,其工作模式有两种:主模式和从模式,无论那种模式,都支持
3Mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。到目前为止,我使用过的具有SPI总线的器件,就是存储芯片Eprom:at25128,在使用过程中,发现的确是有这种总线的优点。下面以P89LPC900单片机的SPI总线来解释SPI总线的通用使用规则。
LPC900单片机的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及/SS,其中SPICLK是整个SPI总线的公用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO是主机的输入,从机的输出。/SS
是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通信系统中,必须有主机。
SPI总线可以配置成单主单从,单主多从,互为主从。今以互为主从模式作为讲解:
要进行SPI互为主从 *** 作,必须遵照以下步骤:
1 对A、B进行初始化,均设为主机(需要进行以下 *** 作)。
a) SPI端口初始化为准双向。
b) SPCTL配置为0x50,SSIG=0,SPEN=1,MSTR=1。
c) 清除SPSTAT中的SPIF及WCOL标志位为0。
d) 如果需要使用SPI中断,可使能相应中断位。
2 将A上一个引脚连接到B的/SS引脚上,然后拉低/SS,可将B强行置为从机模式,同时B机会发生以下变化:
a) B机的MSTR位自动清0。
b) B机的MOSI及SPICLK强行变为输入模式,MISO则变为输出模式。
c) B机SPIF位置位。
d) 如果SPI中断使能,B机将执行SPI中断服务程序。
3 B机可设置为查询接收或中断接收方式,以时刻准备接收由A机发送过来的数据,要使B机恢复为主机,必须完整执行步骤1。 本示例中,通过两块DP932 实验板构成了SPI互为主从测试系统。
程序中应注意的问题:
1 程序中应注意对首次拉低SS引脚进行处理:当A机首次通过B_SS将B机设置为从机后,从机的SBIF位会置位(会被认为完成一次传输),如果这之前,使能了SPI中断,则从机则会执行相应的中断服务程序(本示例程序中,当B机的SS引脚被拉为低电平,B机的SBIF首次置位进行处理)。
2 关于从机恢复为主机的问题:互为主从模式中,当B机被A机设置为从机后,CPCTL寄存器中MSTR位被清除为0,且SPIF被置1,MOSI和SPICLK强制变为输入模式,MISO强制变为输出模式。要想恢复为主机,必须执行以下 *** 作:
a) 将MSTR位置1,SPIF位清0。
b) 将MOSI,SPICLK,MISO及SS重新恢复为准双向口。
c) 在a)、b)之前,需要注意将B_SS拉高,如果其一直为低电平,即使完成a)、b) *** 作,也会将B机重新设置为从机。
3 在SPI总线的使用过程中,可以通过DORD(SPI数据顺序选择位),CPOL(SPI时钟极性选择位),CPHA( SPI时钟相位选择位)控制主/从机传输格式。对于本实验,可以忽略这些位的影响,但是在使用一些其他SPI器件时,必须根据从器件数据手册的要求,对SPI数据的传输顺序,SPI的时钟极性,及SPI的时钟相位进行正确的设置。
4 一些SPI的应用系统,由于硬件的设计并不是很合理,所以有时SPI通信不正常(传输数据出错,或其他情况),你可以试着降低SPI总线的传输速率,或者调节一些SPI时钟极性及相位,以使传输稳定。
文章出处:互联网
ISP
SPI
JTAG三者区别详解
SPI:Serial
Peripheral
Interface串行外围接口
ISP:In
Syesterm
Program在系统编程
AT89S52在系统编程(ISP)所用到的几个引脚定义:
SPI简述(Serial
Peripheral
Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。由于SPI系统总线一共只需3~4位数据线和控制即可实现与具有SPI总线接口功能的各种I/O器件进行接口,而扩展并行总线则需要8根数据线、8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。由此可见,在MCS51系列等不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。
SPI四线制引脚功能定义
小结:AT89S52单片机的FLASH烧写程序接口是ISP,所用为烧写程序小板上主控芯片AVR的SPI通信引脚MOSI、MISO、SCLK。
什么是JTAG
JTAG是一个通信标准,用于计算机和单片机进行实时快速通讯。
AVR的JTAG功能(只有部分型号才有)使得AVR的调试工作非常简单,可以通过JTAG接口对Flash、EEPROM、熔丝位和锁定位进行编程。
使用AVR
studio软件和JTAG硬件(
AVR
JTAG编程器,AVR
JTAG仿真器)可以进行程序下载(编程)和程序在线调试。
JTAG接口有四个引脚。以JTAG的术语来说,这些引脚组成了测试访问端口TAP。这些引脚是:
·TMS:测试模式选择。此引脚用来实现TAP控制器各个状态之间的切换。
·TCK:测试时钟。JTAG *** 作是与TCK同步的。
·TDI:测试数据输入--需要移位到指令寄存器或数据寄存器(扫描链)的串行输入数据。
·TDO:测试数据输出--自指令寄存器或数据寄存器串行移出的数据。
什么是ISP
ISP是一种通用的程序下载方式,AVR单片机都有ISP下载接口。可以通过ISP下载线或者STK500把程序下载到单片机中。
ISP下载线成本低廉,制作简单,一个并口ISP下载线只需几十元即可得到。开发工具成本低也是AVR单片机的优势之一。
JTAG与ISP的区别和联系
区别:JTAG可以调试程序,而ISP只能下载程序。
联系:同作为AVR程序下载工具,都能把程序从电脑下载到单片机中。都能对芯片的熔丝位和锁定位进行编程。
JTAG调试与普通软件仿真的区别和联系
联系:都可以在计算机调试程序终端看到程序的运行效果,都可以设置断点,单步运行,进入循环,跳出循环,连续运行等 *** 作。还能实时观察各寄存器的值,IO口状态等。
区别:软件仿真,用的是计算机来模仿单片机运行,不是全真的环境,很多时候会出现偏差甚至错误。而用JTAG在线调试,程序本身在单片机内运行,完全真实的硬件环境,更准确的反映程序运行的实际情况,有助于大型程序的调试。
首先NSS配置为硬件的话,相应引脚的GPIO应配置为第二功能;
其次确认SPI外设的时钟和使能设置;
还有主从机的配置;
如果STM32是主机,当需要读取从机数据的时候,必须有主机发起,由主机来提供总线时钟。
如果要发数据,发出数据后返回值不关心,但还是要读取以清空寄存器;
如果要收数据,不关心发出什么数据,可以发0X00或0XFF;
还取决于从机的控制协议;
比如从机受到0X55后会返回2个字节数据;用下面的函数
LTD0=spi1_sr_byte(0x55) ; // 发送指令,不关心收什么
LTD1=spi1_sr_byte(0x00) ; // 接收数据,不关心发什么
LTD2=spi1_sr_byte(0x00) ; // 接收数据,不关心发什么
下面是个例程
unsigned char spi1_sr_byte(unsigned char ltd) // LTD是要发送的数据
{
unsigned char ltrd; // 接收的数据
while(!SPI1_TXE); // 等待发送完毕
while(SPI1_BUSY); // 等待总线忙
SPI1->DR=(unsigned short)ltd; // 发数
while(!SPI1_RXNE);// 等待接收完成
ltrd=SPI1->DR; //收数 注意SPI总线的特点,每次发一个数才能收一个数。
return ltrd;
}
利用ADD7705采样数据,与51单片机通讯,硬件连接是:P31提供数据脉冲,与AD7705的SCLK管脚连接,P30与DOUT,DIN相连,并接上拉电阻,利用51串口方式1工作,程序如下:#include#includesbitAD7705_DATA=P3^0;//AD7705input&outputdatasbitAD7705_CLK=P3^1;//AD7705CLKsbitAD7705_DRDY=P2^7;//AD7705datareadysbitDIS=P4^1;unsignedintdata_out;unsignedcharrearrange(unsignedchara){unsignedchari,b;b=a&0x01;for(i=1;i>1;b=b+(a&0x01);}return(b);}//voidDelayms(unsignedcharms)//relayms{unsignedchari;while(ms--){for(i=0;i<124;i++);}}//voidWriteToReg_ADC(unsignedchara){SBUF=a;while(!TI);TI=0;}//voidAD7705_Init(){WriteToReg_ADC(0x04);//write0x20tocommunicationregistertochoosechannel0//andclockregisterforthenextonetowriteWriteToReg_ADC(0x20);//0x04toCLR,24576MHz,50HzWriteToReg_ADC(0x08);//write0x10tocommunicationregistertochoosechannel0//andsetupregisterforthenextonetowriteWriteToReg_ADC(0x62);//0x44,1,bufferoff,FSYNC=0,andself-calibration}//unsignedintReadWord(){unsignedcharhigh8,low8;unsignedintout;while(AD7705_DRDY);SCON=0x10;while(!RI);high8=SBUF;RI=0;while(!RI);low8=SBUF;REN=0;out=rearrange(high8);out=out<<8;out=out+rearrange(low8);return(out);}main(){AD7705_Init();while(1){DIS=0;Delayms(80);DIS=1;Delayms(80);WriteToReg_ADC(0x1c);data_out=ReadWord();}}问题是,AD7705好象没有工作,管脚DRDY一直处于高电平,希望高手指点先谢谢了!问题补充:串口方式是采用方式0,是我打错了,这个程序是最先的现在改为AD7705的复位引脚和片选引脚都用I/O口控制,采用模拟时钟,不过结果还是那样,DRDY没有低电平,AD7705似乎没有工作:我来帮他解答满意回答检举|2008-11-1419:17151串口方式1有停止位,每次发送一个字节,将产生至少九个时钟脉冲。而AD7705每发送或接收一个字节只需要八个时钟脉冲(多一个就乱了),多发的脉冲将破坏通信的同步,应该用串口方式0吧。2强烈建议用一个I/O口线去控制AD7705的RESET脚,每当通信没能同步时,发一个复位脉冲即可实现同步通信。3P30与DOUT,DIN相连”,如果一切正常的话,这样设计挺好的;但是,一旦通信没能同步,出现AD7705与51单片机同时往数据线上发数据,引起冲突。可能会损害芯片。建议DOUT、DIN分开走线(尽管线多了点)。我是用AVR单片机做的AD7705测试程序,AVR直接有SPI接口。
STM32的SPI在低温环境下初始化失败,可能是由以下原因引起的:
硬件问题:低温会导致电子元件的参数发生变化,例如晶体管的门电压会发生变化、电容器的电容值会发生变化等,这可能导致SPI的时序出现问题,从而导致初始化失败。
时钟问题:时钟频率是SPI通信的关键参数之一,低温可能导致时钟频率发生变化,从而影响SPI通信的正常进行。
软件问题:SPI的初始化过程中需要设置多个参数,例如时钟极性、时钟相位、数据位数等,不当的设置可能导致初始化失败。在低温环境下,由于硬件参数的变化,有些原本正常的设置可能会导致初始化失败。
为了解决这个问题,可以采取以下措施:
检查硬件连接是否正确,确保时序满足SPI的要求。
使用更高精度的时钟,确保时钟频率的精度和稳定性。
重新设置SPI的初始化参数,根据实际情况进行调整,确保SPI的设置在低温环境下也能正常工作。
在低温环境下进行温度测试和时序分析,找出问题的具体原因,再进行相应的优化和调整。
以上就是关于stc15f2k60s2单片机spi通信问题为什么写入的寄存器keil仿真时读出来和写入的不一样呢全部的内容,包括:stc15f2k60s2单片机spi通信问题为什么写入的寄存器keil仿真时读出来和写入的不一样呢、什么是USB sbi协议规范、求ISP SPI JTAG 三者区别 详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)