SP2338串口扩展芯片在汽车行驶记录仪中的应用

2006-05-23来源: 汽车电子网关键字:单片机  记录  SP2338
在由单片机组成的汽车行驶记录仪中,为了适应不同用户的需要,该记录仪需要配置串口打印、与上位机通信串口以及与GPS通信接口等三个以上(含三个)串口,直接利用单片机的功能无法满足这一需要。利用一片SP2338则可以很好地解决这个问题。

  1、SP2338简介

SP2338串口扩展芯片能将普通的51系列单片机的一个串口扩展为三个独立的全双工串口,并且三个串口的波特率达到了9600bps。SP2338采用通用的协议1个起始位,8个数据位,1个停止位),同时,该芯片在与单片机相连时接口也非常简单。

SP2338共有四个串口,一个母串口,三个子串口,它们都是全双工的串行通信口,允许同时接收和发送数据。母串口与需要扩展的51单片机的串口相连,子串口与其他串口设备相连,这样就实现了只有一个串口的单片机可与三个串口设备相连。SP2338有两根发送地址线,两根接收地址线,用以选择发送串口和接收串口,见图1。

         

当单片机要向串口设备发送数据时,其工作过程是:

1)先向SP2338的串口地址线ADRI0、ADRI1送地址信号(ADRI0、ADRI1=00子串口0,ADRI0、ADRI1=01子串口1,ADRO0、ADRO1=10子串口2);再向与自已相连的母串口的通信线上送数据;

2)SP2338的母串口收到单片机串口送来的数据后就根据ADRI0和ADRI1的状态,把数据送往相应的子串口;

3)该子串口再把数据送往相连的串口设备。

当串口设备向单片机发送数据时,其工作过程是:

1)SP2338的某个子串口从串口设备接收到数据时,送给母串口;

2)SP2338的母串口把该数据再送给单片机串口,同时在ADRO0和ADRO1线上送出子串口的地址;

3)单片机根据SP2338接收地址线ADRO0、ADRO1上的信号判定出由哪个串口设备发出的。

由于SP2338的每个串口都有自己的发送缓冲区和接收缓冲区,因此扩展后的三个串口就可以完全独立地同时通信,就好像单片机同时拥有三个串口似的,若一个单片机有两个串口,那么配上两片SP2338就可以扩展到6个串口。

SP2338每个子串口的波特率都可以达到9600bps,SP2338工作时需要配一个晶振,该晶振FOSC的频率与母串口的波特率有如下关系:

K母=1920*Fosc,

与子串口波特率的关系如下:

K子=480*Fosc,

因此,如果子串口采用9600波特率,根据以上公式,Fosc=20MHz。而母串口的波特率必须达到388400bps。这样与SP2338的母串口相连的单片机串口的波特率达到388400bps,若单片机采用非11。0592M的工作晶振,则波特率会有偏差,不过,SP2338允许波特率误差为2。5%。在我研制的汽车行驶记录仪中,系统采用的是24MHz的工作晶振,用定时器2作波特率发生器,并设:RCAP2H=0xFF,RCAP2L=0xEC,可以正常通信。

由于某些单片机采用其他规格的晶振工作,达不到这么高的波特率,想把母串口的波特率降下来,则不仅仅是把单片机的波特率降下来,还要根据上面的公式,重新计算Fosc,把SP2338的工作晶振也换成合适的才行。

  2、SP2338在汽车行驶记录仪中应用

  1)图2是硬件连接逻辑图

由于SP2338是单片机串口与其他串口设备的转接者,因此相对于单片机来说,SP2338是Tx3与单片机的RXDM相连,SP2338的Rx3要与单片机的TXDM相连。

  
  2)软件实现

由于SP2338一上电就能正常工作,不需要任何初始化操作,因此不需要在软件中初始化。而SP2338的母串口与三个子串口是循回连续交换数据的,因此,

①当SP2338从串口设备接收到数据通过母串口送到单片机的串口线上时,单片机应及时把数据读走,并且判定ADRO0和ADRO1的状态,否则容易造成数据的错误。因此在单片机上要用串口中断。

②当单片机向外部串口设备发送数据时,一定要按照先向子串口0发送一个字节的数据,再向子串口1发送一个字节的数据,再向子串口2发送一个字节的数据,再执行一条NOP命令的时序发送数据,依此循环。若外部的串口设备没有三个,则分别如下处理:

