高级会员
- 积分
- 950
- 威望
- 490
- 贡献
- 234
- 兑换币
- 314
- 注册时间
- 2013-11-5
- 在线时间
- 113 小时
- 毕业学校
- 棣棠中心校
|
昨天,今天写程序总是跑飞。调节速度PID时,程序总是出各种问题。电机运行10s左右就不动了,然后今天我就只留下测编码器脉冲的程序,结果还是一样,串口显示******内核发生硬件错误******。求帮助,我编程不好,不知道是啥问题。
#include "common.h"
GPIO_InitTypeDef gpio_init_struct;
FTM_InitTypeDef ftm_init_param;
PIT_InitTypeDef pit_init_param;
LPTMR_InitTypeDef lptmr_init_param;
uint16_t GetFreq;
uint16_t GetCnt;
void pit_isr0();
void main (void)
{
DisableInterrupts;
gpio_init_struct.GPIO_PTx = PTA; //PORTA
gpio_init_struct.GPIO_Pins = GPIO_Pin9; //引脚9
gpio_init_struct.GPIO_Dir = DIR_OUTPUT; //输出
gpio_init_struct.GPIO_Output=OUTPUT_L;
LPLD_GPIO_Init(gpio_init_struct);
ftm_init_param.FTM_Ftmx = FTM1;
ftm_init_param.FTM_PwmFreq = 10000;//100Khz
ftm_init_param.FTM_Mode = FTM_MODE_PWM;
//初始化PIT
pit_init_param.PIT_Pitx = PIT0;
pit_init_param.PIT_PeriodMs = 20;//20ms
pit_init_param.PIT_Isr = pit_isr0;
//LPTMR_MODE_PLACC脉冲累加模式
//禁用中断
//无中断函数
lptmr_init_param.LPTMR_Mode = LPTMR_MODE_PLACC;
lptmr_init_param.LPTMR_PluseAccInput = LPTMR_ALT1;
lptmr_init_param.LPTMR_Isr = NULL;
//FTM,PIT,LPTMR初始化
LPLD_PIT_Init(pit_init_param);
LPLD_PIT_EnableIrq(pit_init_param); //使能PIT中断
LPLD_FTM_Init(ftm_init_param);
LPLD_LPTMR_Init(lptmr_init_param);
LPLD_FTM_PWM_Enable(FTM1,FTM_Ch0,0,PTA8,ALIGN_LEFT);
GetFreq=0;
GetCnt=0;
LPLD_GPIO_Output_b(PTA,9,0);
LPLD_FTM_PWM_ChangeDuty(FTM1, FTM_Ch0,1000);
EnableInterrupts;
while(1)
{
asm("nop");
}
}
void pit_isr0()
{
GetFreq=LPLD_LPTMR_GetPulseAcc();
printf("%d\n",GetFreq);
LPLD_LPTMR_ResetCounter(); //复位LPTMR0 counter
LPLD_LPTMR_Init(lptmr_init_param);
}
|
|