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

相关推荐
white-persist10 小时前
【攻防世界】reverse | re1-100 详细题解 WP
c语言·开发语言·网络·汇编·python·算法·网络安全
飞行增长手记10 小时前
什么是IP纯净度?为什么它能决定账号安全与访问效率?
网络
普普通通的南瓜11 小时前
一年期免费IP证书,为公网IP地址提供HTTPS加密
网络·网络协议·tcp/ip·安全·http·金融·https
谷粒.11 小时前
测试数据管理难题的7种破解方案
运维·开发语言·网络·人工智能·python
init_236112 小时前
【HCIP-18】RSTP
网络
云计算练习生12 小时前
渗透测试行业术语扫盲(第一篇)—— 基础网络与协议类术语
网络·网络协议·安全·网络安全·渗透测试·渗透测试术语
张3蜂13 小时前
文件上传漏洞:数字世界的“特洛伊木马”
网络·安全
普普通通的南瓜13 小时前
无需域名,直通安全:一年期免费IP SSL证书
网络·网络协议·tcp/ip·安全·ssl
月亮!13 小时前
移动端测试重磅升级:跨平台自动化测试框架深度对比
运维·网络·人工智能·测试工具·容器·自动化·测试用例