新手上路
- 积分
- 40
- 金钱
- 40
- 注册时间
- 2019-5-10
- 在线时间
- 16 小时
|

楼主 |
发表于 2020-1-13 16:35:58
|
显示全部楼层
试了,貌似是正常的,然后我又裸机试了一下,还是进hardfault,然后调试发现有很大概率是在定时器中断处进hardfault。理论上405和407应该没有大区别吧,代码应该能够通用吧。贴上定时器代码。
void TIM3_Int_Init(u32 arr,u32 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM7时钟
TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM3,ENABLE); //使能定时器3
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=5; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//定时器7中断服务函数
void TIM3_IRQHandler(void)
{
static int last_cnt=0;
int now_cnt=0;
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
//now_cnt = (int)TIM5->CNT;
//CableLinearSpeed = (float)(now_cnt - last_cnt)/4.0f/0.01f*WHEEL_DIM*PI;
//last_cnt = now_cnt;
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
|
-
|