proteusstm32仿真无法进入定时器中断
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了proteusstm32仿真无法进入定时器中断相关的知识,希望对你有一定的参考价值。
如果ProteusSTM32仿真无法进入定时器中断,可能是因为定时器中断的配置问题造成的。请检查定时器中断的中断优先级是否已正确设置,并且中断函数是否已正确添加到中断向量表中,最后再检查中断是否已正确使能,这样就可以保证定时器中断的正常运行了。 参考技术A 出现这样的情况,可以用示波器测试外部晶振是否起振或者用电压表测晶振一个引脚的电压是否为0.5VCC左右,两个脚的电压差一般是0.5V,电压不可能相等,或者可以切换到内部高速时钟源进行测试。2、定时器初始化的代码出现问题,常见的定时器的初始化函数没有放到main函数中去,而只是把PWM波的初始化放到了main函数中,这两者的功能是分开的,通用定时器的功能很多 参考技术B (6)Proteus 8.9上的STM32仿真系列(HAL/Cubemax)—定时器中断**实验设计:**设置TIM3每500ms中断一次,同时翻转PA0输出电平,闪烁LED。
**友情提示:**仿真TIM3 PWM输出无波形,但板子上程序正常,哪位同志成功用定时器输出波形了请留言。
一、Proteus配置
1.如图放置元件,芯片仍为STM32 F103R6TX。
二、CUBEMAX IDE配置
1.老样子开启RCC配置时钟。
2.配置PA0输出
3.开启TIM3,选择internalClock,Parameters Settings选项卡下设置Prescaler(PSC分频系数)和CounterPeriod,在NVIC Settings下打开中断。 TIM3延时时间计算:
((CounterPeriod+1)x(Prescaler+1))/APB1时钟
本次延时:(8k x 500)/8M=0.5秒(我仿真频率设置的低,同志们在自己时钟配置界面看)
计算时要加1是因为计数从0开始。
4.generate code,在main.c中添加PA0初始化电平,再找个位置把TIM3中断回调函数放进去。
5.设置HEX导出,build all
三、仿真 参考技术C 答:proteusstm32仿真无法进入定时器中断 1、外部晶振不起振,可以用示波器测试外部晶振是否起振或者用电压表测晶振一个引脚的电压是否为0.5VCC左右,两个脚的电压...
proteus仿真+stm32定时器中断 - 24小时必 在proteus上面的结果:串口没有输出,LED0没有进行翻转(这是我判断中断没 参考技术D 今天发现定时器中断总是进不去.发现了2个问题一.生成的配置文件有问题需要点好几次NVIC中断,才能生成合格的代码. 生成的tim.c文件中应该有 HAL_NVIC_EnableIRQ(TIM2_IRQn);才能开启中断. 先确认下生成的代码有没有问题, 如果没有那么需要去勾上Nvic中断 再去掉.生成代码来回折腾几次就出来了.二 . 定时器开中断没有开启,定时器开中断默认是没有开启...
为啥这无法进入中断
参考技术A 我刚看错了你要测P1.2的周期,我感觉应该把P1.2口设置成中断,上升沿或者下降沿中断,在P1.2口中断中设置一个计数常数初值为0,当第一次进中断的时候设置定时器开始计时,然后判断计数常数是否等于你要求的值,不等于则加一,等于则停止定时器,这时定时器的定时时间除以计数常数就是周期了(你可以把计数常数设置成10,100,1000...)这样方便计算。知道怎么做吧
至于你说定时器无法进中断我就不晓得是不是没开全局中断还是怎么的,下面是我临时编的一个程序,定时器定时是0.01S,当然了我用的晶振是11.0592MHz的,你可以根据不同的晶振算出定时时间,最后的周期就是T_timex0.01/100,你试试看,不懂得再问吧
#include "msp430x44x.h"
unsigned char T_count=0; //周期计数常数
unsigned char T_time=0; //定时时间常数
unsigned char Flag=0;
//测试周期完成标志
void Time_1(void);//定时器time_3初始化
void P1.2_Init(void);//端口函数初始化
void main( void )
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1.2_Init();
_EINT();
void Time_1(void)//定时器time_3初始化
TA0CCR0=0X21C0;// 定时常数
TA0CTL = TASSEL_2+ID_3 + MC_1;//时钟选择SMCLK;8分频;增模式;
TA0CCTL0 = CCIE;//中断允许
void P1.2_Init(void)//端口函数初始化
P1SEL&=~+BIT2;//设置P1.2端口为I/O端口
P1DIR&=~BIT2;//设置P1.2端口为输入口
P1IES|=BIT2;//设置P1.2端口下降沿中断
P1IE|=BIT2;//打开P1.2端口中断
#if __VER__<200
//interrupt [PORT1_VECTOR] void P.12_interrupt(void)
#else
#pragma vector=PORT1_VECTOR
__interrupt void P1.2_interrupt(void)
#endif
if(T_Count==0)
Time_1();//如果计时常数等于0,开始定时
else if(T_Count==100)
TA0CTL| = MC_0;//停止计时
Flag=1;//周期测试完毕标志
else
T_Count++;//否则计时常数加一
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
if(Flag!=0)//如果周期没有测试完,则时间继续增加
Time_1();
T_time++;
else//周期测试完成,停止计数器
TA0CTL =MC_0;
以上是关于proteusstm32仿真无法进入定时器中断的主要内容,如果未能解决你的问题,请参考以下文章