来郑州上班3周搞了两个项目!

慢慢的来郑州上班也三周了,搞了两个项目的,也从中新学到了点东西...记录一下


项目一(三相电芯片的数据读取)


项目简介:

mcu通过spi读取三相电芯片寄存器里的数据,按照modbus+rtu协议把读到的数据再作为应答从机返回给读取设备。

其实项目很简单说白了就是把三相电的芯片数据的输出方式由spi转成485,协议就是遵从modbus。而且max485芯片还做了硬件使能。

学习收货:

从中学到的是使用debug仿真,以前调试一直用的uart的printf,当然也有rtt的打印,在这项目里硬件没有引多余的uart用来调试,领导现场简单教了一下debug,当当然以前师傅也有带着用过,不过那时候迷迷糊糊的看过也就忘了,只有是现在不得不用了才会熟练些。



项目二(lora数传)


项目简介:

还是modbus+rtu的协议 上位机发送命令给mcu,mcu再通过lora_send_spi转发给相应的的设备,从机设备接收到lora传送的数据后通过uart转发给传感器,来读取传感器数据,传感器返回的数据再调用lora_send_spi传输回主机设备,主机mcu再通过uart把读到的传感器数据传回上位机。上位机也可以是mcu,另外当传送距离超过规定时候需增加一台中继设备,做为中转站。所有设备共用的是一套程序。最后要编写上位机。

相关协议:(有省略)

学习收货:

1、HardFault问题的解决

移植lora代码,debug时候进入HardFault且出不来了。以前从来没遇到过,还是蛮棘手的。看了几篇文章,知道了是咋回事,但是没解决问题,看哔站的一步一步走找到了问题所在并解决。

【0基础】必学MCU的Hardfault异常调试与函数调用_哔哩哔哩_bilibili

2、找到了标准库版的uart空闲中断demo(以前一直用hal库没咋用过标准库的)

链接:https://pan.baidu.com/s/1uGLSneChe8DMpkpuBEAgEw?pwd=1234 提取码:1234

3、串口错误中断处理(下面的是hal库,标准库的有点不太一样需要手搓了),反正就是当串口出现错误时候一种自我解决的处理机制,但是目前为止还没遇到过串口导致死机的,不过老大说一些用户不懂的乱搞会出现,他以前吃过亏,那就加上把。

复制代码
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
    // 检查是否是UART2的错误
    if(huart == &huart2)
    {
        // 1. 检查奇偶校验错误(Parity Error)
        if((__HAL_UART_GET_FLAG(huart, UART_FLAG_PE))!=RESET)
        {
            // 可选:通过DMA发送错误码"00000"到其他UART用于调试
            // HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"00000", 5);
            
            // 解锁UART(防止死锁)
            __HAL_UNLOCK(huart);
            // 清除奇偶校验错误标志
            __HAL_UART_CLEAR_PEFLAG(huart);
        }
        
        // 2. 检查帧错误(Frame Error)
        if((__HAL_UART_GET_FLAG(huart, UART_FLAG_FE))!=RESET)
        {
            // 可选:发送错误码"00001"
            // HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"00001", 5);
            
            __HAL_UNLOCK(huart);
            // 清除帧错误标志
            __HAL_UART_CLEAR_FEFLAG(huart);
        }
        
        // 3. 检查噪声错误(Noise Error)
        if((__HAL_UART_GET_FLAG(huart, UART_FLAG_NE))!=RESET)
        {
            // 可选:发送错误码"00002"
            // HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"00002", 5);
            
            __HAL_UNLOCK(huart);
            // 清除噪声错误标志
            __HAL_UART_CLEAR_NEFLAG(huart);
        }       
        
        // 4. 检查过载错误(Overrun Error)
        if((__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE))!=RESET)
        {
            // 可选:发送错误码"00003"
            // HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"00003", 5);
            
            __HAL_UNLOCK(huart);
            // 清除过载错误标志
            __HAL_UART_CLEAR_OREFLAG(huart);
        }    

        // 重新配置UART2:
        // 1. 使能空闲中断(用于检测数据接收完成)
    
        // 2. 重新启动DMA接收,将数据存储到RS485_USART_RX_BUF缓冲区
  
        // 3. 错误计数器递增,用于统计错误次数
        rs485_error_Num++;
        
        // 注意:此处理方式适用于RS485通信,错误恢复后重新开始接收
    }
}

4、防止死机处理措施,加看门狗,这个没啥好说的,第二个就是HardFault里边加重启函数。不展示了。

5、使用visual studio 制作上位机 c#

如何用C#写一个简易的上位机_c#上位机-CSDN博客

相关推荐
andxe10 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一11 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈12 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
中微极客14 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
猿的天空18 小时前
机器人双手迎来全栈训练系统:灵初智能EgoSteer让灵巧手无所不能
网络·人工智能·计算机·ai·程序员·机器人·编程
Xzaveir_77718 小时前
OPPO、vivo、荣耀号码认证:多终端拨测矩阵与异常复现
大数据·网络·科技·矩阵·产品经理·ai-native
wuqingshun31415918 小时前
从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
网络
牛马工作号18 小时前
Zigbee 专业详解:从协议到排障
网络·物联网·安全
牛马工作号18 小时前
Wi‑Fi 完全指南:从 802.11 协议到 Wi‑Fi 7、AC+AP 与 Mesh 工程组网
网络·网络协议·智能路由器
智慧光迅AINOPOL18 小时前
智慧工厂全光网怎么扛住AGV与强电磁?光电复合缆与工业级方案
网络·全光网解决方案·全光网·酒店全光解决方案·泛住宿全光网解决方案