关于蓝桥杯嵌入式的一些bug整合

本文汇总了蓝桥杯嵌入式竞赛中遇到的常见问题,包括按键判断错误、输入捕获的数组溢出、输出比较的波形缺失、串口的中断标志位混淆、EEFPROM的时序混乱、双路ADC采集的采样周期调整、数码管的数据位设置、ds18b20的延迟问题以及dht11的时序和数据处理。针对这些问题,文章给出了详细的解决方案和注意事项。
摘要由CSDN通过智能技术生成

目录

按键

输入捕获

输出比较

串口

EEFPROM

双路adc采集

ADC按键

数码管

ds18b20

dht11


按键

  if(HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0)
  {
     KeyCnt[0]++;
  }
  else
  {
    if(KeyCnt[0]<30&&KeyCnt[0]>0)    //易错点1
    {
      Keynum=1;
    }
    else	if(KeyCnt[0]>=30)        //易错点2
    {
      Keynum=6;
    }
    KeyCnt[0]=0;
  }

        易错点1:if中判断不明确,没有确保值大于0,导致没按下去时执行。

        易错点2:没加大于判断,在一的基础上导致没按时执行。

输入捕获

void IC_POLL()
{
  switch (IC_STA)
  {
  case 0:
    __HAL_TIM_SetCounter(&htim3,0);
    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
    __HAL_TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_INPUTCHANNELPOLARITY_RISING);
    memset(capture,0,sizeof(capture));
    IC_STA++;
    break;
  
  case 4:
    IC_STA=0;
    IC_T=capture[2]-capture[0];
    IC_zhankong=(capture[1]-capture[0])*100/IC_T;
    IC_F=1000000.0/IC_T;
  default:
    break;
  }
}

        一般来说,问题不大,但存在其他地方,如sprintf中数组溢出导致捕获值出错的bug。

输出比较

void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(htim);
	static int Oc_cnt=0;
	Oc_cnt=__HAL_TIM_GetCounter(&htim2);
  if(htim->Instance==TIM2)
  {
    if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)
    {
      if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==1)
      {
        __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,Oc_cnt+10000.0*OC_zhankong[0]/OC_f[0]);
      }
      else
      {
         __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,Oc_cnt+10000.0*(100-OC_zhankong[0])/OC_f[0]);
      }
    }

    if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_3)
    {
      if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)==1)
      {
        __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_3,Oc_cnt+10000.0*OC_zhankong[1]/OC_f[1]);
      }
      else
      {
         __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_3,Oc_cnt+10000.0*(100-OC_zhankong[1])/OC_f[1]);
      }
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值