野火电子论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 136|回复: 6

[经验\资料分享] 小白的思考,串口接收处理

[复制链接]
发表于 2019-11-1 10:24:03 | 显示全部楼层 |阅读模式
while(1)
        {
                ch = getchar();       
        printf("%c\n",ch);
                /* 光电信号 */
                if( GDB_Scan(GPIOB,GPIO_Pin_10) == GDB_OFF )
                 {
           printf("\r\n PB10_OFF \r\n");                         
                  /* 光源触发 */
                  PG0_OFF;
想的是怎样一直执行循环,当串口接收到PC的数据时去处理数据,再循环。现在问题时,直接卡在ch = getchar();        执行这一步,要是不收到数据,就一直等待while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);。每次只有接收一次数据才循环一次,和我想达到的效果不一样。问了一下别人,给的参考是表驱动,小白,不懂,暂时只能在别人的程序上参考,然后调试,看会出现哪些问题和效果。有人说用中断,这个暂时还没有什么好的思路。现在只能求助,看看怎么解决这个问题。
回复

使用道具 举报

发表于 2019-11-8 17:56:58 | 显示全部楼层
邹毅_p9i96 发表于 2019-11-8 11:06
这是一种,但是暂时不会,还有超时判断后续会衍生其他问题,就没有往这方面去做

超时是底层驱动必须要考虑的问题,因为底层特别涉及到外设数据发送之类的操作,必须要等的,但是又不能死等,所以很多协议里面都有超时机制。
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-6 14:12:41 | 显示全部楼层
一般会做一个超时的,比如2ms,超过这个时间没有接收到数据就退出了。
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-1 21:37:41 | 显示全部楼层
基本没人用这个,都用的中端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-4 09:34:28 | 显示全部楼层
初晴sama 发表于 2019-11-1 21:37
基本没人用这个,都用的中端

我把ch=getchar()换成ch =  USART_ReceiveData(USART1),然后问题就解决了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-8 11:06:34 | 显示全部楼层
candylife9 发表于 2019-11-6 14:12
一般会做一个超时的,比如2ms,超过这个时间没有接收到数据就退出了。

这是一种,但是暂时不会,还有超时判断后续会衍生其他问题,就没有往这方面去做
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-8 22:14:05 | 显示全部楼层
嗯,谢谢,扯远了,我小白,c才开始看,考虑那些太多了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

野火电子公众号

手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 大学生ARM嵌入式2群

GMT+8, 2019-11-19 23:18 , Processed in 0.118622 second(s), 28 queries , Gzip On.

野火电子论坛

© 2014-2016 www.firebbs.cn

快速回复 返回顶部 返回列表