STM32 IAP 使用 uart, ymodem

需求 需要在 STM32 芯片上,使用 uart 接口,通过 ymodem 协议,进行 IAP 升级。 解决 想用 IAP 升级,芯片上的程序需要分为两个部分,bootloader 和 app. 上位机需要一个软件通过接口,把新版本的软件发送给芯片。 bootloader bootloader 可以参考 STM32 提供的 IAP demo 进行修改。其中写 flash 的地方需要注意,不同芯片支持的写 flash 不一样,主要是支持的单次写入长度不一样,那么相关的写入次数等等都要跟着修改。 app app 部分需要改动的比较少,主要是两个地方: link: 这里需要修改 flash 起始地址,需要和 bootloader 中最后跳转的地址一致。gcc 编译器在 ld 文件中修改。 中断向量: VECT_TAB_OFFSET 也需要修改为新地址对应的偏移。 上位机 上位机软件最简单的就是使用 windows 自带的超级终端 hypertrm. 当然也可以自己写一个支持 YMODEM 协议的软件。 参考 串口YMODEM实现IAP程序升级(附完整工程) STM32 + IAP + Ymodem完美结合 YMODEM协议简介 {Windows} 网工必备:超级终端中文版及3CDaemon汉化版 STM32 IAP升级固件 + 上位机 例程 STM32中断向量表的偏移量设置方法 STM32单片机实现Bootloader跳转的关键步骤 【STM32+cubemx】0024 HAL库开发:IAP(在应用编程)的实现 STM32 用cubemx移植IAP功能,实现串口升级 STM32CubeIDE IAP原理讲解,及UART双APP交替升级IAP实现 【经验分享】STM32_IAP详解(有代码,有上位机) STM32 之八 在线升级(IAP)超详细图解 及 需要注意的问题解决

<span title='2024-02-06 14:19:00 +0800 CST'>2024-02-06</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;81 words&nbsp;·&nbsp;RamLife

stm32 串口帧空闲中断接收大量数据

需求 串口使用普通的接收中断 HAL_UART_Receive_IT 在接收比较少的字节,并且中断处理非常简单的情况下还行,一旦需要接收大量的数据,并且中断处理稍微复杂一些,就会造成丢数据的情况。需要解决这个情况。 解决 解决的办法就是使用帧空闲中断 HAL_UARTEx_ReceiveToIdle_IT 来接收一大堆数据,配套的 callback 函数是 HAL_UARTEx_RxEventCallback. void MainInit() { HAL_UARTEx_ReceiveToIdle_IT(&huart2, uart_web.get_rx_buf(), UartWeb::kRxBufLength); } void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { if (huart->Instance == USART2) { LOGD("HAL_UARTEx_RxEventCallback: USART2"); if (uart_web.Receive(Size)) { main_status = kMainWebReceive; } //HAL_UART_Receive_IT(&huart2, &uart_web_tmp, 1); HAL_UARTEx_ReceiveToIdle_IT(&huart2, uart_web.get_rx_buf(), UartWeb::kRxBufLength); } } 参考 stm32 HAL库 笔记——HAL_UARTEx_ReceiveToIdle_IT STM32 非阻塞HAL_UART_Receive_IT解析与实际应用 【STM32】HAL库 STM32CubeMX教程四—UART串口通信详解 STM32CubeMX——串口数据收发基础(HAL 库)

<span title='2023-05-24 17:13:00 +0800 CST'>2023-05-24</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;56 words&nbsp;·&nbsp;RamLife