- 論壇徽章:
- 0
|
我用CodeSourcery工具鏈arm-none-eabi-gdb+openocd+jlink來(lái)調(diào)試stm32,我在80行下面這個(gè)函數(shù)這打了斷點(diǎn),但是輸入s命令后進(jìn)不去這個(gè)函數(shù),就死在硬中斷HardFault_Handler中了,但嘗試進(jìn)入別的函數(shù)就正常,不知道是怎么回事?
Breakpoint 2, Task_Start (p_arg=0x0) at main.c:80
80 TIM_CreateSampleTimer(SystemCoreClock / ADC_POINTS_PER_PERIOD / AI_POWER_FREQ_50HZ); //sample timer;
(gdb) s
^C
Program received signal SIGINT, Interrupt.
HardFault_Handler () at stm32f10x_it.c:64
64 {}
(gdb)
下面是這個(gè)函數(shù),函數(shù)本身無(wú)錯(cuò)誤,不知道為什么輸入s命令后進(jìn)不到這個(gè)函數(shù)中?
void TIM_CreateSampleTimer(UINT32 ticks)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = ticks - 1; //(UINT32)((FLOAT32)20.0/ADC_POINTS_PER_PERIOD *320 -1); /* 自動(dòng)重裝載寄存器周期的值(計(jì)數(shù)值) */
/* 累計(jì) TIM_Period個(gè)頻率后產(chǎn)生一個(gè)更新或者中斷 */
TIM_TimeBaseStructure.TIM_Prescaler = 0; /* 時(shí)鐘預(yù)分頻數(shù) 例如:時(shí)鐘頻率=72MHZ/(時(shí)鐘預(yù)分頻+1) */
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /* 采樣分頻 */
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /* 向上計(jì)數(shù)模式 */
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// TIM_UpdateRequestConfig(TIM2,TIM_UpdateSource_Regular);//向上、向下計(jì)數(shù)溢出產(chǎn)生更新事件
// TIM_GenerateEvent(TIM2,TIM_EventSource_CC2); //設(shè)置產(chǎn)生的事件源
// TIM_UpdateDisableConfig(TIM2,DISABLE); //允許更新事件產(chǎn)生
TIM_ClearFlag(TIM2, TIM_FLAG_CC2); //清除更新事件標(biāo)志
TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
TIM_Cmd(TIM2, ENABLE); /* 開(kāi)啟時(shí)鐘 */
}
|
|