stm32 hid iap

IAP:

步骤:读取hex文件(与bin的区别),写入到iap中的ram区暂存;写flash;跳转。与正点原子的串口升级一样,但要在跳转前加关闭中断。
1.ROM/RAM,正常配置;
2.跳转前关中断再关闭定时器中断(HID中断不关,试过关了有问题)

3.升级时出现通讯断了或是断电,这样会出现以下几种情况

  3.1 如果ram不够,上位机下传一部分代码烧写一部分,很有可能时烧了hex的一部分,这样可能进入HardFault_Handler。

  3.2 刚好把数据传下去,还没来得及写flash。这时还好,超时后由于APP区的flash没有乱,还能进去。

  出现3.1情况就需要重上电才能升级。但有的设备与板卡同时上电,这样等电脑开机打开升级软件,stm32的iap早就过了。所以可以在HardFault_Handler中断里加个复位函数。这样可以不断电,重新点击升级按钮升级。

4.解锁与擦除flash间加个延时,不然有的芯片flash 擦不掉。

APP:
1. 配置ROM1-0x8010000/0xF0000
2. 开始设置偏移中断向量表
3. 在USB初始化后开启中断

4.可以添加复位功能,这样就不要重上电进入IAP,直接可以复位后进入IAP进行升级。

注意:iap中关hid中断不行,但是要关TIM(所有外设中断),不然APP中没有用到TIM(外设中断)会出问题。

stm32F2/4关USB外设:

RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_OTG_HS, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS, DISABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS_ULPI, DISABLE);
RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_OTG_HS, DISABLE);

RCC->AHB1RSTR &= ~0x20000000;
RCC->AHB1ENR &= ~0x20000000;
RCC->AHB1ENR &= ~0x40000000;
RCC->AHB1RSTR |= 0x20000000;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值