野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11394|回复: 5

串口通信时丢失第一位数据或者第一个数据出错

[复制链接]
发表于 2016-5-5 11:33:13 | 显示全部楼层 |阅读模式
#include "includes.h"
int fputc(int ch,FILE *f)//重定义printf函数
{
                USART_SendData(USART1,(uint8_t) ch);
                while (USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);        //判断标志位检测是否发送完毕
                return (ch);
}
int fgetc(FILE *f)//重定义scanf函数
{
                while (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET);
                return (USART_ReceiveData(USART1));
}
void uart1_init()
        {
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);//开启uart1和GPIOA的时钟
                /*GPIO配置*/
                GPIO_InitTypeDef        gpio_pin9_init;
                gpio_pin9_init.GPIO_Mode=GPIO_Mode_AF_PP;//tx初始化为推挽复用模式
                gpio_pin9_init.GPIO_Pin=GPIO_Pin_9;
                gpio_pin9_init.GPIO_Speed=GPIO_Speed_50MHz;
                GPIO_Init(GPIOA,&gpio_pin9_init);
                GPIO_InitTypeDef        gpio_pin10_init;
                gpio_pin10_init.GPIO_Mode=GPIO_Mode_IN_FLOATING;//rx初始化为浮空输入模式
                gpio_pin10_init.GPIO_Pin=GPIO_Pin_10;
                gpio_pin10_init.GPIO_Speed=GPIO_Speed_50MHz;
                GPIO_Init(GPIOA,&gpio_pin10_init);
                /*串口的配置*/
                USART_InitTypeDef usart_init;//初始化串口
                usart_init.USART_BaudRate=9600;
                usart_init.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
                usart_init.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//全双工需要发送接收都开启
                usart_init.USART_Parity=USART_Parity_No;
                usart_init.USART_StopBits=USART_StopBits_1;
                usart_init.USART_WordLength=USART_WordLength_8b;
                USART_Init(USART1,&usart_init);
                USART_Cmd(USART1,ENABLE);
        }
int main()
        {
                uart1_init();
                unsigned int n;
                while(1)
                        {
                                scanf("%d",&n);
                                printf("%d",n);
                        }
        }

第一个数据出错

第一个数据出错

总是丢失第一位数据

总是丢失第一位数据
回复

使用道具 举报

发表于 2016-5-5 15:28:18 来自手机 | 显示全部楼层
你可以看看配套usart例程里的程序,加上一个语句就可以解决丢字问题了
回复 支持 反对

使用道具 举报

发表于 2016-5-5 15:40:40 | 显示全部楼层
我也遇到,经常(不是每次)丢失第一个数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-5 15:55:19 | 显示全部楼层
b_wolf 发表于 2016-5-5 15:28
你可以看看配套usart例程里的程序,加上一个语句就可以解决丢字问题了

我加上了,可是还是丢失,那该怎么办呢,还有我发现,如果,把int改为char型,就没有这种情况了,这是怎么回事呢?还请解答
回复 支持 反对

使用道具 举报

发表于 2016-5-5 16:28:58 来自手机 | 显示全部楼层
这个我也没有遇到过,没有办法给你准确回答,但是我看代码中重定义printf那一块,里面有一个强制类型转换,会不会是因为他的原因,或者可以考虑用中断
回复 支持 反对

使用道具 举报

发表于 2016-5-5 16:45:09 | 显示全部楼层
在初始化时先发送一个字节,后面的就不会再丢失了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 04:39 , Processed in 0.029729 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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