OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3049|回复: 2

求助原子哥使用USART串口通信发送字符串出现第一个字符丢失是什么原因,如何解决

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-7-3
在线时间
5 小时
发表于 2019-7-16 22:09:27 | 显示全部楼层 |阅读模式
2金钱
void send_str(USART_TypeDef* USARTx,char *str)
{
        char i=0;
        while(str[i]!='\0'){
                USART_ClearFlag(USARTx,USART_FLAG_TC);
                USART_SendData(USARTx,str[i]);
                while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);
                i++;
        }
}

int main(void)
{
        char roll_position[100] = "command ; q 0 -8192";
        char roll_speed[100] = "command ; v 0 1365";
       
        delay_init(168);
       
        My_USART1_init();
        My_USART2_init();
       
        send_str(USART1 , roll_position);
        delay_ms(100);
        send_str(USART1 , roll_speed);
       
}

函数和主程序是这样,串口助手收到的如图,多出来的换行也不知道为什么

捕获.PNG

最佳答案

查看完整内容[请看2#楼]

把这两行代码掉个个: USART_SendData(USARTx,str); while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-7-16 22:09:28 | 显示全部楼层
把这两行代码掉个个:
    USART_SendData(USARTx,str[i]);
     while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-7-3
在线时间
5 小时
 楼主| 发表于 2019-7-17 11:37:17 | 显示全部楼层
搞明白了,需要先读状态才行,改成下面的代码就可以了
while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);
USART_SendData(USARTx,str);
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 10:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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