OpenEdv-开源电子网

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

向大神求助,串口助手给STM32f103发送5字节,能接收,但向串口助手回发时只显示最后一个字节。

[复制链接]

1

主题

12

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-9-6
在线时间
7 小时
发表于 2019-10-16 09:54:17 | 显示全部楼层 |阅读模式
5金钱
问题描述:串口助手给STM32f103的串口1发送5个字节,能正常接收,如果用printf可以正常输出接收数据,但是如果将接收数据再发回串口助手,只显示最后一个字节。main.c如下:

#include "stm32f10x.h"
#include "usart.h"
u8 Receive_Buff[USART_REC_LENTH];//定义接收缓存器
u16 Receive_End_Flag=0;//定义接收完成标志
u16 Data_Num=0;//数据接收计数器
int main(void)
{               
        u8 i=0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        USART1_Init(115200);
        while(1)
        {
                if(Receive_End_Flag==1)
                        {
                       
                               
                                printf("Receive number:\r\n\r\n");
                                for(i=0;i<USART_REC_LENTH;i++)
                                {
                                        USART1->SR;
                                        USART_SendData(USART1,Receive_Buff[i]);
                                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC!=SET));
                                }
                                printf("\r\nTransimission over\r\n");
                                Receive_End_Flag=0;//发送结束标志清零
                                Data_Num=0;                                       
                        }
        }       
}


/**********分割线**********/
中断函数如下:
USART1_IRQHandler(void)
{
        u8 Res=0;
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
        {
                       
                Res=USART_ReceiveData(USART1);
                Receive_Buff[Data_Num]=Res;
                Data_Num=Data_Num+1;
                if(Data_Num==USART_REC_LENTH)
                {
                        Receive_End_Flag=1;//发送结束标志                               
                }
        }       
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
发表于 2019-10-16 13:39:54 | 显示全部楼层
两个可能性给你参考:
1、底层的接收缓存只设了1,这样发送是不受影响的,但接收到的字节会被后面的字节顶没了,你也可以去看看接收中断进了几次
2、接收设了中断接收还是什么连续接收?这玩意我不大了解了,我的代码一直用的rtthread,里面就有不同的接收模式,改了的话可能会只收到第一个字节,但不是你这种最后一个字节。
自在随心
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-9-6
在线时间
7 小时
 楼主| 发表于 2019-10-16 14:03:56 | 显示全部楼层
yuzeyuan1 发表于 2019-10-16 13:39
两个可能性给你参考:
1、底层的接收缓存只设了1,这样发送是不受影响的,但接收到的字节会被后面的字节顶 ...

发送和接收都是一次一个字符,接收用的中断,发送用的查询,现在接收没问题,中断次数也正常,就是发送不行。不管发几个数据都只显示最后一个。
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
922
金钱
922
注册时间
2018-7-18
在线时间
385 小时
发表于 2019-10-16 16:00:56 | 显示全部楼层
134.png 这一句是干嘛的?
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-9-6
在线时间
7 小时
 楼主| 发表于 2019-10-16 17:11:07 | 显示全部楼层
解决发送首字符都是问题,百度上学的,目的是将TC清零
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-9-6
在线时间
7 小时
 楼主| 发表于 2019-10-16 22:23:08 | 显示全部楼层
解决了,while(USART_GetFlagStatus(USART1,USART_FLAG_TC!=SET));这句括号错了,
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 05:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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