Цитата(sparcmaster @ Jan 19 2012, 09:40)

Тогда все просто, с Кейлом идут примеры же, посмотрите такой проет - Keil\ARM\Boards\Keil\MCBSTM32\EXTI
Если что-то не понятно конкретно спрашивайте.
не понятно одно, вроде получилось натсроить перрывания. Пытаюсь подсчитать частоту сигналов на входе. Но активным уровнем является 0. Но их частота получается меньше в 2 раза, чем показывает мультиметр.
Код
void EXTI9_5_IRQHandler(void)
{
static uint16_t a;
if (EXTI->PR&(1<<7)) // Прерывание от EXTI7?
{
EXTI->PR|=(1<<7);
if (!(GPIOC->IDR&GPIO_IDR_IDR7))
a++;
else if (a)
{
a=0;
SSQuantity++;
}
}
}
void InitSpeedSensorTmr (TIM_TypeDef* TIM,unsigned short delay)
{
TIM_TimeBaseInitTypeDef Tim_InitStruct;
Tim_InitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
Tim_InitStruct.TIM_CounterMode=TIM_CounterMode_Up;
Tim_InitStruct.TIM_Period=delay; // delay on 1.5 symb=750, 3.5 symb=1750 mks for speed under 19200,
Tim_InitStruct.TIM_Prescaler=35999; //36MHz/(35999+1)=1000
TIM_TimeBaseInit(TIM,&Tim_InitStruct);
SpeedSensorTmrOn();
}
void TIM5_IRQHandler (void) // если сработало прерывание на 1 sec
{
if (TIM_GetITStatus(TIM5,TIM_IT_Update))
{
TIM_ClearITPendingBit(SSTIMER,TIM_IT_Update); //
SpeedSensorTmrOff();
if (SSQuantity)
{
SSFreq=SSQuantity/1;
HoldingRegister[SS_FREQ_CURRENT]=SSFreq;
GetAutoSpeed();
SSQuantity=0;
}
else SSFreq=0;
SpeedSensorTmrOn();
}
}
Нога, на которую подается частота - PC.7. Камень stm32f103vet.