目录

前言

一、理论部分

基本概念

SCI数据格式

管脚定义

逻辑电平规定

波特率

二、F28335配置RS232串口通讯

DSP28335SCI控制框图

寄存器配置

三、验证

验证思路

试验环境

关键程序

试验结果


前言

串口通信(Serial Communication)是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,串口通信的接口标准有很多,有 RS-232C、RS-232、RS-422A、RS-485 等。常用的就是 RS-232 和 RS-485。

本文第一部分以RS232C作理论的简要介绍

第二部分和第三部分,用DSP28335实现RS232串行通讯并验证。

文末有完整代码压缩包链接,有需要自取。

一、理论部分

基本概念

串行通信接口(SCI,Serial Communication Interface)是一个双线异步串行端口,通常称为UART。接收和发送有各自独立的信号线(TXD和RXD),但不是同一个时钟。SCI模块支持CPU和使用标准非归零(NRZ)格式的其他异步外围设备之间的数字通信。SCI接收器和发射器各有一个16级深度FIFO,用于减少服务开销,并且各有各自独立的启用位和中断位。二者可以独立操作用于半双工通信,或同时用于全双工通信。

  1. 数据格式通常采用NRZ:标准不归零传号/空号数据格式。不归零的含义是:用正、负电平表示二进制,不适用零电平。传号和空号分别表示1和0。
  2. 比特率可通过16位波特选择寄存器编程为不同速度。
  3. F28335有三个SCI接口。
  4. 具有通信速率自动检测和FIFO缓冲功能。

SCI数据格式

SCI数据的接收和发送都是以下格式:

  • 1个起始位   One start bit
  • 1~8个数据位   One to eight data bits
  • 1个校验位(可选)An even/odd parity bit (optional)
  • 1至2个停止位。 One or two stop bits

用于区分地址和数据的额外位(仅限地址位模式)An extra bit to distinguish addresses from data (address-bit mode only)。

数据的基本单位称为字符,长度为1至8位。数据的每个字符都包含一个起始位、一个或两个停止位以及可选的奇偶校验位和地址位格式化。带有格式信息的数据字符称为帧,下图为从数据手册截图。

  1. 奇校验:若字符数据位1的数目是偶数,校验位应为1,如果1的数目是奇数,校验位应为0

  2. 偶校验:若字符数据位1的数目是偶数,校验位应为0,如果1的数目是奇数,校验位应为1

管脚定义

RS-232C 是 EIA(美国电子工业协会)1969 年修订RS-232C 标准。RS-232C定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准。

RS-232C 常用接口是 9 针的连接器接口,简称DB9。现使用的多数都是 DB9 接口。如下图

RS232C接口定义如下表,我们通常并不会每根管脚都使用到,一般只用到TXD、RXD和SGND三个管脚,也就是2、3和5号管脚。其他管脚为数据流量控制等功能所使用。

逻辑电平规定

RS-232C 对逻辑电平也做了规定:

在 TXD 和 RXD 数据线上

  1. 逻辑 1 为-3~-15V 的电压

  2. 逻辑 0 为 3~15V 的电压

由此可见,RS-232C 是用正负电压来表示逻辑状态,与晶体管-晶体管逻辑集成电路(TTL)以高低电平表示逻辑状态的规定正好相反。而我们dsp使用的是 TTL 电平,所以要实现dsp与计算机的串口通信,需要进行TTL与 RS-232C 电平转换,使用的电平转换芯片是 SP3232。3代表3.3V.

另外,笔记本上没有RS232接口,故完成dsp和PC上位机的通讯还需要一根RS232转USB线。

波特率

波特率baud:单位时间传输的位数

波特率计算公式:

BRR为16位波特值

SCI Asynchronous Baud为SCI异步通讯波特率

请注意,上述公式仅适用于以下情况:1≤ BRR≤ 65535.

二、F28335配置RS232串口通讯

DSP28335SCI控制框图

tip:参照控制框图查看寄存器的配置会易于理解。

寄存器配置

1、发送器TX及相关寄存器

SCITXBUF:发送数据缓冲器,存放要发送的数据(由CPU装载)

TXSHF:发送移位寄存器,从SCITXBUF接收要发送的数据,当TXENA使能时(即SCICTL1.1位使能),将数据一位一位地移位到SCITXD引脚上,每次移1位数据。

2、接收器RX及相关寄存器

SCIRXBUF:接收数据缓冲器,接收CPU要读取的数据

RXSHF:接收移位寄存器,从SCIRXD引脚一位一位接收数据

来自远程处理器的数据加载到寄存器RXSHF中,若RXENA闭合(即SCICTL1.0位使能),则一位一位送入寄存器SCIRXBUF和SCIRXEMU,我们读取SCIRXBUF就可以获取数据。

对应代码

 SciaRegs.SCICTL1.all =0x0003;  //SCI控制寄存器1, 发送和接收使能,其他功能不启用

3、可编程波特率产生器

