蓝桥杯嵌入式——第七届决赛-温湿度监控设备

蓝桥杯嵌入式——第六届决赛-温湿度监控设备

一、赛题分析

这一届是最后一届不用扩展板的国赛了,从下一届也就是第八届开始,就开始使用扩展板了。
我觉得这一届是不用扩展板最综合的一套题目,因为这套试题涉及了LCD、LED、按键等基础模块,也涉及到了定时器的PWM输出, pwm捕获,ADC、以及实时时钟RTC,USART串口通信,还有LCD的高亮显示,eeprom的读写,led闪烁等,几乎涵盖了所有的模块,并且在试题的逻辑考查部分难度也比较适中,用来练手非常合适,这一套题用来准备省赛也是极好的。
在这里插入图片描述

二、问题总结

这次由于只捕获一个通道,所以我用的是定时器自带的PWM输入捕获模式, 可以直接捕获到PWM波的频率和占空比, 但是在测试的时候,我发现1kHz以上的波形都可以成功的捕获到,但是一旦频率低于1000HZ捕获到的结果就有错误了, 最终想到可能是由于定时器的频率太高(使用的是默认的72MHz),导致计数器溢出了,然后我把定时器的时钟频率调为了24MHz,就可以成功的捕获到了, 从这次遇到的错误,可以总结出当要捕获的信号频率比较高的时候,将定时器的时钟也要配置得高,当捕获得信号的频率比较低的时候,就可以把定时器的时钟频率调节的低一些。
下面是关于定时器的输入捕获的配置代码:

__IO uint16_t IC2Value = 0;
__IO uint16_t DutyCycle = 0;
__IO uint32_t Frequency = 0;
/**
  * @brief  Configures the different system clocks.
  * @param  None
  * @retval None
  */
void INPUT_CAPTURE_RCC_Configuration(void)
{
    
    
  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* GPIOA clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}

/**
  * @brief  Configure the GPIO Pins.
  * @param  None
  * @retval None
  */
void INPUT_CAPTURE_GPIO_Configuration(void)
{
    
    
  GPIO_InitTypeDef GPIO_InitStructure;

  /* TIM3 channel 2 pin (PA.07) configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/**
  * @brief  Configure the nested vectored interrupt controller.
  * @param  None
  * @retval None
  */
void INPUT_CAPTURE_NVIC_Configuration(void)
{
    
    
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable the TIM3 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void input_capture_init(void)
{
    
    
	TIM_ICInitTypeDef  TIM_ICInitStructure;
  /* System Clocks Configuration */
  INPUT_CAPTURE_RCC_Configuration();

  /* NVIC configuration */
  INPUT_CAPTURE_NVIC_Configuration();

  /* Configure the GPIO ports */
  INPUT_CAPTURE_GPIO_Configuration();

  /* TIM3 configuration: PWM Input mode ------------------------
     The external signal is connected to TIM3 CH2 pin (PA.07), 
     The Rising edge is used as active edge,
     The TIM3 CCR2 is used to compute the frequency value 
     The TIM3 CCR1 is used to compute the duty cycle value
  ------------------------------------------------------------ */
	
	TIM_PrescalerConfig(TIM3, 2 - 1, TIM_PSCReloadMode_Immediate);
	
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0;

  TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);

  /* Select the TIM3 Input Trigger: TI2FP2 */
  TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);

  /* Select the slave Mode: Reset Mode */
  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

  /* Enable the Master/Slave Mode */
  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);

  /* TIM enable counter */
  TIM_Cmd(TIM3, ENABLE);

  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
}

/**
  * @brief  This function handles TIM3 global interrupt request.
  * @param  None
  * @retval None
  */
void TIM3_IRQHandler(void)
{
    
    
  /* Clear TIM3 Capture compare interrupt pending bit */
  TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

  /* Get the Input Capture value */
  IC2Value = TIM_GetCapture2(TIM3);

  if (IC2Value != 0)
  {
    
    
    /* Duty cycle computation */
    DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC2Value;

    /* Frequency computation */
    Frequency = SystemCoreClock / 2 / IC2Value;
  }
  else
  {
    
    
    DutyCycle = 0;
    Frequency = 0;
  }
}

三、代码

  1. 第一版
    码云
    GitHub

  2. 第二版
    码云
    GitHub

猜你喜欢

转载自blog.csdn.net/qq_43715171/article/details/115508408
今日推荐