野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23162|回复: 4

请教输入usart输入打印问题

[复制链接]
发表于 2013-12-2 21:23:44 | 显示全部楼层 |阅读模式
我写了个usart输入的数据打印函数,为什么打印回来的会是5位数的数字啊
uint8_t USART_Scanf(uint32_t value)
{
        uint32_t index = 0;
        uint32_t tmp[5] = {0, 0,0,0,0};
        while (index < 5)
        {
                while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                tmp[index++] = (USART_ReceiveData(USART1));
                USART_SendData(USART3, tmp[index]);
                if ((tmp[index - 1] < 0x30) || (tmp[index - 1] > 0x39))
                {
                printf("\n\rPlease enter valid number between 0 and 9");
                index--;
                }
        }
        index = (tmp[4] - 0x30) + ((tmp[3] - 0x30) * 10+(tmp[2] - 0x30) *100+(tmp[1] - 0x30) *1000+(tmp[0] - 0x30)*10000);
        if (index > value)
        {
            printf("\n\rPlease enter valid number between 0 and %d", value);
            return 0xFF;
        }
        return index;
}



回复

使用道具 举报

发表于 2013-12-2 22:05:01 | 显示全部楼层
你的整个函数要么是打印“ Please enter valid number between 0 and 9 ”
要么打印“ printf("\n\rPlease enter valid number between 0 and %d", value);” 这个值就是value的值,就是你调用USART_Scanf时输入的形参。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 00:36:46 | 显示全部楼层
tmp[index++] = (USART_ReceiveData(USART1));
USART_SendData(USART3, tmp[index]);
我是指这两句,每接收一次数据都将此值通过串口打印到超级终端
回复 支持 反对

使用道具 举报

发表于 2013-12-3 14:11:48 | 显示全部楼层
检查一下index向下溢出的问题
回复 支持 反对

使用道具 举报

发表于 2014-2-22 20:49:12 | 显示全部楼层
被楼主的ID吸引了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 16:46 , Processed in 0.025035 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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