社区
硬件/系统
帖子详情
串行通信:如何设置线路控制寄存器,设置奇偶校验位?
XiaoDingDangKM
2003-05-20 05:46:13
如何设置每一帧的奇偶校验位(第9位)?
同一问题的不同提法:如何设置线路控制寄存器某3位?
NT不允许用IN,OUT汇编指令,所以只有用高层函数,如何做呀?
...全文
315
8
打赏
收藏
串行通信:如何设置线路控制寄存器,设置奇偶校验位?
如何设置每一帧的奇偶校验位(第9位)? 同一问题的不同提法:如何设置线路控制寄存器某3位? NT不允许用IN,OUT汇编指令,所以只有用高层函数,如何做呀?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhaoweidf
2003-05-25
打赏
举报
回复
学习
RomanticProgrammer
2003-05-25
打赏
举报
回复
<RS-232和调制解调器高级通信编程》(人民邮电)
里面有用汇编实现地代码。
RomanticProgrammer
2003-05-25
打赏
举报
回复
<RS-232和调制解调器高级通信编程》(人民邮电)
里面有用汇编实现地代码。
NowCan
2003-05-21
打赏
举报
回复
我估计这个问题讨论结果是让你写驱动!
你的要求实际上和发送9数据位一样。
XiaoDingDangKM
2003-05-21
打赏
举报
回复
如何设置每一帧的奇偶校验位(第9位)?
同一问题的不同提法:如何设置线路控制寄存器某3位?
因为我要将奇偶位设置位1来告诉单片机群我(PC)发来的是地址,置为0说明我发来的是
数据。
NT不允许用IN,OUT汇编指令,所以只有用高层函数,如何做呀?
leejd
2003-05-20
打赏
举报
回复
设置STR和DTR
参考代码:
====================================
//串口初始化
bool __fastcall TComm::ComInit(AnsiString Port, int Baud, int Byte, int Parity,
int Stop, HANDLE& hCom)
{
DCB dcb;
COMMTIMEOUTS CommTimeOuts;
BOOL fSuccess;
//打开串口
hCom = CreateFile(Port.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);
if (hCom == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"打开通信设备文件失败!","错误",MB_OK);
return false;
}
if(!SetupComm(hCom,BLOCK_LENGTH,BLOCK_LENGTH))
{
MessageBox(NULL,"设置串行口内部输入、输出缓冲区长度操作异常!","错误",MB_OK);
return false;
}
if (!GetCommState(hCom, &dcb))
{
MessageBox(NULL,"获取通信设备控制块数据结构操作异常!","错误",MB_OK);
return false;
}
//以下五行参数用于三线连接,五线连接则忽略
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.BaudRate = Baud;
dcb.fBinary = 1 ;
dcb.fNull = 0 ;
dcb.ByteSize = Byte;
dcb.Parity = Parity;
dcb.StopBits = Stop;
dcb.fInX = FALSE;
dcb.fOutX = FALSE;
dcb.XonLim = BLOCK_LENGTH/4;
dcb.XoffLim = BLOCK_LENGTH/4;
if (!SetCommState(hCom, &dcb))
{
MessageBox(NULL,"设置通信设备控制块数据结构操作异常!","错误",MB_OK);
return false;
}
GetCommTimeouts(hCom, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts(hCom, &CommTimeOuts);
memset(&osRead, 0, sizeof(OVERLAPPED));
memset(&osWrite, 0, sizeof(OVERLAPPED));
osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
BufferOffset=0;
return true;
}
albeta
2003-05-20
打赏
举报
回复
MSDN光盘里头或者微软的MSDN里头有一篇关于串口编程的文章,去看看吧。
meCAD
2003-05-20
打赏
举报
回复
冲这第9位顶一下。
关注
STM32:STM32
串行通信
:STM32
串行通信
数据格式
设置
USART(通用同步/异步收发器):支持异步和同步通信,具有高级功能如DMA传输和硬件流
控制
。SPI(串行外设接口):用于高速同步
串行通信
,通常用于连接外部设备如闪存、ADC等。:用于低速同步
串行通信
,通常用于连接多个低速设备。
STM32:STM32
串行通信
:STM32
串行通信
基础理论
STM32微
控制
器系列中,USART(Universal Synchronous/Asynchronous Receiver/Transmitter)模块是用于实现
串行通信
的关键组件。它支持全双工通信,即同时发送和接收数据,且能够以同步或异步模式工作。USART模块通常用于与外部设备进行通信,如串行外设接口(SPI)、通用异步收发传输器(UART)等。
【微机原理与接口技术】学习笔记8
串行通信
和8250芯片
本章主要内容: §9.1
串行通信
的基本概念和EIA RS-232C串行口 并行通信 计算机与外部的信息交换称为通信,基本的通信方式有两种:并行通信,
串行通信
。 并行通信时,数据各
位
同时传送。例如,CPU通过8255A与外设交换数据时,就采用并行通信方式。这种方式传输数据的速度快,但使用的通信线多,如果要并行传送8
位
数据,需要用8根数据线,另外还要加上一些
控制
信号线。 随着传输距离的增加,通信线成本增加将成为突出的问题,而且传输的可靠性随着距离的增加而下降。 因此并行通信适用于近距离传送数据的场合。 串行通
STM32-串口通信波特率计算以及
寄存器
的配置详解
当通信
线路
上电平状态为1,表示当前
线路
上没有数据传送,串口处于空闲。1.起始
位
:先发出一个逻辑"0"的信号,表示传输字符的开始。2.数据
位
(8
位
或者9
位
):紧接着起始
位
之后,数据
位
的个数可以是4、5、6、7、8等,构成一个字符,从最低
位
开始传送。3.
奇偶校验
位
(第9
位
):数据
位
加上这一
位
后,使得"1"的
位
数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。可有可无,CRC校验更准确4.停止
位
(1,15,2
位
):它是一个字符数据的结束标志。可以是1
位
、1.5
位
、2
位
的高电平。
串行通信
及其接口技术---8251A
串行通信
和串行接口 微机与I/O设备的接口按照数据传输方式的不同可分为:并行接口和串行接口两种。
串行通信
:将数据分解成二进制
位
用一条信号线,一
位
一
位
顺序传输的方式。在传输过程中,每一
位
数据占据一个固定的时间长度。 串行总线通信过程的显著特点是:通信
线路
少,布线简便易行,施工方便,结构灵活,系统间协商协议,自由度及灵活度较高。由于数据线少,抗干扰能力强,所有适用于远程,费用低,适用于长距离,中低...
硬件/系统
2,644
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章