GD32 485发送异常最常见原因

发布者:EnchantedWish最新更新时间:2024-11-04 来源: elecfans关键字:GD32 手机看文章 扫描二维码
随时随地手机看文章

相信有小伙伴们遇到过这样的问题,在使用GD32进行串口485发送的时候,明明发送了特定长度的数据,但从机就是不响应,现在就让我们来解析下最常见的一个原因。


我们先来看一段代码

wKgaomWl3gqAJZXVAABoigA4cuY198.png?imageView2/2/w/1000


这是采用轮训方式进行485发送的函数,首先将485传输方向设置为发送,然后进行长度为len的数据发送,发送完成后将485传输方向设置为接收。看似这段代码没有问题,但当放在MCU上运行后发现,从机会少收到两个字节的数据。

这是因为,串口是有数据寄存器移位寄存器,当最后一次判断TBE不为“0”并调用usart_data_transmit函数后,实际上倒数第二个字节的数据正在发送移位寄存器中对外发送,最后一个字节在数据寄存器中,此时如果将485传输方向改为接收,那么最后两个字节的数据将不会发送到485总线上。

wKgaomWl3g6AGAiqAAFHRDPXKl8257.png?imageView2/2/w/1000


解决这个问题的办法也很简单,只需要增加一个判断TC的过程就可以了。

wKgZomWl3hOAb3ZeAACHd7DUbGU502.png?imageView2/2/w/1000


TC标志位用来指示是不是所有的数据(包括数据寄存器和发送移位寄存器)都已经发送完成,如果发送完成则置“1”。


前面讲述的是使用轮训方式进行发送,如果用DMA发送和中断发送怎么办呢?其实道理是一样的,在DMA发送和中断发送两种模式中都要打开TC中断,只有进入了TC中断后,才能将传输方向切换为接收,小伙伴们明白了吗?


关键字:GD32 引用地址:GD32 485发送异常最常见原因

上一篇:芯片GD32与以太网芯片的坑
下一篇:GD32 RISC-V系列 BSP框架制作与移植

推荐阅读最新更新时间:2026-03-21 10:37

