OpenEdv-开源电子网

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

双串口收发问题,缓冲区满后从0位继续接收问题

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-9-18
在线时间
1 小时
发表于 2015-7-15 11:35:53 | 显示全部楼层 |阅读模式
5金钱
STM32串口1接收到一串数据存到缓冲区中,然后赋给串口2的发送缓冲区,串口2发送出去;当串口1接收缓冲区满后从缓冲区头部开始接收;串口2发送缓冲区满后也同样从缓冲区头部继续接收串口1接收缓冲区赋值过来的数据。求助大神有没有类似的程序可以借鉴的。谢谢。

云游在代码的长河中,游出自己的风格。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-16 00:14:05 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7140
金钱
7140
注册时间
2015-1-23
在线时间
106 小时
发表于 2015-7-16 09:11:28 | 显示全部楼层
void USART1_IRQHandler(void)
{

if(USART_GetITStatus(USART1, USART_IT_RXNE)) //查看接收中断标志位
{
TIM_Cmd(TIM2, DISABLE);
TIM2_count= TIM_GetCounter(TIM2);
if(TIM2_count>=19)
{
UART1_buf_cursor=0;
}

UART1_recv_buf[UART1_buf_cursor++] = (u8)USART_ReceiveData(USART1);

if(UART1_buf_cursor>=UART1_BUF_UNM-1) //防止超出边界
{
UART1_buf_cursor=UART1_BUF_UNM-1;
}

TIM_SetCounter(TIM2, 0); 
TIM_Cmd(TIM2, ENABLE);

}

}



TIM2_count=TIM_GetCounter(TIM2); //串口1接收数据的计时器
if(TIM2_count>=20) //3.5T
{
TIM_Cmd(TIM2, DISABLE);
UART1_data_recv_flag=1; //串口1接收标志置一     两个串口共用一个定时器, 用的时候要注意, 标定用完后关标定程序, 两个软件只能有一个运行
TIM_SetCounter(TIM2, 19); //70   一定要小于 TIM2_count>=10
}
回复

使用道具 举报

1

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-16
在线时间
3 小时
发表于 2015-7-16 11:18:44 | 显示全部楼层
用一个循环FIFO即可,串口1接收到数据后只负责往FIFO写(更新写指针),串口2只负责从FIFO读(更新读指针),然后发送出去,当读写指针相等时,FIFO空....
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-9-18
在线时间
1 小时
 楼主| 发表于 2015-7-16 12:04:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,有没有好一点的解决办法?保证数据不会丢失就行,每次传送的数据都是不定长的。
云游在代码的长河中,游出自己的风格。。。
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-9-18
在线时间
1 小时
 楼主| 发表于 2015-7-16 15:14:40 | 显示全部楼层
回复【4楼】joe_knight:
---------------------------------
O(∩_∩)O谢谢
云游在代码的长河中,游出自己的风格。。。
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-9-18
在线时间
1 小时
 楼主| 发表于 2015-7-16 15:15:00 | 显示全部楼层
回复【3楼】东方赤那:
---------------------------------
O(∩_∩)O谢谢
云游在代码的长河中,游出自己的风格。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-16 23:04:35 | 显示全部楼层
回复【5楼】杨慕斯语:
---------------------------------
超时法,我们的蓝牙模块,gps模块等的例程都是用超时法做的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7140
金钱
7140
注册时间
2015-1-23
在线时间
106 小时
发表于 2015-7-18 08:18:28 | 显示全部楼层
回复【7楼】杨慕斯语:
---------------------------------
开一个定时器,  判断两个字节之间的时间是否超时,   超时就判断为一串数据接收完,      再来数据从头接收
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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