关于串口中断发送的问题。

关于串口中断发送的问题。,第1张

//创建一个串口通讯

SerialPort CurrentPort = null

CurrentPort = new SerialPort()

CurrentPort.ReadBufferSize = 128

CurrentPort.PortName = comName //端口号

CurrentPort.BaudRate = bandRate//比特率

CurrentPort.Parity =parity//奇偶校验

CurrentPort.StopBits = stop//停止位

CurrentPort.DataBits = databit//数据

CurrentPort.ReadTimeout = 1000//读超时,即在1000内未读到数据就引起超时异常

//绑定数据接收事件,因为发送是被动的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理

CurrentPort.DataReceived += Sp_DataReceived

CurrentPort.Open()

定义一个变量 byte[] receiveStr

//绑定的事件处理函数

private static void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

{

SerialPort sp = sender as SerialPort

if (sp == null)

return

byte[] readBuffer = new byte[sp.ReadBufferSize]

sp.Read(readBuffer, 0, readBuffer.Length)

//赋值

receiveStr=readBuffer//当然你可以通过转换将byte[]转换为字符串。

}

//你要求的按钮事件可以这么写

private void button1_Click(object sender, EventArgs e)

{

if(receiveStr!=null)

{

变量 xxx=receiveStr

}

}

当MCU接收到GPS发来的一个

字节

时触发中断,进入中断程序,(在进入中断程序时串口照样接收,中断程序是往串口

缓存

区读的数据,并且读数据时相当快的,永远不用担心还在读的时候数据被新来的给覆盖了)将该接收的字节提取出放在一个

缓冲区

内,缓冲区是你自己

定义

的一个

数组

字符串

,谁你喜好,如你所述GPS是每隔1秒发送一次数据的,此时你可以在

主程序

中设计当0.5秒没有接收到GPS所发的数据时,就将缓冲区内的数据读出处理,并清空缓冲区,这样其实中断程序只管

接收数据

主函数

只管处理数据,两不相冲。

中断向量错了:#pragma interrupt_handler uart0_rx_isr:12改为:#pragma interrupt_handler uart0_rx_isr:19 #pragma interrupt_handler uart0_tx_isr:14改为:#pragma interrupt_handler uart0_rx_isr:21


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7790028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存