来郑州上班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博客

相关推荐
网络研究院16 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智16 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest16 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_16 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
2601_9618451516 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博
程序猿阿伟16 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
InHand云飞小白16 天前
无人值守站点网络困境?工业级路由器IR315破解连接难题
网络·物联网·4g·工业路由器·4g路由器·iiot·蜂窝路由器
森G16 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt
江华森16 天前
TCP/IP 协议栈实战 — 7 个实验详解
网络·tcp/ip·智能路由器
酉鬼女又兒16 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php