新手记录STM32 IAP移植过程中遇到的坑
来源:互联网 发布:矩阵的几为3和秩的关系 编辑:程序博客网 时间:2024/06/05 04:27
由于前期是基于STM32Cube生产的code上改的,里面用的库都是HAL的。为了偷懒,在AN4735中找到一个基于HAL库的IAP例程,如下:
打开一看发现是通过USART升级的,但是本人用的是USB的VCP,也就是虚拟串口,虽说是串口,但还是有些不一样。
坑1:USB VCP通信
将USART收发程序改为USB收发程序后,发现Ymodem协议一直不通,没办法只能往里面看,先看了Ymodem协议,链接如下:http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt
本人使用的SecureCRT 6.5,收到数据包的时候,数据总是不完整。前后搞了两天,因为例程中说用的是超级终端,网上有人说这两者的Ymodem有一点点不通,我不太懂,所以就怀疑SecureCRT发的到底对不对。然后用两台PC,用两根串口对发,发现SecureCRT发的是对的,数据包很好。找了很久发现是,接收的buf太小了,不是UserRxBuffer,不知道这个设置有什么用。
坑2:CRC
CRC校验一直没有计算出对的值,发现初始化的时候设置问题,从历程中复制过去就好了;
坑3:Ymodem协议
例程中Ymodem在结束时的协议与说明Ymodem里的不同,这样SecureCRT会报错,但其实已经更新ok了。
最后面加了几句进去就好了:
坑4:Jump to App
设置好app的起始地址后:
程序并不能运行,结果发现还需要重新设置终端向量表,所以说我是菜鸟,不懂呀:
加好后,app build不通过,报错,百度了一下,需要设置ROM。
终于可以烧两个程序了,然后上电正常启动,跑到app后发现,ADC采样完全不对了。
所以到
坑5:ADC采样
之前为了以防万一,在IAP里初始化了ADC等一些没用的外设,把ADC_init注释掉后,ADC采样可以了。
坑6:发现app无法debug了,现在还没找到原因
坑7:IAP ,APP相互跳转
已经做好,IAP到APP的跳转了,接下去做APP到IAP的跳转,直接在USB通信中内置了一段cmd,用来控制APP软启动:
这样就能跑到IAP了。
坑8:
我的IAP程序进入Ymodem传输需要连接串口通信后8s之内在键盘上输入字符“w”。但是SecureCRT 6.5版本不能传输binary,所以就只能用串口小助手。需要在8s之内,切换两个上位软件,同时按下w,不太好用。所以就在热重启后,在flash中写了一个flag,当到IAP的时候,IAP读取这个flag,将程序直接进入Ymodem传输模式。
以上还有不懂的是,PC指针跳转后,很容易程序跑死,而且还不能debug,感觉跟外设或者时钟的使用有关,两个工程在跳转前是否要将外设关掉?但是关掉也会跑死,不知道为何?
- 新手记录STM32 IAP移植过程中遇到的坑
- stm32移植过程中遇到的问题
- STM32 IAP升级遇到的问题总结
- [STM32]--关于移植STemwin所遇到的问题记录(1)
- [STM32]--关于移植STemwin所遇到的问题记录(2)
- STM32 IAP调试记录
- STM32调试过程中遇到BIN文件生成问题记录
- OSG新手使用过程中可能遇到的坑
- STM32 IAP程序相关记录
- 工作过程中遇到的问题记录
- 记录开发过程中遇到的问题
- STM32的IAP方案
- STM32的IAP方案
- STM32的IAP方案
- STM32的IAP
- STM32的IAP实现
- STM32的IAP方案
- STM32的IAP方案
- 天佑回应杨幂事件 MC天佑:只是简单的目的帮助毛不易晋级
- 大明A+B(JAVA大数)
- 关于产生随机数函数
- WPF 图片无法显示……关于Application及SiteOfOrigin的路径问题
- Linux应用--日志定时清理
- 新手记录STM32 IAP移植过程中遇到的坑
- GeoServer常见问题总结
- String的trim方法
- Android_ToolBar基础
- Java poi操作合并单元格后写入内容
- SQL Server还原数据库方法总结
- Spring Boot -- 微信企业号开发04-AesException非法字符
- 学习笔记:ES6之Iterator接口和for…of循环
- centos7下关于拨号上网的一点问题