打印
[STM32F1]

程序在RAM中运行,中断在FLASH中运行的问题

[复制链接]
1247|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bobo0o|  楼主 | 2017-3-2 10:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我使用SWD在RAM中进行调试,发现主程序是在RAM中进行修改,写入都可以正常运行。但是中断程序只有写入FALSH才能被修改,只写入RAM中断的程序不会被修改


void TIM2_IRQHandler(void)
{
        u8 ReadLed;
        if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
        {                       
                TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);
                ReadLed=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_10);
                if(ReadLed)
                        GPIOB->BRR = GPIO_Pin_10;
                else
                        GPIOB->BSRR = GPIO_Pin_10;
        }
}


就像这个我修改引脚,写入RAM中。运行的输出引脚不会变,只有写入FALSH才会改变。
沙发
自然的天逸| | 2017-3-2 11:39 | 只看该作者
还需要设置中断向量表   /* Set the Vector Table base location at 0x20000000 */
// NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

使用特权

评论回复
板凳
自然的天逸| | 2017-3-2 11:40 | 只看该作者
需要在main 函数 第一行调用

使用特权

评论回复
地板
bobo0o|  楼主 | 2017-3-2 16:49 | 只看该作者
自然的天逸 发表于 2017-3-2 11:39
还需要设置中断向量表   /* Set the Vector Table base location at 0x20000000 */
// NVIC_SetVectorTable ...

我在配置中断前加了
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x20000000);
然后就可以了,谢谢。

使用特权

评论回复
5
chenci2013| | 2017-3-2 23:08 | 只看该作者
STM32直接下载不可以吗

使用特权

评论回复
6
chenci2013| | 2017-3-2 23:10 | 只看该作者
STM32可以烧写10W次。

使用特权

评论回复
7
bobo0o|  楼主 | 2017-3-9 09:22 | 只看该作者
chenci2013 发表于 2017-3-2 23:10
STM32可以烧写10W次。

咦,不是只有1000次吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

粉丝