⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs232.c

📁 基于ARM应用的源码
💻 C
字号:
#include "RS232.h"

WORD	g_bRS232IRQEnabled = FALSE;					// 是否允许 RS232 发送及接收中断
BYTE	g_byRS232TXBuffer[RS232_BUFFER_LENGTH];		// 发送缓冲区
BYTE	g_byRS232RXBuffer[RS232_BUFFER_LENGTH];		// 接收缓冲区

int		g_nRS232TXCount = 0;						// 当前发送缓冲区中的数据长度
int		g_nRS232RXCount = 0;						// 当前接收缓冲区中的数据长度

ISRProc		g_pRS232RXIRQProc = NULL;				// RS232 接收中断处理过程
ISRProc		g_pRS232TXIRQProc = NULL;				// RS232 接收中断处理过程

//-----------------------------------------------------------------------------
//	初始化串行通讯口
//		nBaud		波特率(1200, 2400, 4800, 9600, 115200, ...)
//		chParity	奇偶校验方式
//					'N': 无奇偶校验		'E': 偶校验		'O': 奇校验0
//					'1': 始终为1		'0': 始终为0
//		nDataBits	数据位(5, 7, 8)
//		nStopBits	停止位(1, 2)
//-----------------------------------------------------------------------------
void	InitRS232(int nBaud, char chParity, int nDataBits, int nStopBits)
{
	unsigned	uCmd = 0x02;	// 接收中断

	// 校验方式
	switch(chParity)
	{
	case 'O':	uCmd |= 0x20;	break;		// 奇校验
	case 'E':	uCmd |= 0x28;	break;		// 偶校验
	case '1':	uCmd |= 0x30;	break;		// Parity forced/checked as 1
	case '0':	uCmd |= 0x38;	break;		// Parity forced/checked as 0
	case 'N':	// 无校验
	default:
		break;
	}

	if (nStopBits==2)	// 两位停止位
		uCmd |= 0x40;

	// 数据位
	switch(nDataBits)
	{
	case 5:
		break;
	case 6:
		uCmd |= 0x01;
		break;
	case 7:
		uCmd |= 0x02;
		break;
	case 8:
	default:
		uCmd |= 0x03;
		break;
	}

	rULCON0	= uCmd;		// 奇偶校验、数据位、停止位
	rUCON0	= 0x205;	// 发送缓冲区空脉冲中断、接收缓冲区接收数据脉冲中断
						// 禁止超时中断、禁止错误中断
//	rUFCON0	= 0x01;		// 启用 FIFO
	rUFCON0	= 0x00;		// 禁用 FIFO
	rUMCON0	= 0x00;		// 禁用流控
	rUBRDIV0 = (unsigned)(MCLK/(nBaud<<4) + 0.5) - 1;

	g_nRS232RXCount = 0;
	g_nRS232TXCount = 0;
}

//-----------------------------------------------------------------------------
//	通过 RS232 串口读取一个字节
//-----------------------------------------------------------------------------
BYTE ReceiveByte()
{
	return	(BYTE)rURXH0;
}

//-----------------------------------------------------------------------------
//	通过 RS232 串口发送一个字节
//-----------------------------------------------------------------------------
void SendByte(unsigned char byData)
{
	while(!(rUTRSTAT0 & 0x2))	;	// 等待发送保持寄存器空
	rUTXH0 = byData;				// 向发送保持寄存器写数据
}	

//-----------------------------------------------------------------------------
//	通过 RS232 串口发送字符串
//-----------------------------------------------------------------------------
void	SendString(char *szFormat, ...)
{
	va_list		vl;
	char		szBuffer[200];
	char		*pString = szBuffer;
	int			i = 0;

	va_start(vl, szFormat);
	vsprintf(szBuffer, szFormat, vl);
	va_end(vl);

	while((*pString) && (i<200))
	{
		while(!(rUTRSTAT0 & 0x2))	;		// 等待发送保持寄存器空
		WrUTXH0(szBuffer[i]);				// 向发送保持寄存器写数据
		pString ++;
		i ++;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -