RS485通讯时,在结束到的数据中总是出现多余的一个字节0x00

最近一个项目中用到RS485通讯,三个从机都连接到STM32的同一个485主机,但调试发现在主机接收从机的数据时,总是在第一个字节前面多收到一个0x00,但程序找不到任何问题。上网查了下,发现很多人都遇到过这样的问题,解决方法大概有以下三种:

(1)控制器连了J-Link,下载程序后把J-link拔掉就好了。

(2)导线问题,换一根485通讯的导线就行了。

(3)在485发送数据的时候,禁止接收数,发送完成后,再使能接收,问题解决。

以上三种方法我都试了一下,只有第三种有效,问题得以解决。但其他两种方法论坛里说也有人成功过。

要在TMS320F28069微控制器上实现一次接收多个字节485数据,你可以使用UART(通用异步接收传输器)模块和相应的断来实现。以下是一个基本的示例代码,演示如何接收多个字节485数据: ```c #include "F2806x_Device.h" // 包含TMS320F28069的设备头文件 #define BUFFER_SIZE 10 // 接收缓冲区大小 Uint16 rxBuffer[BUFFER_SIZE]; // 接收缓冲区 Uint16 rxIndex = 0; // 接收缓冲区索引 interrupt void UARTISR(void) { if (UARTSTSbits.RXINT == 1) // 检查接收断标志位 { rxBuffer[rxIndex] = UARTRD; // 从UART接收数据寄存器读取数据 rxIndex++; if (rxIndex >= BUFFER_SIZE) // 缓冲区已满,做相应处理 { // 处理接收到的数据 // ... rxIndex = 0; // 重置缓冲区索引 } UARTSTSbits.RXINTCLR = 1; // 清除接收断标志位 } // 处理其他断事件 asm(" NOP"); // 空指令,防止编译器优化断向量表 } int main(void) { // 初始化UART模块 UARTCTLbits.SWRESET = 1; // 复位UART模块 UARTCTLbits.RXENA = 1; // 启用接收 UARTCTLbits.RXRDY = 0; // 清除接收数据就绪标志位 UARTCTLbits.RXINTENA = 1; // 启用接收断 // 配置断向量表 EALLOW; PieVectTable.SCIRXINTA = &UARTISR; // 将断处理函数指定给UART接收断 EDIS; // 使能全局断 EINT; // 其他初始化操作... while (1) { // 主程序循环 } } ``` 以上代码假设使用的是UART模块A,你可以根据实际情况进行相应的修改。在断处理函数,每次接收到一个字节数据后,将其存储到接收缓冲区,并根据需要进行处理。当接收缓冲区满,可以进行相应的数据处理,并重置缓冲区索引以接收下一组数据。 请注意,以上示例代码仅提供了一个基本的框架,具体的实现方法可能因你的应用和需求而有所不同。你需要根据具体的硬件和软件环境,以及UART模块的配置和使用方法进行相应的调整和修改。建议参考TMS320F28069的技术手册、参考手册或相关开发工具的文档,以获取更详细的使用指南和示例代码。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值