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

相关推荐
tjjingpan27 分钟前
HCIP-Datacom Core Technology V1.0_12流量过滤与转发路径控制
网络
qq. 280403398436 分钟前
http 状态码
网络·网络协议·http
TG:@yunlaoda360 云老大37 分钟前
华为云国际站代理商申请跨账号代维权限的流程复杂吗?
网络·数据库·华为云
小张的博客之旅37 分钟前
“复兴杯”2025第五届大学生网络安全精英赛 (排位赛wp)
网络·安全·web安全
"YOUDIG"44 分钟前
全能安全工具箱:智能密码生成、高强度文件加密与动态二维码生成的一站式平台
服务器·网络·安全
一颗青果1 小时前
序列化与反序列化
网络·网络协议·tcp/ip
安全渗透Hacker2 小时前
新一代特征扫描器afrog与经典引擎Xray深度解析
网络·安全·web安全·网络安全·自动化·系统安全·安全性测试
Xの哲學2 小时前
Linux IPC机制深度剖析:从设计哲学到内核实现
linux·服务器·网络·算法·边缘计算
幺零九零零2 小时前
Docker底层-Namespaces(网络隔离)
网络·docker·容器
代码游侠3 小时前
学习笔记——sqlite3 数据库基础
linux·运维·网络·数据库·笔记·学习·sqlite