你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助!stm8s103K3开启TIM4更新中端,修改程序代码地址0x9000后程序一直重新执行。

[复制链接]
qwe111 提问时间:2021-12-16 11:11 / 已解决

image.png

代码:

// TIM4更新中断服务函数
@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
        //int g_counter =0;
        //g_counter++;
        UART1_SendByte('E');
        TIM4_SR = 0x00;// 清零更新中断标志位
}

// TIM4初始化
void TIM4_INIT(void)
{
        // 设置TIM4预分频系数,64 
        TIM4_PSCR = 0x06;
        // 设置TIM4计数最大值
        TIM4_ARR = 0xFA;
        // 使能TIM4更新中断
        TIM4_IER = 0x01;
        // 设置TIM4计数器初始值
        TIM4_CNTR = 0xFA;
}

int main(void)
{
        int i = 0;
        CLK_INIT();
        UART1_INIT();
        TIM4_INIT();
        _asm("rim");
        UART1_SendByte('b');
        TIM4_CR1 |= 0x01;// 使能TIM4
        i = 2 * 6;
        i += 5;
        UART1_SendByte('E');
}
// TIM4更新中断服务函数
@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
        UART1_SendByte('E');
        TIM4_SR = 0x00;// 清零更新中断标志位
}

程序执行会一直输出b。 执行完TIM4_CR1 |= 0x01,执行i = 2 * 6会跳到0x3f4地址,而不是顺序执行下去,这是什么原因导致的?

收藏 评论6 发布时间:2021-12-16 11:11

举报

6个回答
butterflyspring 最优答案 回答时间:2021-12-16 15:11:33
你的向量表地址为什么会改成0x9000呢? STM8 的复位后向量固定在0x8000, 除非你前面有IAP的代码。 否则发生中断后,PC跑到0x8000到0X8080区间对应的入口找到不正确的地址就会跑飞。 如果没有IAP应用,不要改变向量表的地址哦。
qwe111 回答时间:2021-12-16 11:16:23

补充:不使能TIM4更新中断或恢复程序起始地址为0x8000,程序就能正常运行.

xmshao 回答时间:2021-12-16 14:51:08
看来可能跟TIM4的中断有关,你在初始化外TIM4后在使能更新中断前,对更新事件的中断请求位做个清零看看。


就像这样操作:




  TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);




  TIM4_ClearFlag(TIM4_FLAG_UPDATE);



  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
qwe111 回答时间:2021-12-16 16:17:11

butterflyspring 发表于 2021-12-16 15:11
你的向量表地址为什么会改成0x9000呢? STM8 的复位后向量固定在0x8000, 除非你前面有IAP的代码。 否则发 ...

哦哦,明白了。感谢!

xmshao 回答时间:2021-12-16 16:18:01

qwe111 发表于 2021-12-16 11:16
补充:不使能TIM4更新中断或恢复程序起始地址为0x8000,程序就能正常运行.
...

有人提醒你了。

你那个中断矢量表地址是不能轻易改的。

qwe111 回答时间:2021-12-16 16:19:01

xmshao 发表于 2021-12-16 16:18
有人提醒你了。</p>
<p>你那个中断矢量表地址是不能轻易改的。

[md]嗯嗯,感谢解答

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版