- 博客(85)
- 收藏
- 关注
原创 解决Modbus 主站回读数据时,eRcvState 一直保持在 STATE_M_RX_IDLE状态,导致无法正常接收数据的问题
摘要: 调试发现Modbus主站在回读数据时,eRcvState始终卡在STATE_M_RX_IDLE状态,导致无法接收数据。分析发现主循环中eMBMasterPoll()调用频率过高(1秒1次),阻碍了状态机切换。通过调整轮询间隔至200ms,并优化主循环结构(移除阻塞延时,增加LWIP处理),成功解决接收问题。此案例凸显了合理设置轮询周期对状态机正常运行的关键作用。
2025-12-12 11:01:54
150
原创 基于STM32F407+dp83848实现ModbusTCP从站移植
摘要 本文详细介绍了在STM32F407RE平台上基于LWIP和FreeModbus实现Modbus TCP从站的移植过程。首先确保以太网通信正常(可ping通),然后参考现有教程将FreeModbus源码集成到工程中。移植过程中解决了编译错误,修改了portevent.c、porttcp.c等文件配置,并关闭了未使用的ASCII/RTU支持。通过实现保持寄存器的读写回调函数,最终成功使用Modbus Poll工具测试TCP通信功能,验证了寄存器读写操作的正确性。文章提供了完整的移植步骤、问题解决方法和关键
2025-12-08 16:21:22
723
原创 【LWIP学习】dp83848与STM32f407re的接线并实现ping通
MII需要25MHz的时钟,没有接外部的晶振,由STM32的MCO提供时钟。GPIO有很多,按照原理图配置好,这里不用配置PA8和PB14。在主循环中添加MX_LWIP_Process();parameter settings部分没修改。cubemx6.4 【用这个版本】开发板 → 网线 → 电脑有线网口。点击PA8选择RCC_MCO_1。控制面板 → 网络和共享中心。更改适配器设置 → 以太网。MCO1配置成25MHz。PB14配置成外部中断。优点:无干扰,简单可靠。配置:手动设置静态IP。
2025-12-03 09:09:34
924
原创 分段线性校正:将非线性系统完美校正为 y = kx 的实用方法
分段线性校正是一种将非线性系统通过分段线性逼近的方式,校正为理想线性特性的技术。用多段直线连接起来逼近理想曲线,从而将系统的输入-输出关系校正为我们期望的线性关系。分段线性校正是一种简单而有效的非线性补偿技术,特别适合将传感器或测量系统的特性校正为标准线性关系 y = kx。通过合理选择校准点和斜率 k,可以实现高精度的线性化处理。这种方法在工业自动化、仪器仪表、传感器信号处理等领域有着广泛应用,是工程师工具箱中必备的经典技术。希望本文帮助您理解分段线性校正的原理和应用。
2025-09-28 09:41:35
724
原创 解决了C语言编译警告:“a declaration cannot have a label“和“transfer of control bypasses initialization“
摘要:该代码片段出现两个编译问题:1)标签后直接声明变量导致警告#1182-D;2)switch语句可能跳过变量初始化的警告#546-D。解决方案包括:将变量声明移至switch前、用代码块隔离作用域,或在标签后添加空语句。最佳实践是使用方法2,为case语句添加大括号形成独立作用域来声明变量。这种处理方式既解决了警告问题,又保持了代码的可读性。
2025-09-23 14:29:16
315
原创 野火STM32Modbus主机读取寄存器/线圈失败(四)(完结篇)-解决eMBMasterPoll( void )不能读取EV_MASTER_EXECUTE的问题/不能进入回调函数的问题
摘要: 针对野火STM32 Modbus主机事件覆盖问题,提出两种定时发送方案:方案A利用SysTick软定时,每2秒触发一次寄存器读取,通过lastTickMs时间戳和reqPending状态防重入;方案B采用TIMx硬件定时器中断置标志,主循环检测标志后发送请求。两种方案均避免阻塞eMBMasterPoll(),确保数据稳定接收。最终实现寄存器数据正常存储,推荐方案A更易实现。源码可参考前文。 关键词:STM32、Modbus主机、定时触发、事件覆盖、SysTick
2025-09-04 15:31:22
493
原创 野火STM32Modbus主机读取寄存器/线圈失败(三)-尝试将存贮事件的地方改成数组(非必要解决方案)(附源码)
尽管crc校验正确了,也成功发送了EV_MASTER_EXECUTE事件,但是eMBMasterPoll( void )中总是接收的事件是EV_MASTER_FRAME_RECEIVED或者EV_MASTER_FRAME_SENT,一次都没有执行EV_MASTER_EXECUTE。EV_MASTER_EXECUTE事件被别的事件给覆盖了,于是尝试把发送的事件存在数组里,避免被覆盖。
2025-09-04 15:12:42
901
原创 【modbus_master学习】Modbus CRC16校验函数详解
Modbus CRC16校验摘要(150字): Modbus CRC16校验函数用于验证RTU帧完整性。该函数接收数据帧指针和长度,初始化CRC寄存器为0xFFFF,通过查表法逐字节异或计算,最终返回16位CRC值。发送端将计算出的CRC附加到帧尾,接收端重新计算整个帧的CRC值,若结果为0则验证通过。其核心原理是CRC多项式运算特性,确保数据正确传输。该算法高效可靠,是Modbus协议中确保数据准确性的关键机制。
2025-09-04 14:40:49
562
原创 解决TRAE 打开工程中文乱码-修改trae的默认编码
摘要:本文介绍了解决TRAE打开Keil工程时中文注释乱码的两种方法。问题根源在于Keil使用GB2312编码而TRAE默认UTF-8编码不兼容。方法一是单独处理每个文件,手动选择GB2312编码重新打开;方法二(推荐)通过修改TRAE默认编码设置,将"默认字符集编码"改为GB2312,可一劳永逸解决所有文件乱码问题。两种方法都配有详细操作步骤和图示说明。
2025-09-02 08:50:29
3878
1
原创 解决keil在调试debug过程中,,用watch看变量,变量无法正常显示(cannot evaluate)的问题
摘要:调试静态变量eMasterQueuedEvent时遇到无法查看值的问题。分析可能是变量作用域、优化级别或未初始化导致。最终采用添加全局调试变量的方案(声明volatile变量并同步更新),成功在watch窗口监控变量变化。其他备选方案包括降低优化级别、使用外部变量或强制类型转换表达式等。该方案有效解决了静态变量调试可视性问题。
2025-08-29 10:05:26
1106
原创 野火STM32Modbus主机读取寄存器/线圈失败(二)-解决CRC校验错误
测试中发现,读取保持寄存器和输入寄存器均失败,但写入操作正常。在使用FreeModbus库进行通信时,发现从机返回的数据CRC校验失败,导致数据解析异常。然而,在我的代码中,用于存储保持寄存器的数组。的工作模式配置,让它根据选择的校验模式自行判断应该配置成多少位。在自己的开发板上移植了野火的modbus主机程序并尝试使用。始终为0,未能更新。而串口的数据位配置的是8位,这就导致了数据接收错误。递增,排查原因是CRC校验失败,导致解析失败。中的分支添加解析结果的测试,结果显示。但是主函数中,设置的是偶校验。
2025-08-27 16:39:16
983
原创 野火STM32Modbus主机读取寄存器/线圈失败(一)-解决接收中断不触发的问题
摘要(149字): 在STM32 Modbus主机移植中,发现接收中断未触发导致读取寄存器失败。通过调试发现rx_int_count始终为0,表明USART接收中断未生效。问题源于vMBMasterPortSerialEnable()函数中485方向控制与中断使能的时序错误:使能接收中断时485仍处于发送模式,导致数据丢失。解决方案是调整代码顺序——先切换485方向并添加延时,再使能中断。修改后接收中断正常触发,成功读取从机数据。该问题揭示了RS-485半双工通信中方向切换与中断时序的关键性。
2025-08-27 14:49:48
1298
原创 【modbus学习】野火Modbus主机接收到数据后的完整函数调用流程
【代码】【自用|野火modbus_master】Modbus主机接收到数据后的完整函数调用流程。
2025-08-25 14:30:19
319
原创 解决野火指南者开发板modbus程序移植到stm32f103re中的串口配置错误
在之前的工程中我的接收中断出问题,于是打算新建一个工程,只用来移植野火的Modbus主机程序,想通过这样来排除其他代码的干扰找到问题,可是串口不能发送命令,试了两次都没用。
2025-08-23 15:18:27
254
原创 Modbus读保持寄存器流程
Modbus读保持寄存器的完整流程包括:应用层调用- 调用函数参数验证- 检查从机地址、寄存器地址和数量的有效性资源获取- 获取总线资源,确保当前没有其他操作在进行帧构建- 构建标准Modbus RTU请求帧串口发送- 通过RS485发送请求到从机响应等待- 轮询等待从机响应响应解析- 解析从机返回的数据帧回调处理- 通过回调函数将数据存储到本地缓冲区状态返回- 返回操作结果状态码关键技术点:Modbus地址 = 数组索引 + 1使用大端序存储16位数据使用轮询机制处理异步通信。
2025-08-22 11:09:59
1093
原创 Modbus协议概要和Modbus寄存器
摘要: Modbus协议是一种单主/多从的通信协议,支持单播(主设备与单个从设备交互)和广播(主设备向所有从设备发送指令)两种模式。协议定义了4类寄存器:可读写的线圈状态(0x)和保持寄存器(4x),以及只读的离散输入状态(1x)和输入寄存器(3x)。寄存器地址分为PLC地址(十进制,如40001)和协议地址(十六进制,如0x0000),通过功能码区分操作类型。串行链路支持ASCII或RTU传输模式,后者因高效性更常用。
2025-08-16 09:59:28
907
原创 cursor自动续费产生扣费的退款流程
摘要:用户在发现Cursor自动续费扣款后,通过邮件申请退款。具体流程:1)发送英文退款申请邮件至hi@cursor.com;2)收到快速回复确认受理;3)7小时内完成审核并收到退款,比预期的5-10天快很多。整个过程中,用户使用AI工具辅助撰写邮件,并提供了交易凭证。最终退款顺利完成,用户还发送了感谢信。经验表明直接邮件联系官方客服是高效解决自动续费退款问题的有效方式。(149字)
2025-08-15 10:28:19
4689
9
原创 基于野火提供的freemodbus程序移植过程中STM32CubeMX代码覆盖问题解决/moudbus封装(附源码)
STM32CubeMX代码保护与封装策略 问题:CubeMX重新生成代码会覆盖用户自定义代码,破坏项目功能。 解决方案: 代码保护:所有自定义代码必须放在USER CODE BEGIN/END注释块内 函数封装: 对需要修改的MX生成函数(如MX_USART1_UART_Init)创建自定义封装函数 在MX生成函数中调用封装函数 文件管理:删除手动修改的BSP文件,改用CubeMX生成版本 配置优化:正确设置定时器、USART和GPIO参数 关键实践: 通过封装函数实现参数自定义 保持CubeMX生成代码与
2025-08-13 16:44:52
645
原创 解决keil MDK cannot access target,shutting down debug session
为测试ad和da芯片,请硬件帮忙加了在板子上飞线两根,随后数据控制板和显示板上的烧写过程中均出现异常。
2025-08-13 10:09:05
956
原创 ad7708手册理解以及stm32驱动ad7708的代码实现(附源码)
位7-4: 通道选择 (CH3-CH0)位3: 极性选择 (B/U)位2-0: ADC范围位这是对ADCCON3 寄存器中 U/B‾B位的功能说明,用于配置ADC(模数转换器)的编码模式(单极性/双极性)位7: 斩波使能 (CHOP)位6-4: 滤波器选择 (FS2-FS0)位3-0: 输出数据率 (ODR3-ODR0)
2025-08-13 09:51:12
944
转载 【转载|AD7708-7718寄存器】AD7708/7718引脚、寄存器、程序流程等翻译为中文(附源pdf)
在这个模式中的 AD 不断转换指定通道 的信号,RDY 线表示有效数据到来,可 从数据寄存器读取。读取数据后,选择下一个通道,查询 RDY 引脚,或在状态寄存器的 RDY 位,并再 次读取数据。2:写入模式寄存器选择斩波的启用与禁用, 选择参考源,AINCOM 的缓冲/无缓冲操 作,并选择零刻度偏移校准。零刻度校 准,可要么自我校准,ADC 的决定 ADC 的内部零点,或系统校准,用户必须提 供校准期间的零刻度电压输入。同样的对 MD2,MD1, MD0 模式寄存器位进行监测,以确定何 时完成校准。
2025-08-04 14:43:57
108
原创 stm32/gd32驱动DAC8830(附源码)
16位分辨率2.7V至5.5V单电源供电极低功耗:3V供电时为15μW高精度,积分非线性(INL):1 LSB低噪声:10 nV/√Hz快速建立时间:1.0μS高速SPI™接口,最高可达50MHz复位至零代码施密特触发器输入,用于直接光耦合器接口工业标准引脚配置。
2025-08-04 10:05:07
2481
原创 gd32modbus从机移植
将STM32F103工程从使用串口2(PA2/PA3)改为串口1(PA9/PA10),485控制引脚从PA1改为PC9。我已经成功将您的STM32F103工程从串口2改为串口1,并修改了相应的引脚配置。
2025-08-01 17:03:24
993
原创 基于野火的freemodbus从机程序移植成功现象记录(含源码)并解决了Timeout error问题
摘要:文章记录了将野火Modbus从机程序移植到STM32F103RE开发板的过程。作者遇到了连接超时问题,排查发现与ModbusPoll的超时设置(1000ms可连接,200ms则失败)有关。移植主要修改了芯片型号、控制引脚(PC2→PA1)和寄存器起始地址(1→0),并成功测试了多个Modbus功能码(01、02、03、04、15、16、5/6)的通信。实验现象和通信数据均被详细记录,为后续开发提供参考。
2025-08-01 14:37:14
765
原创 【STM32-HAL】 SPI通信与Flash数据写入实战
页编程指令码是0x02,后面跟着24位地址(往哪里写地址就发谁的地址),再后面是发要写入的数据,一次性可以写多个数据。首先声明数组,用于存放要发送的数据。先发送读取命令,然后接收数据。读取数据的指令码是0x03,先发0x03,后面跟24位地址,再往后从总线上读取数据。扇区擦除的指令码是0x20,所以首先发送0x20,后面接着24位的扇区首地址。用于通过 SPI 总线同时进行发送和接收数据操作,返回。类型状态值 ,作用为“发送同时接收”。类型状态值 ,作用为“发送”。类型状态值 ,作用为“接收”。
2025-07-30 16:34:38
1300
原创 【gd32标准库】创建新工程和实现485发送数据(附源码)
找到刚才的安装文件夹,把.pack文件复制进去。如果不复制,后面在keil中会出现找不到对应芯片的情况。然后下载开发板资料和应用软件(也就是pack包),下载GD32F10x Demo Suites。由于485是半双工通信,需要在发送和接收时控制方向引脚(CON)。串口助手每隔一秒收到一次“hellohello”找到keil5的.pack文件,安装。CON (PC9)= 0:发送模式。CON (PC9)= 1:接收模式。
2025-07-30 13:45:08
855
原创 解决了程序无错,但是串口调试助手收不到数据的问题
点击Option for Target ->Debug ->Setting ->Flash Download ->勾选Reset and Run ->确定,再重新烧写程序就正常了。在调试的过程中无意间有那么一次成功收到了,但是后来尝试很多次还是收不到,一点数据都收不到。通过摸索,发现是因为Reset and Run没用勾选导致的。
2025-07-30 10:46:25
1149
原创 解决了keil编译卡顿,keil忽然编译速度特别慢问题
win+R后,输入msconfig回车,在系统配置窗口先点击服务,再勾选“隐藏所有Microsoft服务”,然后点全部禁用,按步骤操作后重启就正常了。但是这次有新的发现,这次发现卡顿的时候只有Microsoft PC Manager Service在运行,说明就是Microsoft PC Manager Service在影响keil的编译。上了个厕所回来后,用keil编译就很慢,会在一个地方停很久,但是最后也能编译完成。为了防止它再次在我不知情的情况下启动,我决定卸载它。卸载后就编译速度正常了。
2025-07-30 10:07:46
4077
2
原创 解决百度网盘双击没反应打不开的问题
摘要:百度网盘双击无反应时,可通过手动运行安装目录下Autoupdate文件夹内的Autoupdate.exe解决(需先结束相关进程)。该问题可能由自动更新机制失效导致,主程序依赖更新程序完成初始化,手动触发更新可恢复启动流程。方法源自知乎专栏,经实践验证有效。(99字)
2025-07-29 15:37:12
3325
原创 【学习笔记】AD7708/18(1)-理解官网的参考代码
AD7708、AD7718是适合低频测量应用的完整模拟前端。AD7718内置一个含PGA的24位Σ-Δ ADC,可配置为4/5个全差分输入通道或8/10个伪差分输入通道。该器件上的两个引脚可配置为模拟输入或基准电压输入。AD7708是AD7718的16位版本。利用这些ADC,可以直接转换20mV至2.56V范围的输入信号,支持传感器信号直接输入,无需进行信号调理。
2025-07-28 16:30:11
1017
原创 73. 矩阵置零
通过利用矩阵的第一行和第一列作为标记,我们可以在不使用额外空间的情况下实现矩阵的原地修改。关键在于:先记录第一行和第一列是否有 0。使用第一行和第一列来标记其他行和列是否需要置零。最后根据标记置零,并处理第一行和第一列。这种方法高效且满足原地算法的要求。
2025-07-25 16:14:12
1231
原创 【阅读整理】野火ADC_AD7192模块资料
ADC_AD7192 24位 ADC模块是一款可配置为两路差分输入或四路伪差分输入的 24 位 Σ-Δ型模数转换模块。片内通道序列器可使能多个通道,AD7192 按顺序在各使能通道上执行转换,输出数据速率可设置范围为 4.7 Hz~4.8 KHz,使用 4.9152MHz 的外部晶振提供外部时钟,使用多层 PCB 设计, 搭配高精度电阻,测量范围可调//在ad7192_test.h切换MODE宏定义来选择模式#if MODE==/* 4路伪差分通道单次读实验 */#elif MODE==
2025-07-25 15:42:44
1245
1
原创 【stm32-hal】ADC模拟-数字转换技术
STM32 ADC原理与应用摘要 STM32通过逐次逼近法(SAR)实现模拟信号到数字信号的转换。12位ADC可将0-3.3V电压转换为0-4095的数字量,分辨率约0.8mV。配置时需注意APB2时钟分频(不超过14MHz),并通过CubeMX设置ADC通道。程序实现需包含校准步骤(HAL_ADCEx_Calibration_Start),使用HAL_ADC_Start启动转换,HAL_ADC_PollForConversion等待完成,HAL_ADC_GetValue读取结果。电压值计算为:ADC值/4
2025-07-23 09:22:28
1337
原创 (200分)羊、狼、农夫过河
摘要:题目要求农夫用固定容量的小船将羊和狼运到对岸,要求运输过程中不损失羊(即任何时候岸上羊的数量必须大于狼的数量,除非农夫在场)。需要计算最小运输次数,若无法满足条件则输出0。解题关键在于枚举所有可能的运输组合,确保每次运输后两岸都满足羊数大于狼数。运输时船上动物数量可自由组合(因农夫始终在船上),但总数量不能超过船载量。示例输入5 3 3输出3次,而5 4 1则输出0。
2025-07-20 23:31:49
281
原创 Modbus Slave 使用教程:快速搭建模拟从站进行测试与开发
本文介绍了使用Modbus Slave软件快速搭建模拟从站进行测试与开发的方法。主要内容包括:1)工具准备,推荐Modbus Slave等软件;2)详细搭建步骤:安装启动、配置从站连接、定义数据映射、设置初始值;3)连接Master进行读写测试;4)高级功能如多从站模拟、数据记录、错误注入等;5)常见问题解决方案。该教程适用于工业自动化开发测试场景,帮助开发者快速构建Modbus从站环境进行协议验证与调试。
2025-07-20 23:30:26
2566
原创 【详细笔记】两类曲线积分转换
两类曲线积分之间存在重要联系:第二类曲线积分∫L Pdx+Qdy可以转化为第一类曲线积分∫L (Pcosα + Qcosβ)ds,其中α、β为曲线切线与坐标轴的夹角。这种转换通过弧长元素ds与坐标微分dx=cosα·ds、dy=cosβ·ds的关系实现。物理上可理解为变力做功的两种计算方式:或分解为坐标分量积分,或投影到切线方向积分。参数方程曲线中,方向余弦cosα、cosβ由导数φ'(t)、ψ'(t)与模长决定。这一联系公式是曲线积分理论的核心,体现了坐标积分与弧长积分的本质统一。
2025-07-20 23:01:45
1855
原创 【超详细笔记】概率:中心极限定理的直观理解——样本均值为何趋近正态
摘要:中心极限定理指出,无论总体分布如何,当样本量足够大时,样本均值的分布会趋近于正态分布。通过掷骰子、收入调查等示例可见,多次抽样的均值会围绕总体均值形成正态分布。软件模拟进一步验证了该定理在均匀分布、偏态分布和自定义分布中的普适性,均显示大样本下均值分布趋近正态且期望等于总体期望。这为统计推断提供了重要理论基础。
2025-07-19 19:15:48
1177
原创 对称数、完全数、圣经数、自守数 、自我生成数、魔术数 、 幸运数 、奇异数 、地球数365 、逆序数 、堆数奇观
一个整数,它的各位数字如果是左右对称的,则称这个数是对称数。* 例如:1234321、123321等。* 一般来说,位数大于或等于两位。最小的对称数是11,没有最大的对称数,因为数位是无穷的。
2025-07-19 09:13:52
1194
原创 五分钟学会大数定律【笔记】
摘要: 大数定律指出,当样本容量n趋近于无穷时,样本均值会依概率收敛于总体期望。以抛硬币为例,设X表示结果(+1为正面,-1为反面),其期望EX=0。随着试验次数增加,样本均值将趋近于0,验证了大数定律的核心思想:大量独立重复试验下,随机事件的频率会稳定于理论概率。
2025-07-17 22:54:14
1094
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