ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
300849 Топик полностью
pulo (20.01.2012 19:21, просмотров: 188) ответил koyodza на около 400 нс при тактовой 72 МГц
вот это круто, собственно не поделитесь секретом? сам делаю так: 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); }