OpenEdv-开源电子网

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

关于STM32串口只能接收3个字节的BUG求助

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-7-1
在线时间
3 小时
发表于 2016-7-1 09:46:39 | 显示全部楼层 |阅读模式
2金钱
写了一个串口程序,串口1接收上位机的命令指令,然后再通过单片机串口2传给外部模块,外部模块再通过串口2返回数据,返回的数据通过串口1给上位机。上位机传送的数据包括指令和非指令,当给予指令时,外部模块传回相应的指令反馈,当为非指令时,将输入原封不动地传回。出现的问题是,中间传递模块和外部模块在电脑上通讯都没有问题,已连接到一起就存在问题。返回的数据总是3个字节,当超过3个字节时,后面的覆盖前面的内容。例如:发送Get(非指令)给单片机,单片机传送给外部模块,外部模块传送回的是Get,但是如果是Getand,就只会显示Gnd,三个字节。接收程序如下。
void USART2_IRQHandler(void)                       
{       
         u8 Res1;
       
                if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
                {
                        Res1 =USART_ReceiveData(USART2);//(USART1->DR);                                       
                        USART_SendData(USART1,Res1);
//                        delay_us(5);
//                        Data3[pointer3]=Res;
//                        pointer3++;
//                        TIM5->CNT=0x00;
//                        TIM_Cmd(TIM5, ENABLE);
//                        LED1_ON(); ///////////oìμÆ
//                        LED2_OFF();
                }       
       
}

最佳答案

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

各位已经发现问题所在了,同时开了2个定时器,可能是芯片处理速度不行,造成的,现在关掉一个,已经不出现了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-7-1
在线时间
3 小时
 楼主| 发表于 2016-7-1 09:46:40 | 显示全部楼层
各位已经发现问题所在了,同时开了2个定时器,可能是芯片处理速度不行,造成的,现在关掉一个,已经不出现了。
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-7-1 09:58:24 | 显示全部楼层
中断函数中还用delay?
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-7-1
在线时间
3 小时
 楼主| 发表于 2016-7-1 10:56:00 | 显示全部楼层
365mcu 发表于 2016-7-1 09:58
中断函数中还用delay?

delay 注释掉了 ,是为了查看delay多少后是否丢失数据,事实证明delay过多,造成丢失更多数据,所以怀疑是接收太慢,或者发送模块太快
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2016-7-1 11:45:15 | 显示全部楼层
stm32_pioneer 发表于 2016-7-1 10:56
delay 注释掉了 ,是为了查看delay多少后是否丢失数据,事实证明delay过多,造成丢失更多数据,所以怀疑 ...

你把中断里只接收数据,其他逻辑全部拿出去在住循环里面判断你看还会丢失数据不
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-7-1
在线时间
3 小时
 楼主| 发表于 2016-7-1 13:18:43 | 显示全部楼层
365mcu 发表于 2016-7-1 11:45
你把中断里只接收数据,其他逻辑全部拿出去在住循环里面判断你看还会丢失数据不

依然丢数据,依然只是3个字节。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-7-1
在线时间
3 小时
 楼主| 发表于 2016-7-1 13:20:58 | 显示全部楼层
365mcu 发表于 2016-7-1 11:45
你把中断里只接收数据,其他逻辑全部拿出去在住循环里面判断你看还会丢失数据不

我在中断中只是储存,然后仿真,查看变量的值,存储的数组显示,依然数据丢失,只显示第一个最后一个和倒数第二个数据,其余不显示。
回复

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-7-1 14:44:47 | 显示全部楼层
先把简单的串口通讯调通吧,别上程序逻辑
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-7-1
在线时间
3 小时
 楼主| 发表于 2016-7-1 19:10:28 | 显示全部楼层
不吃鱼的老鼠 发表于 2016-7-1 14:44
先把简单的串口通讯调通吧,别上程序逻辑

说过了程序调通了,和电脑通讯完全没有问题,模块和电脑通讯也没有问题,只是2个连在一起就有问题。
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-1 19:20:08 | 显示全部楼层
你2个通讯的比特率一样么,除了通讯,别的功能还在正常运行么。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2016-7-1
在线时间
3 小时
 楼主| 发表于 2016-7-1 20:15:28 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-1 19:20
你2个通讯的比特率一样么,除了通讯,别的功能还在正常运行么。

波特率相通,除了通讯,还开了定时器。
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-7-1 20:52:41 | 显示全部楼层
接收中断不要再发送了,拿到外边去发数据
我有故事,你有酒吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 08:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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