/*SCI波特率设置*/scibaud=37500000/(8*baud)-1;scihbaud=scibaud>>8;scilbaud=scibaud&0xff;

baud为波特率,将变量scibaud赋给Ti提供的波特值寄存器

 SciaRegs.SCIHBAUD    =scihbaud;  // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD    =scilbaud;

4、数据存储映射的控制和状态寄存器

控制寄存器:可以设置数据格式、通信速率

状态寄存器:可以查看发送和接收的状态

SciaRegs.SCICCR.all =0x0007;   //SCI通信控制寄存器, 1个停止位,8个数据位,没有奇偶校验功能,空闲线协议,屏蔽自测模式

具体配置看数据手册即可。

5、两个外部引脚

SCITXD位SCI数据发送引脚;SCIRXD为SCI数据接收引脚。两个引脚为多路复用引脚。直接调用TI提供的初始化函数InitSciaGpio()。

InitSciaGpio()函数介绍如下:

完整配置代码见第三部分

三、验证

验证思路

上位机和dsp通讯,上位机向dsp发送字符,dsp接收上位机发送的字符并原封不动返回给上位机,上位机打印dsp发送的数据。

试验环境

  1. 上位机×1
  2. DSP开发板(TMS320F28335PGFA)×1
  3. 配套仿真器×1
  4. RS232转USB接口×1
  5. 软件:串口调试助手×1

关键程序

寄存器配置

