完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在串口发送和接收时,总是挂起,在发送里加入了ES=0,发送完ES=1;无效果,还是出现挂起现象。
void Send_Data_To_UART0 (UINT8 c) { ES=0; ti = 0; SBUF = c; while(TI==0); ES=1; } |
|
相关推荐
1个回答
|
|
您可以尝试以下方法来解决串口同时接收和发送总是挂起的问题:
1. 在发送数据之前,检查TI位是否已经为0,如果不为0,等待它变为0再发送。 2. 在接收数据时,检查RI位是否已经为0,如果不为0,等待它变为0再接收。 3. 设置接收和发送中断,通过中断来处理数据的接收和发送,这样可以避免挂起的现象。 4. 在发送完数据之后,加入延时,以确保数据已经被传输完毕。 下面是一个简单的例子,以帮助您解决这个问题: /* 发送一个字节到UART0 */ void Send_Data_To_UART0(UINT8 c){ ES = 0; // 关闭串口0中断 while(!TI); // 等待发送完成 TI = 0; SBUF = c; // 发送数据 // 延时确保数据已经被发送完毕 for(UINT16 i=0;i<2000;i++); ES = 1; // 打开串口0中断 } /* 接收一个字节到UART0 */ UINT8 Receive_Data_From_UART0(void){ UINT8 c; ES = 0; // 关闭串口0中断 while(!RI); // 等待接收完成 RI = 0; c = SBUF; // 读取数据 ES = 1; // 打开串口0中断 return c; } |
|
|
|
只有小组成员才能发言,加入小组>>
3322 浏览 9 评论
3000 浏览 16 评论
3497 浏览 1 评论
9070 浏览 16 评论
4090 浏览 18 评论
1191浏览 3评论
613浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2341浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 20:23 , Processed in 1.048441 second(s), Total 46, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号