RS485通信,无法进入中断处理程序,问题分析过程

1.问题描述

笔者在进行开发时,发现:开发板谁用RS485与一个设备通信。当该设备收到开发板发来的数据帧时,会向开发板反馈数据帧。调试中,发现,开发板没有收到该设备的反馈。因为,该设备是成熟产品。所以主要怀疑在开发板端。debug调试发现,开发板RS485串口中断处理程序无法进入。

1.首先,确保往开发板发送数据帧。于是,使用RS485转USB线,连接开发板和电脑。电脑端使用串口助手周期性向开发板发送数据帧。

在此基础上,进行问题的定位。

该问题从总括来说,有两大怀疑点:软件方面和硬件方面

软件方面:

1.RS485通信基本配置是否正常,比如所使用到的RX,TX,RE引脚是否配置正确;对应的串口和GPIO引脚时钟是否使能;引脚的复用是否配置正确;引脚GPIO的模式是否配置正确;

2.串口中断优先级是否配置正确;串口接收中断是否使能;处理器引脚是否配置为接收模式。

3.中断号和中断处理程序是否正确;中断号和中断处理程序必须和中断向量表中的名称完全一致,否则即使有数据接收,但由于中断号不正确或者中断处理程序不正确,导致无法进入正确的中断处理程序中,进行处理。

硬件方面:

1.RS485芯片的A,B不要接反了。

2.处理器芯片Rx引脚是否有信号。需要用逻辑仪或者示波器量取。为了方面,可以让串口助手周期性发送0x55. 用示波器量取,正常信号应当是高低电平交替出现,且有周期性。如果RX引脚一直为高或者低,就要想一下是不是硬件上,外围电路一直把RX引脚拉低或拉高了。

3.处理器芯片RS485使能引脚信号是否正常。当RS485处于接收模式时,使能引脚信号应该为低电平。当使能引脚信号不对时,硬件上,是不是有外围电路把引脚拉低或拉高了。软件上,是否正常配置使能引脚的值为低电平。

上面列举了,遇到该类问题的排查方向。针对具体问题,读者要结合自身的实际情况,梳理出具体的排查方面和优先级,进行排查。

2.分析过程

结合具体情况,笔者首先排查了软件问题,初步排查由于疏忽大意未发现问题。于是,使用示波器量取信号,来具体定位到明确的问题点。

a.示波器量取RE引脚信号,理应为低电平。量取时,发现,一直为高电平。进一步查看程序配置发现,理应配置PD7引脚,结果配置成PA7了。修改后,在接收模式下,RE引脚量取为低电平,且RX引脚量取为高低点电平交替。从硬件上看,都正确了。

b.RE引脚和RX引脚信号都正确,仍无法进入中断处理程序。排查.s中断向量表中的中断号和中断处理程序和代码中实际使用的中断号和中断处理程序是否一致。结果发现,代码中使用的中断处理程序和该中断号对应的中断向量表中的中断处理程序名称不一致。

最终,定位到问题原因。

这种情况,编译器是不会报错的。原因是:

1.假如是一个函数xxx未被声明,在其它文件中,有调用,则编译器在编译器时,在跟定的寻找空间中,找不到函数xxx的定义,会提示:符号未被定义:Error:

L6218E: Undefined symbol xxx (referred from fileyy.o).

2.但是,当这个符号是一个中断处理函数时,就变得比较特殊了,因为中断处理函数在整个项目代码中,一般不会被调用,也就是除了这个函数被定义的地方,没有其它引用。自然在程序编译时,不会出现该符号未被定义的错误提示。当某个触发中断的事件发生时,处理器会从中断向量表中找到该中断事件对应的中断处理程序的入口地址,从而转到中断处理流程中。一旦,程序中实际定义的中断处理程序名称和中断向量表中的中断处理名称不一样,就不能正确进入程序中定义的中断处理程序中。因此,要特别注意程序中实际定义的中断处理程序一定要和中断向量表中的中断处理处理程序名称完全一致。

相关推荐
小比特-combat6 小时前
多模式调光台灯
单片机·嵌入式硬件
2CM_Embed7 小时前
Altium Designer 中为什么一颗芯片会分成多个 Part?——以 C2000 MCU 为例
单片机·嵌入式硬件·altium designer·c2000
大爱编程♡9 小时前
STM32-USART串口
stm32·单片机·嵌入式硬件
hongmai6668889 小时前
耐高温小钢炮:ESP32-C3-MINI-1U-H4模组选型分享
笔记·单片机·嵌入式硬件·物联网·risc-v
qq_5739678210 小时前
STM32问题
stm32·单片机·嵌入式硬件
LCMICRO-1331084774610 小时前
国产长芯微LD3092完全pin-pin替代LT3092,是一款可编程两端电流源
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·恒流源·lt3092
JNX_SEMI12 小时前
Hi5000Q/H 6.5~75V宽输入——与H5227A完全对等,无缝适配现有电源方案-聚能芯-智芯官方授权一级代理
驱动开发·单片机·嵌入式硬件·物联网·硬件工程
哥不想学算法12 小时前
STM32零基础教程(五):UART串口通信与协议设计
stm32·单片机·嵌入式硬件
WWJA王文举12 小时前
STM32时钟树怎么看?一步理解SYSCLK、HCLK、PCLK和外设时钟配置
stm32·单片机·嵌入式硬件
十月的皮皮12 小时前
STM32从零到量产开发:四路继电器工业控制模块开发 - 上位机操作说明书
c语言·stm32·单片机·stm32cubemx