[mw_shl_code=c,true][/mw_shl_code]
这是子函数
[mw_shl_code=c,true] #include"time.h"
#include "flash.h"
u32 run_time_ms=0;
u8 run_time_ms_save[4];
u32 ADDR_RUN_TIME=0x000004;
//定时器3,中断
void tim4_Timing_init( u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
NVIC_InitStruct.NVIC_IRQChannel=TIM4_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x00;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x03;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
TIM_Cmd(TIM4,ENABLE);
}
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET)
{
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
run_time_ms++;
run_time_ms_save[0]=(u8)((run_time_ms&0x000000FF)>>0);
run_time_ms_save[1]=(u8)((run_time_ms&0x0000FF00)>>8);
run_time_ms_save[2]=(u8)((run_time_ms&0x00FF0000)>>16);
run_time_ms_save[3]=(u8)((run_time_ms&0xFF000000)>>24);
SPI_Flash_Write(run_time_ms_save,ADDR_RUN_TIME,4);
}
}
[/mw_shl_code]
这是调用函数
[mw_shl_code=c,true]u16 arr_tim4_tim=1000-1,psc_tim4_tim=72-1; //1us计数一次
[/mw_shl_code]
[mw_shl_code=c,true]tim4_Timing_init(arr_tim4_tim,psc_tim4_tim);[/mw_shl_code]
调试发现程序卡在这个语句过不去了,pBuffer=SPI2_ReadWriteByte(0XFF);
求指教
|