STM32F373 captura de entrada

0

Tengo un problema al intentar que la captura de entrada funcione en uno de los pines stm32f373 (PB0, TIM3 CH2). La razón por la que estoy atrapado con este pin es porque lo hago en mi propia tabla personalizada con stm32f373rbt6. El resto de los pines se toman o no tienen la funcionalidad correspondiente adjunta. Estoy seguro de que la PCB está bien y los rastros están bien (hice una verificación de continuidad desde la fuente hasta el pin). En stm32f373rbt6, PB0 también podría configurarse como una entrada analógica para el módulo ADC sigma-delta incorporado. Pero como mi proyecto no requiere ningún anuncio, ni siquiera lo he tocado o configurado en ningún lugar de mi código. A continuación se muestra el código y el controlador de IRQ correspondiente.

Por favor, avíseme si encuentra algún error de configuración.

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_1);
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_2);
GPIO_Init(GPIOB,&GPIO_InitStructure);

TIM_ICInitTypeDef TIM_ICInitStruct;
TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
TIM_ICInitStruct.TIM_ICFilter=0x0;
TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;

TIM_ICInit(TIM2,&TIM_ICInitStruct);
TIM2->CCER |= TIM_CCER_CC1E;


TIM_ICInitStruct.TIM_Channel=TIM_Channel_2;
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
TIM_ICInit(TIM3,&TIM_ICInitStruct);
TIM3->CCER |= TIM_CCER_CC2E;

TIM_Cmd(TIM3,ENABLE);
TIM_Cmd(TIM2,ENABLE);

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_Init(&NVIC_InitStructure);

TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
TIM_ITConfig(TIM3,TIM_IT_CC2 ,ENABLE);


void TIM3_IRQHandler(void){
__disable_irq();
++capture;
GPIOE->ODR ^=GPIO_Pin_9;
if((TIM3->SR & TIM_SR_CC2IF))
{
    GPIOE->ODR ^=GPIO_Pin_9;
    TIM3->SR=(uint16_t)~TIM_SR_CC2IF;
}
EncoderFreqQuery(TIM3,&RightFreq);
__enable_irq();
}
    
pregunta Asusrog

1 respuesta

1

Según la hoja de datos, PB0 AF2 es TIM3_CH3 y no TIM3_CH2. Me gustaría cambiar a esto:

TIM_ICInitStruct.TIM_Channel=TIM_Channel_3;
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
TIM_ICInit(TIM3,&TIM_ICInitStruct);

O simplemente cambie a AF10 para PB0 (que es PB0 TIM3_CH2):

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_10);
GPIO_Init(GPIOB,&GPIO_InitStructure);
    
respondido por el staringlizard

Lea otras preguntas en las etiquetas