相信有小伙伴们遇到过这样的问题,在使用gd32进行串口485发送的时候,明明发送了特定长度的数据,但从机就是不响应,现在就让我们来解析下最常见的一个原因。
我们先来看一段代码:
这是采用轮训方式进行485发送的函数,首先将485传输方向设置为发送,然后进行长度为len的数据发送,发送完成后将485传输方向设置为接收。看似这段代码没有问题,但当放在mcu上运行后发现,从机会少收到两个字节的数据。
这是因为,串口是有数据寄存器和移位寄存器,当最后一次判断tbe不为“0”并调用usart_data_transmit函数后,实际上倒数第二个字节的数据正在发送移位寄存器中对外发送,最后一个字节在数据寄存器中,此时如果将485传输方向改为接收,那么最后两个字节的数据将不会发送到485总线上。
解决这个问题的办法也很简单,只需要增加一个判断tc的过程就可以了。
tc标志位用来指示是不是所有的数据(包括数据寄存器和发送移位寄存器)都已经发送完成,如果发送完成则置“1”。
前面讲述的是使用轮训方式进行发送,如果用dma发送和中断发送怎么办呢?其实道理是一样的,在dma发送和中断发送两种模式中都要打开tc中断,只有进入了tc中断后,才能将传输方向切换为接收,小伙伴们明白了吗?
OPPOReno2高清图集
3月份IE使用份额持续下跌 Chrome风光占尽
开关时间、谐波、互调失真测试的基本介绍
TDK开发出有机EL显示器UEL476
java的封装继承和多态
GD32 485发送异常最常见原因
“5G全速进化”iQOO Pro系列手机 3198元8+128GB起售价真是良心!
盘点云南省新一代人工智能发展规划
顶级机器人专家Rodney Brooks:自动驾驶汽车将在50年后成为一件大事
2023R2 Speos新功能介绍
iPhone8:新推5英寸版本 搭载全面屏 更有无线充电!
欣旺达重磅首发新一代Super工商业储能系统
华为推动车载智能计算基础平台参考架构进程 加快自动驾驶健康发展
行业需求回暖 美国芯片股强势上涨
抖音到底因为什么火成这样?
“互联网+”战略为我国农业带来的巨变与隐患
紫外线消毒柜中应用的紫外线传感器GUVC-S10GD详解
浅谈摄像头VCM的激光焊接工艺
CAN FD+电源+系统安全设计的单一芯片解决方案
自动驾驶厂商知行科技 计划11月底香港IPO