完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用查询的方式进行串口收发,对uart1写了两个函数分别为单字节收和单字节发,代码如下。
void sendbyteuart1(char s){ while(!R8_UART1_LSR&RB_LSR_TX_ALL_EMP); R8_UART1_THR=s; while(!R8_UART1_LSR&RB_LSR_TX_ALL_EMP); } char readbyteuart1(){ char t=0; while(!R8_UART1_LSR&RB_LSR_DATA_RDY); t=R8_UART1_RBR; return t; } 此时在main函数中使用sendbyteuart1(readbyteuart1())回环会导致上电即开始无限发送,而从电脑发给ch579的数据虽然也能被回环回来但是会淹没在无效数据中,判断是RB_LSR_DATA_RDY标志位不起作用。 当我把接收函数的代码改成: char readbyteuart1(){ char t=0; while(R8_UART1_RFC==0); t=R8_UART1_RBR; return t; } 使用接收fifo的计数判断时,一切正常,可以正常回环,不会产生无效数据。 请问是ch579的RB_LSR_DATA_RDY标志位不能用吗?还是它有一些其他的使用逻辑? 另外还发现在连续发送长串数据时会造成数据丢失,需要隔几个数据加一次delay才能完整发送,是因为发送函数的RB_LSR_TX_ALL_EMP标志位也无效导致的,还是因为连续发送波特率误差累计导致的? |
|
相关推荐
2个回答
|
|
单字节首发的接口在evt里面uart1.c里面有,可以参考
|
|
|
|
例程确实是用的fifo计数来做的,但是为什么这个标志位不行呢?
|
|
|
|
只有小组成员才能发言,加入小组>>
296 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2768 浏览 2 评论
2275 浏览 1 评论
请问CH573怎么接到linux系统?能通过CH343串口模块接入吗?
364浏览 3评论
450浏览 2评论
973浏览 2评论
388浏览 2评论
248浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-11 20:17 , Processed in 1.163945 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191