Бдагодарю, буду знать.
Добавлено after 5 minutes 9 seconds:
Ещё вопросик знатокам - делаю захват значений таймера TIM4 CH4 по внешнему входу PB9 - захваты есть, прерывания идут, но читаю из TIM4->CCR4 и TIM4->CCR3 одни нули. Код инициализации:
Спойлер
Код: Выделить всё
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // Enabled Clock TIM4
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | // Enabled Alternate Function I/O clock
RCC_APB2ENR_IOPAEN | // Enabled Clock GPIO A
RCC_APB2ENR_IOPBEN | // Enabled Clock GPIO B
RCC_APB2ENR_IOPCEN | // Enabled Clock GPIO C
RCC_APB2ENR_TIM1EN; // Enabled Clock TIM1
GPIOB->CRH = GPIO_CRH_CNF9_0; // PB9 - TIM4/CH4 - Floatinh Input
TIM4->CR1 = 0; // Counter stopped
TIM4->CR2 = 0;
TIM4->PSC = 36-1; // Input Clock Prescaller - 36 MHz
TIM4->ARR = 0xFFFF; // TIM4 auto-reload register
TIM4->CCMR1 = 0;
TIM4->CCMR2 = TIM_CCMR2_OC3M_1 | // CC3 channel is configured as input, IC3 is mapped on TI4
TIM_CCMR2_CC4S_0; // CC4 channel is configured as input, IC4 is mapped on TI4
TIM4->CCER = TIM_CCER_CC3E | // Capture 3 enable
TIM_CCER_CC4E; // Capture 4 enable
TIM4->DIER = TIM_DIER_CC3IE | // Capture 3 interrupt enable
TIM_DIER_CC4IE; // Capture 4 interrupt enable
NVIC_SetPriority(TIM4_IRQn, 9);
NVIC_EnableIRQ(TIM4_IRQn); // Enable TIM4 Interrupt
TIM4->CR1 |= TIM_CR1_CEN; // Counter enabled
Добавлено after 2 hours 40 minutes 37 seconds:
Обработчик прерывания:
Спойлер
Код: Выделить всё
// ----------
void TIM4_IRQHandler (void) // Capture 3, 4 interrupt Flag
{
static u8 CntCCR3=0;
if(TIM4->SR & TIM_SR_CC3IF) // Check Capture 3 interrupt Flag
{
TIM4->SR = ~TIM_SR_CC3IF; // Clear Capture 3 interrupt Flag
if (CntCCR3 < 16) BufCapture3[CntCCR3++] = TIM4->CCR3;
else if (CntCCR3 >= 16)
{
TIM4->CR1 &= ~TIM_CR1_CEN; // Counter disabled
MakeScreenTIM4();
}
}
}