#include "uart.h"void UARTa_Init(Uint32 baud)
{unsigned char scihbaud=0;unsigned char scilbaud=0;Uint16 scibaud=0;/*SCI波特率设置*/scibaud=37500000/(8*baud)-1;scihbaud=scibaud>>8;scilbaud=scibaud&0xff;EALLOW;SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // 打开SCI-A时钟EDIS;InitSciaGpio();/*SCI相关工作模式设置*///Initalize the SCI FIFOSciaRegs.SCIFFTX.all=0xE040;//SCI发送FIFO寄存器SciaRegs.SCIFFRX.all=0x204f;//SCI接收FIFO寄存器SciaRegs.SCIFFCT.all=0x0;//SCI FIFO控制寄存器// Note: Clocks were turned on to the SCIA peripheral// in the InitSysCtrl() functionSciaRegs.SCICCR.all =0x0007;   //SCI通信控制寄存器, 1个停止位,8个数据位,没有奇偶校验功能,空闲线协议,屏蔽自测模式SciaRegs.SCICTL1.all =0x0003;  //SCI控制寄存器1, 发送和接收使能,其他功能不启用// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.all =0x0003; //SCI控制寄存器2,使能发送和接收中断SciaRegs.SCIHBAUD    =scihbaud;  // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD    =scilbaud;
//  SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop backSciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset,取消软件复位SW RESET}/*编写发送函数*/
// Transmit a character from the SCI'
void UARTa_SendByte(int a)
{while (SciaRegs.SCIFFTX.bit.TXFFST != 0);//当发送FIFO有数据,还未发送完,则等待。直到FIFO没有数据,即发送完毕,再执行下面语句。SciaRegs.SCITXBUF=a;//当发送FIFO发送完毕,给SCITXBUF写入要发送的数据
}void UARTa_SendString(char * msg)
{int i=0;while(msg[i] != '\0'){UARTa_SendByte(msg[i]);i++;}
}

主函数

void main()
{char *msg;Uint16 ReceivedChar=0;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();LED_Init();TIM0_Init(150,200000);//200msUARTa_Init(4800);//通信双方的波特率要尽可能一致。msg = "Hello World!\r\n";UARTa_SendString(msg);msg = "请输入字符,dsp将会返回您输入的字符并在窗口显示!\r\n";UARTa_SendString(msg);while(1){msg = "\r\n输入字符: ";UARTa_SendString(msg);// Wait for inc characterwhile(SciaRegs.SCIFFRX.bit.RXFFST !=1);// 接收x个字符之后,执行读取操作,这里的x为1// Get characterReceivedChar = SciaRegs.SCIRXBUF.all;// Echo character backmsg = "  Dsp接收到您发送的字符: ";UARTa_SendString(msg);//发送提示语UARTa_SendByte(ReceivedChar);//将从上位机接收到的字符,原封不动发送回上位机DELAY_US(1000);}
}

试验结果

使用仿真器将开发板和电脑连接,并且使用USB 转232串口线将开发板串口与电脑连接,烧录程序,点击仿真调试,打开串口调试助手。

这里数据格式配置为8个数据位,1个停止位,无奇偶校验位。波特率设置为4800。

在上位机输入“无咎”20220906,可以看到dsp接收到上位机发送过来的数据,并将数据返回给上位机打印出来。

至此,验证成功。

希望对大家有所帮助。

完整的代码及工程文件,有需要自取:https://download.csdn.net/download/Jaspercai/86510488

DSP28335的RS232串口通讯试验相关推荐

  1. java天平数据,java RS232串口通讯(电子天平数据抓取)

    写这篇文章是为了记录RS232串口通讯,当时有个央企项目里需要实现自动抓取RS232串口数据,需要支持主要浏览器:Chrome,Firefox,IE8以上等.看了很多有关rs232的资料和也找了很多方 ...

  2. RS232串口通讯的那些事

    串口通讯这件事,说简单吧,2 3 5 三根线搞明白了就ok.说复杂吧,这里边的段子就多了.俺刚参加工作时,主要的工作就是搞这个的.那几年,连接了上百种不同型号的设备. RS232串口通讯程序的开发 基 ...

  3. php 串口通讯,PHP使用RS232串口通讯传送文件的应用演示

    // -------------------------------------------------------------------------- // File name   : RS232 ...

  4. linux如何调用rs232串口,linux下的rs232串口通讯c代码

    补充: 针口的叫"公头",有孔的叫"母头",如果没有两个母头的串口线的话,可以使用虚拟机,两个虚拟机之间采用"管道"的方式连接,可达到几乎和 ...

  5. php打开rs232,PHP在RS232串口通讯协议的应用演示[测试环境WinXP/PHP5.1.4]

    二.测试环境的构建: 1. 参考上面的<(一)串行通讯电缆的制作>,首先把两台电脑通过串口连结起来. 当然,你也完全可以这么操作一台电脑上面的两个串口,而不需要两台电脑:如果你有两个串口的 ...

  6. 单片机RS232串口通信试验

    利用串口调试助手(stc-isp)像单片机发送一个U,单片机进行判断,收到u则返回T,绿灯亮,否则返回F,红灯亮.代码如下. 使用proteus仿真结果如下 发送U返回T 发送 R返回F 仿真图 实验 ...

  7. 树莓派3B+:串口通讯

    树莓派3B+:串口通讯 背景 一.树莓派串口通讯是什么? 二.使用步骤 1.树莓派串口知识 2.查看当前的串口使用及映射关系 3.释放串口ttyAMA0 3.代码控制串口,验证是否可用 三.minic ...

  8. 工业级无线路由器串口通讯配置

    工业级无线路由器的串口通讯如何配置?本文以佰马工业级无线路由器BMR500为例,介绍无线路由器在4G模式下,下位机通过BMR500的串口如何与服务器进行远程通讯. 工业级无线路由器串口通讯介绍 串口通 ...

  9. smart-UPS RT 15000串口通讯线的线序测量

    前言 现场有一台APC(施耐德) smart-UPS RT 15000的UPS, 上面有DB9的RS232串口通讯口(用来和超级终端通讯,设置设备通讯参数),开始没问厂家,直接用RS232转USB的公 ...

  10. serialport通过usb通讯_IOT串口通讯-RS232/RS485

    串口 串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口.串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位 ...

最新文章

  1. 2018-3-12论文(非结构网络中有价值信息数据挖掘)笔记二-----作者:关联规则的非结构网络有价值信息数据挖掘(看不懂,看不懂)
  2. 第四条:通过私有构造器强化不可实例化的能力
  3. IP中继如何工作?——Vecloud
  4. html在线拖拽环绕,jQuery实现html元素拖拽
  5. 高低温湿热试验箱使用的注意事项
  6. java连接数据库的5种方式
  7. 【免费看电视-直接看电视方法】打开电视发现看啥都要Vip?解决方法:
  8. 【2020模拟赛day6】B. 选择人员
  9. git设置 mergetool为kdiff3
  10. 高并发数据缓存池(基于EHcache)
  11. react调度时间原理_使用React,Twilio和Cosmic JS构建约会调度程序
  12. 固态硬盘对于linux提升,固态硬盘在Linux系统下提升使用率妙方
  13. ps切片成html形式怎么用,PS教程:Photoshop切片工具把效果图转成网页格式 PS入门综合 - PS学习网...
  14. 电信高清语音服务器,电信VoLTE高清通话来了,来电秒接通、打电话4G不掉线!...
  15. WPF---RenderTransform图形旋转,缩放
  16. 使用高德地图2D/3D SDK添加海量描点Marker以及视图中显示所有描点、我的定位添加呼吸动画
  17. 如何理解shared library
  18. 微信小程序——video视频全屏播放
  19. MySQL数据库层优化基本概念
  20. 30-基于单片机的跑马灯设计

热门文章

  1. 重启打印机服务bat命令
  2. 1000套微信小程序源码模板分享下载,各种类型任意选择
  3. 史上最全的微信小程序代码大全分享
  4. Java前端技术汇总
  5. c语言谭浩强第五版 第五章习题14 牛顿迭代法求方程根
  6. springboot快速搭建图书管理系统
  7. 计算机网络第四章总结
  8. springboot+jsp校园美食餐厅订餐系统
  9. VJC中机器人走多边形转向角度、速度、时间数值的计算
  10. C语言库函数的哈希表使用方法