社区
其他硬件开发
帖子详情
如何实现串口中断接收数据???(急!!!)散分
jessiepan
2003-04-16 04:45:40
你好!
我现在在做开发,用的是Z-World公司推出的LP3500单板机,有没有哪位大虾也在用,或是曾经用过。可以切磋切磋吗?
我现在需要通过LP3500的板子上面的Serial Port与外界通讯,如何编程实现中断接收数据,是中断方式接收!!! 急。
我的联系方式:pan-guo@163.net 或 panguo@yeah.net
...全文
95
6
打赏
收藏
如何实现串口中断接收数据???(急!!!)散分
你好! 我现在在做开发,用的是Z-World公司推出的LP3500单板机,有没有哪位大虾也在用,或是曾经用过。可以切磋切磋吗? 我现在需要通过LP3500的板子上面的Serial Port与外界通讯,如何编程实现中断接收数据,是中断方式接收!!! 急。 我的联系方式:pan-guo@163.net 或 panguo@yeah.net
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
时间都去哪了呀
2003-05-26
打赏
举报
回复
LP3500的板子,不像在PC上的。得先把资料看清楚啊!!
whose
2003-05-11
打赏
举报
回复
接分快乐!!!
支持大散分!!!
大手散分,大气大气!!!
散分兄弟姐妹快快乐乐!!!!!
liangsiyuan
2003-05-09
打赏
举报
回复
我以前写的程序
**********************************************************************
void receive(void) interrupt 4 using 0
{
RI = 0; /*清接收中断标志*/
//这个地方可能有问题,怎么能够先接收数据再置XX为接收态?
//Stanley将SN65LBC184的处理改为在系统刚刚启动时设置为接收态;发送之前会改为发送态,发送完毕恢复为接收态
/*如果通信标志为0并且SN65LBC184为接受态,则做接收数据桢的初始化处理*/
if((!communicating) && (!RW) && (!received))
{
rs_buffer[0] = SBUF;
/*接收到前导字节,唤醒UART。
因为前导字节的发送要进行1--4次,所以要过滤掉前导字节*/
if((rs_buffer[0] == 0xfe) && (!RW))/**/
{
SM2 = 0; /*设置SM2=0以便接收*/
pointer = 0; /*设置缓冲区的头指针*/
}
/*接收到桢起始符0x68*/
else if((rs_buffer[0] == 0x68) && (!RW))
{
communicating = 1; /*设置通信标志为1*/
pointer = 0; /*设置缓冲区的头指针*/
}
return;
}
/*如果通信标志为1,则认为开始接收数据桢*/
else if(communicating && (!RW) && (SM2 == 0) && (!received))
{
/*指针超出了缓冲区的范围,停止通信*/
if(pointer > RS_BUFFER_COUNT)
{
uart_end(); /*结束通信*/
}
/*接收地址(6字节)+0x68(1字节)+控制码(1字节)+数据长度(1字节) = 9字节*/
else if(pointer < 9)
{
rs_buffer[pointer++] = SBUF;
}
/*接收数据(rs_buffer[8]中保存的字节个数)+CS(1字节)*/
else if (pointer < rs_buffer[8] + 10)
{
rs_buffer[pointer++] = SBUF;
}
/*接收桢结束标志0x16(1字节)*/
else if (pointer = rs_buffer[8] + 10)
{
rs_buffer[pointer] = SBUF;
if(!(rs_buffer[pointer] == 0x16))
uart_end(); /*结束通信*/
else
{
received = 1; /*接收完必*/
SM2 = 1;/*如果已接收完所有数据桢,则此次通信结束,置SM2=1准备下一次通信*/
}
}
/*pointer指向非法的区域,则放弃此桢
正常情况下是不会执行到这里的*/
else
{
uart_end(); /*结束通信*/
}
}
else
{
uart_end();
}
}
void send(void) interrupt 4 using 0
{
TI = 0; /*清发送中断标志位,并修改发送缓冲区当前位置指针*/
RW = 1; /*设置SN65LBC184为发送态*/
pointer++;
/*如果全部发送完毕则返回,否则发送一桢数据*/
if(pointer >= RS_BUFFER_COUNT) return;
else
{
TB8 = checkout_byte(rs_buffer[pointer]); /*设置数据桢标志*/
SBUF = rs_buffer[pointer]; /*启动发送*/
}
}
jessiepan
2003-04-17
打赏
举报
回复
谢谢上面的那位兄弟先!!!
我现在暂时先不管寄存器,移位那些东西,最主要的是如何在LP3500这块板子上做一个中断程序出来,对串口进行数据接收操作。
itofly
2003-04-16
打赏
举报
回复
▓▓▓▓▓ ▓▓▓ ▓▓▓▓
▓ ▓ ▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓▓▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓▓▓ ▓▓▓ ▓▓▓
▓▓▓▓▓ ▓▓▓ ▓▓▓▓
▓ ▓ ▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓▓▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓▓▓ ▓▓▓ ▓▓▓
▓▓▓▓▓ ▓▓▓ ▓▓▓▓
▓ ▓ ▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓ ▓
▓ ▓ ▓ ▓▓▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓ ▓ ▓ ▓
▓▓▓ ▓▓▓ ▓▓▓
rtm
2003-04-16
打赏
举报
回复
你是要写一个UART的driver吗?
如果你的单片机的数据寄存器是8位,要有移位,合并等操作。发送建议用轮询的方式。
这些操作可以放在中断服务程序里面。但是中断服务程序最好短一些。
最少应该有下列源文件:
test.c
ISR.asm
driver.c
把你写的函数放在driver.c里面,为了好修改,建议少用全局变量。
我再帮你看看。
wesenn@yahoo.com.cn
Qt 上位机串口编程 Modbus编程
串口(Serial Port),也称串行通讯接口(通常指COM口), 串口通信是指将数据一个比特一个比特地逐位进行传输的通信模式。其特点是通信线路简单,传送速度较慢。Qt串口通信是借助一个QSerialPort的对象来方便的对...
STM32_
串口中断
接收数据
_空闲中断
STM32_
串口中断
接收数据
_空闲中断
串口中断
接收数据
方式
单片机中断能够及时响应外部触发事件,在中断函数中处理外部事件,处理完成之后退回到中断点。中断服务函数应该能最快速的解决触发事件,快速退出中断,不宜在中断中处理复杂的运行算法。所以中断函数的编写尽量简单明了快速,下面以串口接收中断为例来说明中断处理函数的写法。 1.设置一个全局标志,触发中断之后在中断函数内把该标志设置为1,清除中断标志位,然后退出中断。在主函数内判断该标志...
hal库
实现
stm32
串口中断
接收数据
stm32cubemx设置中断和异步通信模式。 先设置并开启
串口中断
接收 该函数功能为开启串口接收中断,并指定存储
接收数据
的缓存区,设置从串口接收的数据大小。这里要特别注意,该函数只有从串口接收到Size个数据后才会返回,不然会阻塞。 HAL_UART_Receive_IT(&huart1, multiInOne.uartBuffer[0].rxdBuf, 5); 接收中断处理函数设置再次使能
串口中断
接收: void HAL_UART_RxCpltCallback(UART_HandleTypeD
STM32
串口中断
接收一帧数据
STM32
串口中断
接收一帧数据 IDLE即串口空闲中断,串口收到一帧数据后,发生的中断。比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。因为只有接收到一帧数据以后,你才可以判断这次收了几个字节和每个字节的内容是否符合协议要求。STM32单片机带IDLE中断,一帧数据结束后,产生IDLE中断,利用这个中断来接收不定长的数。(产生IDLE中断后 以帧为单位进行判断) 如何配置IDLE中断? RXNE中断和IDLE中断的区别 当接收到1个字节,
其他硬件开发
2,425
社区成员
4,282
社区内容
发帖
与我相关
我的任务
其他硬件开发
硬件/嵌入开发 其他硬件开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章