我是靠谱客的博主 冷傲芒果,这篇文章主要介绍基于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文件里面,其实是在下图路径下面

破解方法如下图

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

上述相关工具

核心逻辑如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* 数据解析线程 */ 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(下)内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部