stm32程序用到中断和定时器,一通电程序就跑飞了,怎么回事????

stm32程序用到中断和定时器,一通电程序就跑飞了,怎么回事????,第1张

霍尔传感器返回的是脉冲信号么?

如果是脉冲信号并且转速不是太快的话可以采用外部中断。

你采用定时器中断也是可以的。但是要注意:一、配置的时候建议你将IO采集口设置为下拉,IPD。浮空可能因为你的信号不稳定而产生干扰。二、设定你的中断优先级。哪个更优先的问题,因为你采样两组脉冲,建议使用响应式中断,不要采用抢占式。

中断服务函数和中断向量表对应起来了么,stm32的设计是tim1的不同中断单独不同的中断源,一定要看清楚了。同时自己编写的中断服务函数一定要和启动文件中定义的中断向量表对应起来。两者不一致则程序就会执行汇编文件中定义的默认服务函数,一个无限循环。做到这两点程序至少不会跑飞了。剩下的事情需要注意的是在中断服务函数中清楚中断源。

给你看看原子的外部时钟配置

//系统时钟初始化函数

//pll:选择的倍频数,从2开始,最大值为16

//CHECK OK

//091209

void Stm32_Clock_Init(u8 PLL)

{

unsigned char temp=0   

MYRCC_DeInit()  //复位并配置向量表

RCC->CR|=0x00010000  //外部高速时钟使能HSEON

while(!(RCC->CR>>17))//等待外部时钟就绪

RCC->CFGR=0X00000400 //APB1=DIV2APB2=DIV1AHB=DIV1

PLL-=2//抵消2个单位

RCC->CFGR|=PLL<<18   //设置PLL值 2~16

RCC->CFGR|=1<<16  //PLLSRC ON 

FLASH->ACR|=0x32  //FLASH 2个延时周期

RCC->CR|=0x01000000  //PLLON

while(!(RCC->CR>>25))//等待PLL锁定

RCC->CFGR|=0x00000002//PLL作为系统时钟 

while(temp!=0x02)     //等待PLL作为系统时钟设置成功

{   

temp=RCC->CFGR>>2

temp&=0x03

}    

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11274897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存