GD32 ------ 使用外部中断,中断函数需要延时才能读到真正电平
MCU:GD32F103RCT6 中断引脚没有外界上拉电阻 中断配置如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_EXTILineConfig(
[单片机]
VScode开发STM32/GD32单片机-环境搭建
1、软件下载 1.1、安装 VSCode 1.2、下载安装 VisualGDB 1.3、下载安装 mingwin64 1.4、下载安装 OpenOCD 1.5、下载 GNU Arm Embedded Toolchain 2、软件安装 2.1、安装完成 VisualGDB 找到安装目录如下位置 将破解软件放在里边 管理员方式运行弹出如下两个窗口 2.2、安装 mingwin64 安装完成之后将路径添加到环境变量中 找到安装目录下得bin文件夹,将文件路径添加到系统环境变量中 设置环境变量 上 2.3安装 OpenOCD 软件,直接将bi
[单片机]
VScode开发STM32/<font color='red'>GD32</font>单片机-环境搭建
GD32 MCU如何使用双ADC内核提高ADC采样率?
如下图所示,GD32F303系列MCU在不同的ADC位宽情况下均具有对应的最高采样率,那这个最高采样率还可以提高吗? 答案是可以的。GD32F30X系列MCU可以支持双ADC内核,分别为ADC0和ADC1,且双ADC可以支持同步模式,同步模式可以支持常规并行模式、常规快速交叉模式和常规慢速交叉模式,其中可以使用ADC0和ADC1的交叉模式采样同一个通道,同步等效为提高ADC采样率。 下面以快速交叉模式为例来进行介绍: 以下为常规快速交叉模式工作示意图,常规触发后,ADC1立即启动采样,之后ADC0在7个ADC时钟周期后自动启动。 ADC0和ADC1采样转换的数据在快速交叉模式下会被自动放到32位的ADC0数据寄存器里
[单片机]
<font color='red'>GD32</font> MCU如何使用双ADC内核提高ADC采样率?
GD32 MCU 移植教程】6、从GD32F1x0和GD32F3x0移植到GD32E230
1.简介 GD32E230 系列是 GD 最新推出的 Cortex_M23 系列产品,该系列资源上与既有的 GD32F1x0以及 GD32F3x0 兼容度非常高。由于 GD32E230 系列主打低功耗和低成本,所以在存量客户中可能会有越来越多的客户会有从 GD32F1x0 和 GD32F3x0 移植到 GD32E230 系列的需求,本文档专门针对既有的 GD32F1x0 和 GD32F3x0 代码如何移植到 GD32E230 做一个详细的介绍; 2.硬件资源对比 1. TSSOP20 和 QFN28PIN 的封装兼容,但 E230 系列 PA9、PA10 可以映射为 PA11、PA12; 2. LQFP32、QFN32 封
[单片机]
【<font color='red'>GD32</font> MCU 移植教程】6、从GD32F1x0和GD32F3x0移植到GD32E230
GD32开发实战指南(基础篇) 第1章 开发环境搭建
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 1 GD32F207I-EVAL开发板简介 笔者使用的开发板是兆易创新设计的GD32F207I-EVAL开发板。 GD32F207I-EVAL开发板使用 GD32F207IK作为主控制器,主频120MHz、集成3MB Flash、256KB SRAM、通用定时器10、Adv. TM2、Basic TM2、系统时钟1、看门狗2、RTC1、USART4、UART4、I2C3、SPI3、I2S1、SDIO1、CAN2.0B2、USB2.0 OTG FS1、以太网MAC1、TFT-LCD16、数字摄像头接口1、Crypro/
[单片机]
基于GD32驱动BLDC电机(1)定时器和PWM
心血来潮买了几个BLDC电机,准备这次就使用苹果派这块板子试一下BLDC电机的控制。 苹果派这块板子的书籍和例程很多,要驱动电机首先要配置定时器,产生可控的PWM脉冲。 趁快递还没到,先学习一下PWM的生成方式: 按照例程和书籍配置寄存器TIMER2: static void ConfigTimer2(unsigned short arr, unsigned short psc) { timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数 //使能RCU相关时钟 rcu_periph_clock_enable(R
[单片机]
基于<font color='red'>GD32</font>驱动BLDC电机(1)定时器和PWM
GD32 FATFS+FTL Nand解决方案
1. 方案简介 Nand flash有非易失、存储容量大、寿命长等优点;同时具有存在坏块、擦除次数有限、易出现error bit的缺点;并且具有擦除以block(块)为单位,写入以page(页)为单位,读取以sector(512 byte)为单位的特点。 基于上述原因,对Nand flash的应用不仅要避免坏块、均衡块擦除次数、纠正error bit,而且需要按照其读写擦的特点进行应用。若没有一套管理软件针对nand的特性,则对其应用将非常困难。 FTL(Flash Transform Layer)是基于nand flash的管理算法软件,可解决上述提出的所有问题,将Nand flash模拟成如。 ▲ FTL软件架构图 2
[单片机]
<font color='red'>GD32</font> FATFS+FTL Nand解决方案
GD32断上电采样相同电压有偏差如何处理?
大家是否碰到过使用GD32 MCU断上电采样相同的电压存在偏差的情况? 如果在上电正常运行的情况下,采样相同的直流电压,ADC采样数值都比较稳定,而断上电重新运行的时候采样相同电压存在偏差的话,该问题的主要原因应该是由于断上电ADC重新校准导致。 一般ADC初始化配置中均会配置使用一次ADC校准,ADC校准主要为了校准内部采样电容,每次校准都会由于外部环境(例如VDDA/VREF/温度等)变化而有一些差别,这样就会导致采样数值会有一些差别,一般如果没有断上电采样更高一致性要求的话,影响不大,使用校准还可以提高ADC采样精度,但如果需要ADC采样断上电更高一致性要求,就可以去掉ADC校准,ADC内部采样电容出厂已经使用了高精
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved