完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求助,把AVR的程序移植使用STM8时发现,触发外部中断后,程序跳到中断函数并运行,但运行完中断函数之后并没有回到主函数里面执行while 里面的程序。再次触发外部中断时,又会继续运行中断函数,但执行完中断函数后又不跳转到主函数。
尝试了STM8S105k4和STM8S207C8都一样的结果,求指点一下。 下面是[size=14.3999996185303px]STM8S207C8的程序,[size=14.3999996185303px]把多余的删了,PG0是LED灯,PC7是触发外部中断的引脚。配置[size=14.3999996185303px]PC7为下降沿触发。开机后led开始慢慢闪,触发中断后,转换一下状态,但之后灯就停住不动了,不会慢闪。再次触发中断,又会翻转,但闪完后又不动了。 应该是跟中断里面的延时有关,把延时函数注释掉后,程序正常。但加入延时后,程序就不正常了。不太懂,特地来请教一下。 int main(void) { master_clk(); time4_delay_init(); asm("sim"); PG_DDR=0XFF; PG_CR1=0XFF; PG_CR2=0XFF; PG_ODR_ODR0=1;// PC_DDR_DDR7=0; PC_CR1_C17=1; PC_CR2_C27=1; EXTI_CR1 =2<<4; asm("rim"); while(1) { delay_ms(100); PG_ODR_ODR0=!PG_ODR_ODR0; } } #pragma vector=0x07 __interrupt void a() { PG_ODR_ODR0=!PG_ODR_ODR0; delay_ms(10); } ---------------------------------------------------------------------------------------- void time4_delay_init() { TIM4_CR1=0x00; TIM4_IER=0x00; TIM4_EGR=0x01; //delay_ms TIM4_PSCR=0x07;//128分频,16M/128=0.125M->8us TIM4_ARR=0x7D;//8us*125 } void delay_ms(u16 t) { TIM4_CR1 |=0x01; while(t--) { while (!(TIM4_SR 0x01)); TIM4_SR =0xfe; } TIM4_CR1 =0xfe; } |
|
相关推荐
1个回答
|
|
在将AVR程序移植到STM8时,可能会遇到一些差异,导致程序行为与预期不符。根据您的描述,问题似乎出在外部中断触发后无法返回主函数。以下是一些建议和可能的解决方案:
1. 确保中断优先级设置正确:在STM8中,中断优先级可能影响中断服务程序(ISR)的执行顺序。请检查您的中断优先级设置,确保外部中断具有适当的优先级。 2. 检查中断标志位:在STM8中,中断标志位需要在ISR中清除。确保在中断服务程序的末尾清除了相应的中断标志位。例如,如果您使用的是EXTI中断,需要在ISR中清除EXTI_FLAG(例如:EXTI_FLAG = 0x00;)。 3. 检查堆栈溢出:如果ISR过长,可能会导致堆栈溢出,从而使程序无法返回主函数。尝试简化ISR,减少局部变量和函数调用,以降低堆栈使用。 4. 使用中断返回指令:在STM8中,可以使用IRET(Interrupt Return)指令从中断服务程序返回。确保在ISR的末尾添加IRET指令,以便返回主函数。 5. 检查主函数中的while循环:确保while循环中的代码不会阻止程序继续执行。例如,避免在while循环中使用长时间的延时或死循环。 6. 确保时钟配置正确:STM8和AVR的时钟配置可能有所不同。检查您的STM8时钟配置,确保它与AVR程序中的时钟配置相匹配。 7. 检查GPIO配置:确保STM8的GPIO配置与AVR程序中的配置相匹配,包括引脚方向、上拉/下拉电阻等。 8. 使用STM8的库函数:STM8提供了一些库函数,可以帮助您更轻松地实现特定功能。尝试使用这些库函数,而不是直接移植AVR代码。 9. 调试和仿真:使用STM8的调试工具和仿真器,逐步执行程序,观察中断服务程序和主函数之间的跳转。 10. 参考STM8官方文档和示例代码:STM8官方文档和示例代码可以帮助您了解STM8的特定行为和实现方式。参考这些资源,确保您的程序遵循STM8的编程规范。 希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多关于您的程序和硬件配置的详细信息,以便进一步分析和解决。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1685 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1588 浏览 1 评论
1013 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
706 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1631 浏览 2 评论
1893浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
679浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
539浏览 3评论
559浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
527浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-5 07:20 , Processed in 0.848741 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号