stm32基于Can和uart的IAP实现
来源:互联网 发布:土地利用现状数据价格 编辑:程序博客网 时间:2024/06/07 03:41
1.公司的某个产品的结构是
工业主板(uart)->控制板(can)->节点(大于1个)
2.实现目的
要实现不拆壳定点升级某一个节点或控制板的应用程序
3.单片机硬件平台
stm32F103C8T6
4.IAP协议
Ymode协议
5.移植过程
1>进入IAP的过程
上位机向节点发送升级命令,往flash写升级标志,软件重启后,节点进入IAP,一直在发送'C',等待有效数据。
上位机向控制板发送升级命令,控制板把将要升级的地址写入flash,软件重启后,进入IAP,配置Can过滤器为将要升级的地址。
2>Ymode转发
Ymode协议移植的ST官方例程,基于UART的IAP。Ymode每包数据为1K+5Byte,由于Ymode可以允许很久的延时,所以我把每包数据完整的接受后,计算出CAN转发的帧数,再由CAN进行转发。如果发生丢帧,IAP注定失败,所以我死循环判断CAN发送成功的标志。代码如下
uint8_t MocaCanSend(uint8_t c){CanTxMsg GateWay;uint8_t TransmitMailbox = 0;uint32_t timeout = 0x100000;uint8_t i;GateWay.ExtId = (1<<28) | (add<<20);GateWay.RTR = CAN_RTR_DATA;//设置为数据帧GateWay.IDE = CAN_ID_EXT;//标识符的类型为扩展帧格式GateWay.DLC = 8; //帧的长度for(i=0; i<8; i++){GateWay.Data[i] = c;}TransmitMailbox = CAN_Transmit(CAN1,&GateWay);SenPoint += 8;while((CAN_TransmitStatus(CAN1,TransmitMailbox)==CAN_TxStatus_Failed))//通过检查CANTXOK位来确认发送是否成功 { }return 0;}
<strong>3>Ymode应答</strong>
节点收到完整的Ymode数据包后,会通过CAN发送应答信号,控制板接在CAN中断函数接收后,直接通过UART发送给上位机。
</pre><pre code_snippet_id="601224" snippet_file_name="blog_20150209_6_7095820" name="code" class="cpp"><strong>4>退出IAP模式</strong>
节点更新成功后,连续通过CAN发送一包0xFE标志后,跳转到APP段执行,控制板在CAN中断里面收到0xFE后,置结束标志,在其他位置判断结束标志,跳转到APP段执行。不能在中断函数中直接跳转!
0 0
- stm32基于Can和uart的IAP实现
- IAR环境下STM32+IAP方案的实现(基于STM32F103ZET6的UART通讯实现)
- STM32的IAP实现
- stm32 IAP + app的实现
- 基于IAP的STM32程序更新技术
- 基于IAP的STM32程序更新技术
- 基于TCP的STM32 IAP bootloader初步设计
- 基于IAP的STM32程序更新技术
- STM32实现IAP功能的学习笔记
- STM32系统时钟 CAN UART
- STM32 IAP实现流程
- STM32存储器 — <3> STM32实现IAP(上位机和IAP程序设计)
- stm32中UART和USART的区别
- [经验] 基于Xmodem的STM32的IAP升级【转】
- 基于Xmodem的STM32的IAP升级【转】
- I2C,SPI,UART和CAN的区别
- I2C SPI UART和CAN的区别
- I2C SPI UART和CAN的区别
- 【安卓】拖动滑块改变图片的透明度
- LeetCode-Subsets(子集)
- listctrl添加背景色,图标去掉阴影
- PAT B1018 锤子剪刀布
- C# 中的委托和事件
- stm32基于Can和uart的IAP实现
- 主函数解释 C/C++
- JAVA UUID 生成
- 【android程序之聊天程序】
- weixin微信公众号一站到底游戏代码(有点普通)
- 【Android入门 十一】SQLite的简单使用
- C#中的委托和事件(续)
- 回溯法-求全排列
- SEAndroid安全机制简要介绍和学习计划