Я реализую проект с использованием микроконтроллера stm32f103. Обычно я использую Timer2 для подсчета внешнего импульса.
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_tim.h" // timer library
#include "misc.h"
/* Built-in LED */
#define LEDPORT (GPIOC)
#define LEDPIN (GPIO_Pin_13)
int main(void){
/* gpio init struct */
GPIO_InitTypeDef gpioInit;
/* enable clock for GPIOA thru ABP2 peripheral communication bus */
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC->APB2ENR |= RCC_APB2Periph_GPIOC;
/* use LED pin */
gpioInit.GPIO_Pin = LEDPIN;
/* mode: output */
gpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
gpioInit.GPIO_Speed = GPIO_Speed_2MHz;
/* apply configuration */
GPIO_Init(LEDPORT, &gpioInit);
/* clear built-in led */
GPIO_SetBits(LEDPORT, LEDPIN);
/* Enable timer clock */
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC->APB1ENR |= RCC_APB1Periph_TIM2;
/* Configure channel 2 as input, mapped on the Timer Input 1 (TI1) */
TIM2->CCMR1 |= TIM_CCMR1_CC2S_1;
/* Configure channel 2 detecting falling edge polarity */
TIM2->CCER |= TIM_CCER_CC2P;
/* Configure TIM2 in External Clock Mode 1 & select TI2 as the input source */
TIM2->SMCR |= TIM_SMCR_SMS | TIM_SMCR_TS_2 | TIM_SMCR_TS_1;
/* Enable the counter by writing CEN=1 in the TIMx_CR1 register */
// TIM_Cmd(TIM2, ENABLE);
TIM2->CR1 |= TIM_CR1_CEN;
/* Enable interrupt trigger. */
// TIM_ITConfig(TIM2, TIM_IT_Trigger, ENABLE);
TIM2->DIER |= TIM_DIER_TIE;
for (;;){
if (TIM_GetITStatus(TIM2, TIM_IT_Trigger) != RESET){
TIM_ClearITPendingBit(TIM2, TIM_IT_Trigger);
LEDPORT->ODR ^= LEDPIN;
}
}
/* never reach */
return 0;
}
Код работает хорошо. Чего я не понимаю, так это
/* Configure CC2S bits = 10: CC2 channel is configured as input, IC2 is mapped on TI1 */
TIM2->CCMR1 |= TIM_CCMR1_CC2S_1;
, который предполагает использование входа таймера 1, но я должен настроить вход триггера на вход фильтрованного таймера 2
/* Configure TIM2 in External Clock Mode 1 & select TI2 as the input source (110: Filtered Timer Input 2 (TI2FP2))*/
TIM2->SMCR |= TIM_SMCR_SMS | TIM_SMCR_TS_2 | TIM_SMCR_TS_1;
Кто-нибудь может уточнить для меня?