OpenEdv-开源电子网

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

STM32ZET6串口发送与接收问题

[复制链接]

20

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-5-15
在线时间
54 小时
发表于 2016-3-31 20:01:15 | 显示全部楼层 |阅读模式
30金钱
本帖最后由 saiyqx 于 2016-3-31 20:07 编辑

RT。。目前做的一个项目使用STM32ZET6通过CH340USB转串口与上位机进行通讯,有个问题想请教下论坛的高手,我现在可以发送也可以接收数据,但数据经常性的丢失,发送的数据也不是很多20组含9个元素(数据为8位)的数组,而接收上位机数据时也会出现丢失现象。。试着通过串口助手来调试,发现串口助手如果自动发送数据的间隔低于210ms的话,板子就会死掉。。无法接收。。项目对数据的实时性有点要求。。想请教下有没有比较好的方法。。十分感谢。。

发送函数如下:
/***************************************************************
**函数名称:Send_Data(u8 Channel)                              **
**函数功能: 通道1检测                                          **
**    参数:Channel         所要检测的通道号                  **
**            flag_Success    发射成功标志位                      **
**            again             数据重复发送标志位                  **
***************************************************************/
void Send_Data(u8 Channel)
{
    u8 j=0;
    u8 i=0;
    flag_Success = 0;                  
    again = 0;
    USART_RX_BUF[0] = 0;
    while(flag_Success == 0)
    {   
        if(again == 0)               
        {
            for(j=0;j<9;j++)                                                
            {
                USART_SendData(USART1,table_Channle_data[Channel][j]);         //向串口1发送通道1的数据
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);    //等待发送结束
                delay_ms(2);
            }
            USART_RX_STA=0;
            again = 1;
        }
        delay_ms(5);
        if(USART_RX_BUF[0] == 0x01)
            flag_Success = 1;
        if(USART_RX_BUF[0] == 0x02)
        {   
            flag_Success = 0;
            again = 0;                        
        }
    }   
}

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

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-3-31 20:35:12 | 显示全部楼层
给点时间,把要求说详细点, 这种问题应该很好解决,
回复

使用道具 举报

20

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-5-15
在线时间
54 小时
 楼主| 发表于 2016-3-31 20:48:53 | 显示全部楼层
likunxue 发表于 2016-3-31 20:35
给点时间,把要求说详细点, 这种问题应该很好解决,

基本上就是32这边做数据采集然后发送给上位机。。上位机接收到数据后,判断数据是否正确,然后给下位机一个反馈,32再根据反馈来做出重新发送数据或者继续发送下一组数据。
发送内容是一个20组元素个数为9(8位数据)的数组。。目前调试的话,出现了数据丢失,上位机有时候收不到32的数据,32有时候收不到上位机的数据。32正常发送两次数据的间隔大概为  200ms。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-1 22:23:11 | 显示全部楼层
做协议吧,直接裸传容易出问题的。
回复

使用道具 举报

20

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-5-15
在线时间
54 小时
 楼主| 发表于 2016-4-10 21:19:01 | 显示全部楼层
正点原子 发表于 2016-4-1 22:23
做协议吧,直接裸传容易出问题的。

嗯啊。。。正在着手做协议,添加CRC校验。。。
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-3-29
在线时间
6 小时
发表于 2016-4-10 23:30:22 | 显示全部楼层
saiyqx 发表于 2016-4-10 21:19
嗯啊。。。正在着手做协议,添加CRC校验。。。

我也想做这部分的,想通过modbus协议来做,不是你有没有什么好想法
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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