定时器初始化: 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天了,望各位前辈不吝赐教,感激不尽。 |
求助佬们,STM32U083 进行外部计数只能计数8000多一点
L9663驱动开发
stm32G474的flash模式如何判定?single bank 和dual bank
STM32F413ZGT6的NRST需要接上拉电阻吗
电机开发套件Workbench过流检测窗口参数疑问
【求问】ST无刷电机控制器-最高控制可调节转速是多少?
stm32mp257fai3 能否在uboot阶段同时启动m核与a核?
正在使用stm8作为从机与esp32进行i2c通讯,但是发现主机扫描的i2c地址与stm8从机设置的i2c地址不一样,请问如何解决?
cubeIDE在运行时显示Failed to execute MI command是什么问题呢?
stm32f103USART2无法收发信息
感谢回复,定时不短,可以算得出,就是2秒左右。可以确定是一启动就进中断,没计时的过程。那两个寄存器赋值不赋值我都试过,没有差异。
感谢回复!!单步执行的过程完全正常,跟预想的没有差别,状态寄存器在第一次溢出时才会置位,而且由0x00变成0x1F,具体为啥这样我也不清楚。
主贴里已经提到了:
在编译调试环境里单步运行的时候是正常的,能正常进入计数的进程,计数溢出后才进中断。
--------------------------------------
您说的加断点调试意思是不是看有没有开机直接进中断?调试时我在调试器里按F11单步运行的,显示的结果是正常的。开机做完初始化,使能计数器后下一步能看到主程序指针停留在死循环上,计数器在每运行一步时增加2-3个值,直到溢出才进中断。而如果把断点设在中断服务程序里,那么运行的时候,根本不会有停留,没有相应的计数步骤,直接就进中断了。
按程序里的初值和分频值,向上计数的情况下,每次溢出需要1.5秒左右。用LED显示应该能观察到有没有计时操作。
十分感谢您的回复和指点。马上先改一下。
我看到很多帖子说是清Timx_SR1的UIF位,我试过,没效果。也试过在Timx_PSCR赋值前置位Timx_CR1的ugs位置,也没有效果。。。
改过了,似乎对主帖提到的问题来说没什么改变