A.若上位机只需向一个子串口发送数据,先向该串口发送一个字节数据,再执行4条‘NOP’命令,其后再向该子串口发送第二个数据。

B.若上位机只需向两个子串口发送数据,则可以分别向两个串口发送一个字节的数据,再执行3条NOP命令,再分别向这两个串口发送下一字节的数据。

串口中断流程图3所示。

           

  3、结语

我在研制汽车行驶记录仪中使用了一片SP2338,把单片机一个串口扩展成三个全双工的串口,使汽车行驶记录仪可以与串行打印机、上位机和GPS等串口设备进行通信,符合国家GBT/19056-2003《汽车行驶记录仪》标准的相关规定,取得了满意的效果。

  参考文献

1徐爱钧,彭秀华。单片机高级语言C51应用程序设计。电子工业出版社,1998

2马忠梅等。单片机的C语言应用程序设计。北京航空航天大学出版社,2000年修订版

关键字:单片机  记录  SP2338

编辑: 引用地址:https://news.eeworld.com.cn/designarticles/car/200605/4043.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:汽车导航系统的DC/DC转换器选择指南
下一篇:完整的GPS+蓝牙接收系统解决方案

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

两年专利纠纷 这家国内原厂最终胜诉台湾企业

分公司及设计团队,并服务于家用电器、无人机、无线充电、电子烟、电动工具、无线通信、个人健康护理、传感测量、智能家居、电机控制、电池电源管理等不同领域客户。未来,深圳中微仍将务实于芯片的自主研发,须臾不松懈,坚持科技兴国战略的责任和信念,坚持“做强中国芯,服务全世界”,共同推动中国“芯”闪耀世界舞台。
发表于 2019-09-13

STM32F030F4P6单片机由外部时钟改为内部时钟

static void SetSysClock(void){  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;    /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/  /* Enable HSE */    //  RCC->CR |= ((uint32_t)RCC_CR_HSEON);//使用外部8M时钟 RCC->CR |= ((uint32_t)RCC_CR_HSION
发表于 2019-09-09
STM32F030F4P6单片机由外部时钟改为内部时钟

单片机中Sprint函数

;};char s2={'T','Y','x'};sprintf(str,"%.*s%.*s",2,s1,3,s2);sprintf(s, "%*.*f", 10, 2, 3.1415926); 8、sprintf(s, "%p", &i);可以打印出i的地址上面的语句相当于sprintf(s, "%0*x", 2 * sizeof(void *), &i);9、sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(s)求字符串的长度单片机中Sprint
发表于 2019-09-07

单片机串口发送和接受程序

ResendDataLen = 0 ;/************************************************************************函 数 名: 串口初始化功能描述: STC10L08XE 单片机串口初始化函数返回函数: none其他说明: none**************************************************************************/void UartIni(void){TMOD = 0x20; // 设置 T1 为波特率发生器SCON = 0x50; // 0101,0000 8位数据位, 无奇偶校验PCON = 0x00
发表于 2019-09-07

简单的PCB制作——单片机的最小系统

单片机的最小系统:1、芯片:AT89C51   2、晶振电路(相当于心脏)12MHZ。3、复位(g高电平复位,低电平复位)制作简单的PCB:(一)、新建PCB工程,原理库和PCB,然后保存,可以修改名字但是后缀名不变,可以修改地址,但是三个地址保存在同一个文件夹中。(二)、在空白处右击,opinion--->document opinion,修改纸张大小。(三)、找系统的默认库文件(点开右侧的library之后,在点开libraries可以安装库文件。(四)、在总工程上右击,点“add existing  to  project” 将自己的库加载到工程文件中,同时要保证自己的库与所新建
发表于 2019-09-07
简单的PCB制作——单片机的最小系统

利用STM32单片机串口发送字符串

最近由于要调试一个SMS发送短信的模块,该模块需要发送一系列AT指令,且需要字符串发送,但是STM32官方给的usart.c中并没有直接发送字符串的函数,因此写了一个发送字符串的函数。其实发送字符串的本质还是发送一个个字符,所以只需在字符串结束标志之前,循环发送字符即可。不罗嗦,上程序。//程序功能:利用串口发送一个字符串// 参数:USARTx USART编号 可取 USART1、USART2、USART3、USART4、 USART5(STM32F103ZET6)str 需要发送的字符串#include “stm32f10x.h”void Usart_SendString(USART_TypeDef* USARTx,char *
发表于 2019-09-07

小广播

换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved