定时器初始化: void Init_Timer1(void) { TIM1_CR1=0x00; //不使能计数器 TIM1_ARRH=0x2F; //自动重装的值 TIM1_PSCRL=0xFF; //分频值,根据初值和分频值,定时在2秒多; TIM1_IER=0x01; //更新中断使能 TIM1_CR1=0x01; //使能计数器 } ------------------------ 中断服务程序: #pragma vector=TIM1_OVR_UIF_vector __interrupt void TIM1_OVR_UIF_IRQHandler(void) { asm("sim"); //关中断; PB_ODR^=0x20; //改变LED状态; TIM1_SR1=0x00; //清除状态寄存器; TIM1_CR1=0x00; //不使能计数器; asm("rim"); //开中断,然后中断返回; } ------------------------- B5端口初始化: void Init_GPIO(void) { PB_DDR|=0x20; PB_CR1|=0x20; PB_CR2&=0xDF; } ------------------------------------ 利用B5端口的推挽输出LED,通过LED亮灭判断状态。 现在问题是,一开机就会进中断,可以观察到LED迅速闪一下。按照预想的情况,开机应该是亮定时的时间后灭,实际不然。 在下开发环境是IAR,Debugger设备是ST-Link。在编译调试环境里单步运行的时候是正常的,能正常进入计数的进程,计数溢出后才进中断。 以上问题困扰在下2天了,望各位前辈不吝赐教,感激不尽。 |
Stm32G071 i2c slave配置问题
NUCLEO-F411RE板串口通讯问题
L9663驱动开发
关于STM8S IAR写程序内存的问题
推挽输出的电压
我希望用STM32MP157D_DK1运行qt程序 希望提供适配的arm gcc编译工具
小白求助,结束while循环后会跳转至循环前继续执行的问题?
请教STM8S003F3P6 eeprom和真开漏输出
STM32F723ZET6 定时器输入捕获通道的GPIO不能上拉
stm32f10x_tim.h文件编译错误?
感谢回复,定时不短,可以算得出,就是2秒左右。可以确定是一启动就进中断,没计时的过程。那两个寄存器赋值不赋值我都试过,没有差异。
感谢回复!!单步执行的过程完全正常,跟预想的没有差别,状态寄存器在第一次溢出时才会置位,而且由0x00变成0x1F,具体为啥这样我也不清楚。
主贴里已经提到了:
在编译调试环境里单步运行的时候是正常的,能正常进入计数的进程,计数溢出后才进中断。
--------------------------------------
您说的加断点调试意思是不是看有没有开机直接进中断?调试时我在调试器里按F11单步运行的,显示的结果是正常的。开机做完初始化,使能计数器后下一步能看到主程序指针停留在死循环上,计数器在每运行一步时增加2-3个值,直到溢出才进中断。而如果把断点设在中断服务程序里,那么运行的时候,根本不会有停留,没有相应的计数步骤,直接就进中断了。
按程序里的初值和分频值,向上计数的情况下,每次溢出需要1.5秒左右。用LED显示应该能观察到有没有计时操作。
十分感谢您的回复和指点。马上先改一下。
我看到很多帖子说是清Timx_SR1的UIF位,我试过,没效果。也试过在Timx_PSCR赋值前置位Timx_CR1的ugs位置,也没有效果。。。
改过了,似乎对主帖提到的问题来说没什么改变