打印
[STM32F1]

求高手解救:app跳转到boot后can无法通信

[复制链接]
1409|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanmanck|  楼主 | 2013-12-17 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位:
用的是f103,结构为boot+app。
现在由于升级时要保持io电平,所以从app跳到boot,而不是重启。
跳转时我对每个模块都重新复位然后时钟禁止了,但是跳到boot后can不能用!因为flash有保存标志,重启后进入boot就没问题,所以跳转前还需要做哪些事情?如下是复位外设代码:

/* 把所有外设复位,先使能时钟,不然不能进行外设复位.
     */
    RCC->APB1ENR = 0x3FFFFFFF;
    RCC->APB2ENR = 0x3FFFFF;
    RCC->AHBENR = 0x5F;

    /* 然后复位. */
    jump_addr = 0x3FFFFFFF;
    RCC->APB1RSTR |= jump_addr;
    RCC->APB1RSTR &= ~jump_addr;

    /* 如果从app跳入boot,则IO PB7不能复位. */
    jump_addr = 0x3FFFFF;
    if(addr==FLASH_BASE){
        jump_addr &= ~RCC_APB2Periph_GPIOB;
    }
    RCC->APB2RSTR |= jump_addr;
    RCC->APB2RSTR &= ~jump_addr;

#ifdef STM32F10X_CL
    jump_addr = RCC_AHBPeriph_OTG_FS|RCC_AHBPeriph_ETH_MAC;
    RCC->AHBRSTR |= jump_addr;
    RCC->AHBRSTR &= ~jump_addr;
#endif

    /* 最后,时钟全部停掉. */
    jump_addr = 0x3FFFFFFF;
    RCC->APB1ENR &= ~jump_addr;

    jump_addr = 0x3FFFFF;
    if(addr==FLASH_BASE){
        jump_addr &= ~RCC_APB2Periph_GPIOB;
    }
    RCC->APB2ENR &= ~jump_addr;
    RCC->AHBENR &= ~0x5F;


沙发
lanmanck|  楼主 | 2013-12-17 13:20 | 只看该作者
中断也全部清了,还是没戏

使用特权

评论回复
板凳
SLEET1986| | 2013-12-17 13:22 | 只看该作者
不可以调试吗?

使用特权

评论回复
地板
lanmanck|  楼主 | 2013-12-17 13:38 | 只看该作者
SLEET1986 发表于 2013-12-17 13:22
不可以调试吗?

怎么调呢?
跳来跳去,只能靠打印了

使用特权

评论回复
5
拿起书本| | 2013-12-17 16:15 | 只看该作者
跳到APP以前把CAN关闭了,进入APP重新初始化一下CAN看看。

使用特权

评论回复
6
lanmanck|  楼主 | 2013-12-17 17:49 | 只看该作者
如一楼所示,全部外设都已经复位后时钟关了。

使用特权

评论回复
评论
SLEET1986 2013-12-18 08:38 回复TA
跳转的地址对不?复位开机boot里面可以可以通信? 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:跟阿里云拼了: http://www.qcloud.com/redirect.php?redirect=1001&cps_key=361a94179534e81fbc22912619cc97ef

153

主题

397

帖子

3

粉丝