打印
[Kinetis]

UART连续接收字符

[复制链接]
2003|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
603133791|  楼主 | 2015-11-20 18:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 603133791 于 2015-11-20 18:35 编辑

使用的是MK60DN512VLL10

while(1)
    {
      if(uart_getchar_present(UART3_BASE_PTR)){
        while(1){
          tmp = uart_getchar(UART3_BASE_PTR);
          if(tmp != '\0')
            uart_putchar(UART3_BASE_PTR, tmp);
          else
            break;
        }
      }
      delay();
}

我在while加了delay,延时1s左右。进行连续字符接收。会出现如下情况:
连续发多个字符,第一次返回只有一个字符,后面就会正常。

相关帖子

沙发
舒斯特尔| | 2015-11-20 22:06 | 只看该作者
这个真的很奇怪啊,没有遇到过呢

使用特权

评论回复
板凳
西门扫雪| | 2015-11-21 17:41 | 只看该作者
发送和接收这么写感觉怪怪

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2015-11-23 10:45 | 只看该作者
你如果不加这句:
if(uart_getchar_present(UART3_BASE_PTR)){
结果是否正常?

使用特权

评论回复
5
IversonCar| | 2015-11-23 17:04 | 只看该作者
这个很奇怪,每次都这样吗

使用特权

评论回复
6
跟屁虫| | 2015-11-23 20:41 | 只看该作者
你那if语句有什么用呢?

使用特权

评论回复
7
603133791|  楼主 | 2015-11-24 10:19 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-11-23 10:45
你如果不加这句:
if(uart_getchar_present(UART3_BASE_PTR)){
结果是否正常?

去掉了确实正常了。
/********************************************************************/
/*
* Check to see if a character has been received
*
* Parameters:
*  channel      UART channel to check for a character
*
* Return values:
*  0       No character received
*  1       Character has been received
*/
int uart_getchar_present (UART_MemMapPtr channel)
{
    return (UART_S1_REG(channel) & UART_S1_RDRF_MASK);
}
/********************************************************************/

按说明,这个函数是检测是否有接收字符的,我这样有问题?

使用特权

评论回复
8
603133791|  楼主 | 2015-11-24 10:20 | 只看该作者
跟屁虫 发表于 2015-11-23 20:41
你那if语句有什么用呢?

if(uart_getchar_present(UART3_BASE_PTR)){
这一句吗?

用来检测是否有接收到字符。

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-11-24 13:34 | 只看该作者
603133791 发表于 2015-11-24 10:20
if(uart_getchar_present(UART3_BASE_PTR)){
这一句吗?

我认为,就算你要判断,也是用while在那里等,而不是if,因为如果你再执行其他的语句的时候,已经接受到了数据,你再判断,可能就有问题了。

使用特权

评论回复
10
DreamofOven| | 2015-11-24 17:07 | 只看该作者
是不是收和发都是查询容易丢数啊

使用特权

评论回复
11
ccw1986| | 2015-11-24 19:58 | 只看该作者
原来是语句写的有问题

使用特权

评论回复
12
跟屁虫| | 2015-11-26 15:42 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-11-24 13:34
我认为,就算你要判断,也是用while在那里等,而不是if,因为如果你再执行其他的语句的时候,已经接受到 ...

同意,要么就用中断的方式来写

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

40

帖子

0

粉丝