SYD8811串口全双工自动回传测试问题和解决办法[卡死在发送函数的while中]

本文主要是介绍SYD8811串口全双工自动回传测试问题和解决办法[卡死在发送函数的while中],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原来串口中断的写法如下:
在这里插入图片描述
这里接收到数据的时候填充进buff中:
在这里插入图片描述
然后主循环中发送出去:
在这里插入图片描述
在这里插入图片描述
现在测试到上面的代码一段时间后就不会自动回复了:
在这里插入图片描述
现在修改中断的逻辑如下:
在这里插入图片描述
这时候长时间测试串口都是有回复的,所以一定要先读数据再清除标志位!
本文源码请从如下地址下载:https://download.csdn.net/download/chengdong1314/87105011

卡死在发送函数的while中

经过上面的修改依旧会存在长时间老化测试卡死在发送函数的while中,这个现象应该是硬件在某种是否不会设置TI标志位,造成软件卡死

void uart_1_write(uint8_t data)
{UART_1_CTRL->TX_DATA = data;while(UART_1_CTRL->TI == 0);UART_1_CTRL->TI = 0;
}

按照如下方式增加超时发送自动退出的功能:

void uart_1_write(uint8_t data)
{uint32_t j=0x10000;UART_1_CTRL->TX_DATA = data;//while(UART_1_CTRL->TI == 0);while((UART_1_CTRL->TI == 0) && j) j--;UART_1_CTRL->TI = 0;
}

由于不是硬件设置的标志位,所以担心会造成数据丢失,所以这里做了这样的老化测试,定时100MS串口发送一个数据给SYD8811然后SYD8811把数据原封不动的返回.经过一个晚上,65万个数据包的交互,可以判断如上面加超时推出的方式并不会影响数据的发送,也就是说硬件已经发送出去了但是没有回来设置标志位:
在这里插入图片描述
在这里插入图片描述
代码和数据请看如下资源(串口数据:老化测试一晚上2022_11_23_13-03-40.DAT):https://download.csdn.net/download/chengdong1314/87141120

这篇关于SYD8811串口全双工自动回传测试问题和解决办法[卡死在发送函数的while中]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/252937

相关文章

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

基于.NET编写工具类解决JSON乱码问题

《基于.NET编写工具类解决JSON乱码问题》在开发过程中,我们经常会遇到JSON数据处理的问题,尤其是在数据传输和解析过程中,很容易出现编码错误导致的乱码问题,下面我们就来编写一个.NET工具类来解... 目录问题背景核心原理工具类实现使用示例总结在开发过程中,我们经常会遇到jsON数据处理的问题,尤其是

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告: