IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 华大MCU(四):HC32F460串口iap升级(踩坑篇) -> 正文阅读

[嵌入式]华大MCU(四):HC32F460串口iap升级(踩坑篇)

HC32F460串口iap升级(踩坑篇)

1. 系统环境

  • 系统:win10
  • 开发板型号:官方评估板(EVB-HC32F460)
  • ide:keil5
  • sdk版本:hc32f460_ddl_Rev2.0.0
  • 数据手册版本:HC32F460系列用户手册 Rev1.21.pdf
  • 时间:2021.7.5

2. 串口IAP升级

mcu的串口iap升级,其实就是通过串口升级程序的一种方式,现在基本上都是仿照linux的启动模式来实现的,总体上最少要有两个程序,一个叫bootloader程序,一个是app程序,具体的实现原理方法多种多样,但是本质上是一样的,只是有的做了安全方面的考量。这节只说基于HC32F460最简单的iap升级的实现。

3. APP程序的实现

3.1 确定app在flash的存储位置

首先大家要知道,任何的mcu启动都会在addr为0x00的地方开始读程序运行,一般mcu地址为0x00的地方是芯片flash的起始地址,所以可以说mcu上电都会从flash的0x00地址开始启动。只不过有些芯片厂商会做内部地址映射,将其它地方的地址映射到地址0x00,这样的目的是可以灵活的配置不一样的启动模式。

我们在学stm32的时候都知道,当配置为flash启动的时候,就会将0x8000000地址映射到0x00,stm32在启动的时候,从0x00启动就变成了0x8000000地址启动,那么当程序下载到0x8000000为起始地址后的一片区域,程序就会运行。

而HC32F460不支持多种启动模式,所以没有做映射,而是上电直接读0x00地址的代码运行。

3.2 正常app的实现

正常的mcu制作app程序都只需要两个步骤:

  1. 在程序中添加修改中断向量表位置,

    代码:

    //要声明两个宏
    //华大mcu是默认从地址为0x00开始执行程序
    #define FLASH_BASE 0x00 
    
    //地址偏移量,要通过boot loader和app所占空间大小自己估量,但值一般要求是flash页的整数倍
    #define VECT_TAB_OFFSET 0x020000 
    
    //在main函数添加一句
    int main()
    {
        //在main函数的第一句执行
        SCB->VTOR = FLASH_BASE + VECT_TAB_OFFSET; //重定位中断向量表
    	//其他程序。。。。
    }
    
  2. 修改编译的链接脚本。对于用keil编译可直接在界面修改,将IROM起始地址加上程序设置的地址偏移量,大小参考芯片flash的大小算一下。IRAM也要改,参照程序编译后那个

    例如将:
    在这里插入图片描述

    修改为下图:

    在这里插入图片描述

3.3 华大hc32f460特有的坑

正常的app程序,有上面两部分就可以了,可是hc32f460编译会报一个错误:

Error: Q0147E: Failed to create Directory .\output\xxx.bin\ER$$.ARM.__AT_0x00000400: File exists

这个是在说0x00000400地址访问不到,查看map文件,发现在code部分的0x400地址竟然是个data,这就说明程序里面对0x400地址有特别操作,后来在程序中搜索400,结果找到这段代码:

在这里插入图片描述

注意:FLASH_BASE是我自己填的,若您看到应该括号只有0x400。

后来在用户手册找到了原因:

在这里插入图片描述

数据手册里面说,在上电后,程序会默认读地址为0x400这个地方的内容,配置一些东西,包括看门狗。

这样有一定好处,在stm32我们设置看门狗,都是在main函数里面开启,但是若程序还没执行到main函数里面的的开启看门狗程序,就死机了,那就真的死机了。但是华大的通过这个,可以在开机的时候直接启动看门狗,这样更安全。

但是当我更改了app的程序运行位置,这个0x400就不在我程序编译的范围内,所以要更改为:

在这里插入图片描述
其中,这两个宏是在上面 2.1节 定义的。

注意:这个程序在文件hc32f460_icg.c文件中定义的,若没有这个文件,需要手动从sdk库中添加此文件。

这样hc32f460的app基本就完成了。

4. boot loader的实现(未完成)

整理中。。。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-07 13:52:33  更:2022-02-07 13:53:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:31:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码