вот это круто, собственно не поделитесь секретом? сам делаю так:
void EXTI0_Config(void)
{
// Configure EXTI0 line
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
// Enable and set EXTI0 Interrupt to the lowest priority
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//0x0F;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
if (flag==0)
{
flag = 1;
GPIOA->BSRR = GPIO_BSRR_BR12;
}
else
{
flag = 0;
GPIOA->BSRR = GPIO_BSRR_BS12;
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void GPIO_Configuration(void)
{
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
// Connect EXTI0 Line to PE0 pin
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0);
}
тактирование включаю как обычно:
void RCC_Configuration(void)
{
RCC_ClocksTypeDef RCC_ClockFreq;
RCC_DeInit(); // RCC system reset сбрасываем
RCC_HSEConfig(RCC_HSE_ON); // включаем внешний генератор HSE 25MHz
HSEStartUpStatus = RCC_WaitForHSEStartUp(); // ждем пока включится
if(HSEStartUpStatus != ERROR)
{
// Enable Prefetch Buffer
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // включаем буферизацию для флеша
//***************************************************************
// HSE=25MHz, HCLK=72MHz, PCLK2=72MHz, PCLK1=36MHz
//***************************************************************
// Flash 2 wait state
FLASH_SetLatency(FLASH_Latency_2);
// HCLK = SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// PCLK2 = HCLK
RCC_PCLK2Config(RCC_HCLK_Div1);
// PCLK1 = HCLK/2
RCC_PCLK1Config(RCC_HCLK_Div2);
// Configure PLLs ********************************************************
// PPL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz
RCC_PREDIV2Config(RCC_PREDIV2_Div5);
RCC_PLL2Config(RCC_PLL2Mul_8);
// Enable PLL2
RCC_PLL2Cmd(ENABLE);
// Wait till PLL2 is ready
while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET){}
// PPL1 configuration: PLLCLK = (PLL2 / 5) * 9 = 72 MHz
RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
// Enable PLL
RCC_PLLCmd(ENABLE);
// Wait till PLL is ready
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}
// Select PLL as system clock source
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// Wait till PLL is used as system clock source
while (RCC_GetSYSCLKSource() != 0x08);
}
RCC_GetClocksFreq(&RCC_ClockFreq);
// Enable GPIOs clocks
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
}
-
- разница скорее всего в обработчике прерывания koyodza(739 знак., 20.01.2012 19:33 - 19:35)
- да, действительно задержка оказалась в этом месте, большое спасибо! pulo(57 знак., 23.01.2012 09:23)
- разница скорее всего в обработчике прерывания koyodza(739 знак., 20.01.2012 19:33 - 19:35)