我是靠谱客的博主 冷傲芒果,最近开发中收集的这篇文章主要介绍基于RTT对STM32L476进行OTA(下),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用无线方式升级目前两个思路:1是借助一个可以进行TCP连接的串口透传模块HLK7628N,通过TCP连接服务器后,还是通过ymodem的方式传输

首先修改ymodem传输串口到7628N所在的串口

将if (!rym_recv_on_device(&rctx, rt_console_get_device(), RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX, ymodem_on_begin, ymodem_on_data, NULL, RT_TICK_PER_SECOND))中的rt_console_get_device()改为rt_device_find(SAMPLE_UART4_NAME)

SAMPLE_UART4_NAME是定义的串口4的名称,前面要把串口4初始化

如有必要还要修改一下串口波特率,去int rt_hw_usart_init(void)函数里面

然后把HLK7628N的串口接到串口4上

TCP协议和ymodem协议两者间是不互相冲突的,可以通过虚拟串口工具将TCP客户端虚拟映射到一个虚拟串口,然后用超级终端xshell打开这个虚拟串口即可,如下图,COM3是虚拟出来的串口,8080是本地端口号,HLK7628N作为远程客户端连接本地作为服务器的PC机

上面这款软件是付费的,有个哥们给破解了,破解流程,流程走了一遍,发现已经破解不了了,一些重要的.dll文件好像已经被处理过了,防止反编译,后来又看了一下,发现一开始想法错了,软件版本、反编译工具、反编译插件都一样,为什么我这找不到那个Register,以为题主提到的Register在.dll文件里面,其实是在下图路径下面

破解方法如下图

另存为之后再打开,就已经编译生效了如下图:

上述相关工具

核心逻辑如下:

/* 数据解析线程 */
static void ZIGBEE_data_parsing(void)
{
char rx_temp = 0, rx_len = 0;
char data_buf[30] = {0};
while (!ota_flag)//升级中不接收除ota数据外的串口数据 升级失败后在ymodem_ota_uart4()函数中置0
{
rx_temp = uart_ZIGBEE_get_char();
if(rx_temp != 'n')
{
data_buf[(rx_len++) % 30] = rx_temp;
}
else //开始处理一帧数据
{
rx_len = 0;
if(!strncmp(data_buf, "ymodem_ota_uart4", 16))
{
ota_flag = 1;
rt_kprintf("uart4 received data is %sn", data_buf);
ymodem_ota_uart4();//复制的ymodem_ota函数 修改一下
}
memset(data_buf, 0, sizeof(data_buf));
}
}
}

其它串口配置代码见

第二个思路就是正常的官方提供的从服务器上通过websocket拉取升级文件的方法

未完待续·······

 

 

 

 

最后

以上就是冷傲芒果为你收集整理的基于RTT对STM32L476进行OTA(下)的全部内容,希望文章能够帮你解决基于RTT对STM32L476进行OTA(下)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部