野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22540|回复: 10

如何在串口初始化时,把串口里发送数据寄存器的内容清零哦

[复制链接]
发表于 2014-4-8 13:52:20 | 显示全部楼层 |阅读模式
我向串口发送数据时,接收到的第一个数据前面总有一个@#符号,我想是不是我的串口发送数据寄存器里还有之前的数据没发完,所以我想在初始化时,把发送数据寄存器里的内容清零
回复

使用道具 举报

发表于 2014-4-8 13:55:40 | 显示全部楼层
串口程序的printf函数重定向有问题。
在fputc函数里,
USART_FLAG_TC  标志位改成  USART_FLAG_TXE

///重定向c库函数printf到USART1
int fputc(int ch, FILE *f)
{
                /* 发送一个字节数据到USART1 */
                USART_SendData(USART1, (uint8_t) ch);
               
                /* 等待发送完毕 */
                while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);               
        
                return (ch);
}


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-8 14:00:53 | 显示全部楼层
flyleaf 发表于 2014-4-8 13:55
串口程序的printf函数重定向有问题。
在fputc函数里,
把 USART_FLAG_TC  标志位改成  USART_FLAG_TXE

int fputc(int ch, FILE *f)
{
        /* 将Printf内容发往串口 */
        USART_SendData(USART1, (unsigned char) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
       
        return (ch);
}
我的是这样样定义的哦,总是第一个数据前有一些各种符号
回复 支持 反对

使用道具 举报

发表于 2014-4-8 14:01:51 | 显示全部楼层
nima 发表于 2014-4-8 14:00
int fputc(int ch, FILE *f)
{
        /* 将Printf内容发往串口 */

你用的程序帖上来我测试一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-8 14:14:41 | 显示全部楼层
flyleaf 发表于 2014-4-8 14:01
你用的程序帖上来我测试一下

char *b1="鄂A0000001";//车牌号
char *b2="大客车";//车牌号分类
char *b3="A12345678900";//机动车VIN号
char *b4="123456789012345678";//驾驶证号码
char *b5="正常";//速度判断
char *b6="无记录";//超速纪录

int main(void)
{
  USART1_Config();
  PrtSendData(b1,b2,b3,b4);
  for(;;)
   {
    }
}




//buf1:车牌号;buf2:车牌分类;buf3:机动车VIN号;buf4:驾驶证号码

void PrtSendData(char *buf1,char *buf2,char *buf3,char *buf4)
{
       
        send_string_uart1("\r\n机动车号牌号码:");       
        send_string_uart1(buf1);

        send_string_uart1("\r\n机动车号牌分类:");       
        send_string_uart1(buf2);

        send_string_uart1("\r\n机动车VIN号:");
        send_string_uart1(buf3);

        send_string_uart1("\r\n机动车驾驶证号码:\r\n");
        send_string_uart1(buf4);
       
}
回复 支持 反对

使用道具 举报

发表于 2014-4-8 14:16:11 | 显示全部楼层
nima 发表于 2014-4-8 14:14
char *b1="鄂A0000001";//车牌号
char *b2="大客车";//车牌号分类
char *b3="A12345678900";//机动车VI ...

send_string_uart1函数可能有问题吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-8 14:17:42 | 显示全部楼层
随风 发表于 2014-4-8 14:16
send_string_uart1函数可能有问题吧

void send_string_uart1(char * S)
{
    while(*S)
    {
        send_data_uart1(*S++);
    }

}
这是我的send_string_uart1
回复 支持 反对

使用道具 举报

发表于 2014-4-8 14:40:18 | 显示全部楼层
nima 发表于 2014-4-8 14:17
void send_string_uart1(char * S)
{
    while(*S)

。。。。。send_data_uart1呢?你给的这些函数都看不出问题
或者你先直接使用野火原来的例程测试一下会不会有这样的情况
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-8 14:44:33 | 显示全部楼层
随风 发表于 2014-4-8 14:40
。。。。。send_data_uart1呢?你给的这些函数都看不出问题
或者你先直接使用野火原来的例程测试一下会不 ...

void send_data_uart1(unsigned char Data)
{
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    USART_SendData(USART1, Data);
}


用例程到没有这种问题
回复 支持 反对

使用道具 举报

发表于 2014-4-8 15:53:13 | 显示全部楼层
nima 发表于 2014-4-8 14:44
void send_data_uart1(unsigned char Data)
{
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) ...

这两句反了吧
回复 支持 反对

使用道具 举报

发表于 2014-4-8 16:21:21 | 显示全部楼层
刀_口 发表于 2014-4-8 15:53
这两句反了吧

看得真细
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-1 15:21 , Processed in 0.035722 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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