IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> DSP28335的RS232串口通讯试验 -> 正文阅读

[嵌入式]DSP28335的RS232串口通讯试验

目录

前言

一、理论部分

基本概念

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 FIFO
	SciaRegs.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() function
	SciaRegs.SCICCR.all =0x0007;   //SCI通信控制寄存器, 1个停止位,8个数据位,没有奇偶校验功能,空闲线协议,屏蔽自测模式
	SciaRegs.SCICTL1.all =0x0003;  //SCI控制寄存器1, 发送和接收使能,其他功能不启用
								   // Disable RX ERR, SLEEP, TXWAKE
	SciaRegs.SCICTL2.all =0x0003; //SCI控制寄存器2,使能发送和接收中断
	SciaRegs.SCIHBAUD    =scihbaud;  // 9600 baud @LSPCLK = 37.5MHz.
	SciaRegs.SCILBAUD    =scilbaud;
//	SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back
	SciaRegs.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);//200ms
	UARTa_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 character
		while(SciaRegs.SCIFFRX.bit.RXFFST !=1);// 接收x个字符之后,执行读取操作,这里的x为1
		// Get character
		ReceivedChar = SciaRegs.SCIRXBUF.all;

		// Echo character back
		msg = "  Dsp接收到您发送的字符: ";
		UARTa_SendString(msg);//发送提示语
		UARTa_SendByte(ReceivedChar);//将从上位机接收到的字符,原封不动发送回上位机

		DELAY_US(1000);
	}
}

试验结果

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

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

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

至此,验证成功。

希望对大家有所帮助。

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:09:57  更:2022-09-15 02:12:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:01:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码