2618|12

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

GD32F 遇到串口发送数据偶发性卡死问题 [复制链接]

 

   代码如下

------

{

    volatile unsigned int i;  
    usart_interrupt_disable(USART0,USART_INT_RBNE);
    memset(g_CommData.Buffer,0x00,sizeof(DATA_COMM_PARA));
     
    for(i = 0; i < len; i++)
    {      
        TestTime =10;
        usart_data_transmit(USART0, *pbuf); 
        while(usart_flag_get(USART0, USART_FLAG_TC) == RESET );
        pbuf++;
    } 
    usart_interrupt_flag_clear(USART0,USART_INT_FLAG_RBNE);    
    usart_interrupt_enable(USART0,USART_INT_RBNE); 

}

  项目设备使用GD32F303CC芯片,启用了UART0,用上位机发数据给设备,

同时设备UART0回复上位机(回复400左右字节),发送数据频繁偶尔会出现UART0发送数据卡死现象,

停留一在while(usart_flag_get(USART0, USART_FLAG_TC) == RESET )中,不知道为何会卡死。大家是否有遇到一样的现象?

此帖出自GD32 MCU论坛

最新回复

新潮   详情 回复 发表于 2024-3-13 09:36
点赞 关注
 

回复
举报

7159

帖子

2

TA的资源

版主

沙发
 

发送的频率大概是多少?

此帖出自GD32 MCU论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
wangerxian 发表于 2024-3-11 13:52 发送的频率大概是多少?

发送频率我设置是115200,会跟这个有关吗?

此帖出自GD32 MCU论坛

点评

不是波特率,【发送数据频繁偶尔会出现UART0发送数据卡死现象】这里的发送数据频繁,是多频繁?  详情 回复 发表于 2024-3-11 14:01
 
 
 

回复

7159

帖子

2

TA的资源

版主

4
 
Edan12 发表于 2024-3-11 14:00 发送频率我设置是115200,会跟这个有关吗?

不是波特率,【发送数据频繁偶尔会出现UART0发送数据卡死现象】这里的发送数据频繁,是多频繁?

此帖出自GD32 MCU论坛

点评

一秒发好几次数据给设备,我发得有点快的,理论上,我不下发了,设备会分两次次回我共2帧数据,发一帧后,再发一帧,大概是一秒发出一帧。  详情 回复 发表于 2024-3-11 14:20
噢,上位机下发数据频率对吗?平时正常来说是一问一答,但在测试的时候,我是有意发得很快,类似于压力测试,可能设备在会上位机的时候,我同时也在用上位机发数据给设备。  详情 回复 发表于 2024-3-11 14:04
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

5
 
wangerxian 发表于 2024-3-11 14:01 不是波特率,【发送数据频繁偶尔会出现UART0发送数据卡死现象】这里的发送数据频繁,是多频繁?

噢,上位机下发数据频率对吗?平时正常来说是一问一答,但在测试的时候,我是有意发得很快,类似于压力测试,可能设备在会上位机的时候,我同时也在用上位机发数据给设备。

此帖出自GD32 MCU论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

6
 
wangerxian 发表于 2024-3-11 14:01 不是波特率,【发送数据频繁偶尔会出现UART0发送数据卡死现象】这里的发送数据频繁,是多频繁?

一秒发好几次数据给设备,我发得有点快的,理论上,我不下发了,设备会分两次次回我共2帧数据,发一帧后,再发一帧,大概是一秒发出一帧。

此帖出自GD32 MCU论坛

点评

如果是1秒两次,一次400个字节,这种情况下,应该是不会出现死机的问题的。  详情 回复 发表于 2024-3-11 17:39
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 

波特率匹配上了吗,或者发送数据之前检查一下发送缓冲区的状态

此帖出自GD32 MCU论坛
 
 
 

回复

7159

帖子

2

TA的资源

版主

8
 
Edan12 发表于 2024-3-11 14:20 一秒发好几次数据给设备,我发得有点快的,理论上,我不下发了,设备会分两次次回我共2帧数据,发一帧后 ...

如果是1秒两次,一次400个字节,这种情况下,应该是不会出现死机的问题的。

此帖出自GD32 MCU论坛
 
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

9
 

异常的时候也关注一下串口的错误标志 状态寄存器,看是不是其他错误

此帖出自GD32 MCU论坛
 
 
 

回复

714

帖子

2

TA的资源

一粒金砂(高级)

10
 

GD32没用过,按理说你这个波特率800字节没有压力,我看你这个代码单字节去放一次缓冲区,这个是否就是这个逻辑,可以测一下这一部分写的大概时间,看看是不是本身这部分耗时就超过预期,而且这写数据之后再去清理和初始化的中断是读相关的中断?建议出现卡死的时候,读取一下串口相关寄存器,看看是否有一些异常,实在不行可以找一下厂家FAE看看

此帖出自GD32 MCU论坛
 
个人签名Hello astroturfers
 
 

回复

6105

帖子

4

TA的资源

版主

11
 
本帖最后由 damiaa 于 2024-3-12 12:35 编辑

for(i = 0; i < len; i++)
    {      
        TestTime =10;
        usart_data_transmit(USART0, *pbuf); 
        while(usart_flag_get(USART0, USART_FLAG_TC) == RESET );
        pbuf++;
    } 

 

这里 usart_data_transmit(USART0, *pbuf);用到了指针,指针是不是有越界可能呢

你可以试着改成 看看?MAXOFPBUF你指点 不能大于你pbuf指向的数组最大值。

for(i = 0; i < len; i++)
    {      
        TestTime =10;
        usart_data_transmit(USART0,pbuf[i%MAXOFPBUF]);

        while(usart_flag_get(USART0, USART_FLAG_TC) == RESET );
    } 

此帖出自GD32 MCU论坛
 
 
 

回复

5260

帖子

239

TA的资源

管理员

12
 

正好开chatgpt,帮你问了问,看它说的有参考价值不,是不是都是片汤话?

 

 

此帖出自GD32 MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

新潮  详情 回复 发表于 2024-3-13 09:36
 
 
 

回复

6105

帖子

4

TA的资源

版主

13
 
nmg 发表于 2024-3-12 14:22 正好开chatgpt,帮你问了问,看它说的有参考价值不,是不是都是片汤话?    

新潮

此帖出自GD32 MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表