蓝桥杯物联网竞赛_STM32L071KBU6_解决脉冲输出频率数值不稳定BUG

问题:

在用脉冲进行做题的时候发现脉冲输出的频率随着脉冲数值增大而越来越不稳定

典型的情况是10000HZ的时候会变成0HZ或者infHZ也就是无穷大

代码:

c 复制代码
int BEIGNNUMBER = 0;
int ENDNUMBER = 0;
unsigned char STATETIM = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
	//OLED_ShowString(0, "ok");
	if(STATETIM == 0){
		STATETIM ++;
		BEIGNNUMBER = HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_3);
		__HAL_TIM_SET_CAPTUREPOLARITY(&htim3, TIM_CHANNEL_3, TIM_ICPOLARITY_FALLING);
	}else if(STATETIM == 1){
		STATETIM ++;
		__HAL_TIM_SET_CAPTUREPOLARITY(&htim3, TIM_CHANNEL_3, TIM_ICPOLARITY_RISING);
	}else if(STATETIM == 2){
		STATETIM ++;
		ENDNUMBER = HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_3);
	}
}

void Function_PluseShow(){
  if(STATETIM == 3){
		PLUSEVALUE = (int)(10000 * 1.0 / (ENDNUMBER - BEIGNNUMBER));
		myprintf(2, "     %dHZ      ",  PLUSEVALUE);
		//myprintf(0, "   %d  ", ENDNUMBER - BEIGNNUMBER); 
		//myprintf(2, "   %.1f   ", (ENDNUMBER - BEIGNNUMBER) / 10.0);
		STATETIM = 0;
	  HAL_Delay(200);
	}
}

原因:

原因出在了我CUBMX中TIM3配置的预分频为3200 - 1也就是记一次数花费0.1ms

当脉冲频率足够大的时候也就是说单位时间的脉冲个数也会足够多,此时对于单个脉冲所占据的时间就会越小,以至于小于0.1ms,由于计数器记的数肯定是整数,然而单个脉冲持续时间小于0.1ms,那么计数器记的数只有0或者1,当计数器记的数为0也就是ENDNUMBER - BEIGNNUMBER为0,也就造成了除法分母为0的操作,自然会出BUG

解决方法:

将预分频调成32 - 1也就是记录单个数耗费0.001ms那么脉冲自然而然稳定

c 复制代码
void Function_PluseShow(){
  if(STATETIM == 3){
		PLUSEVALUE = (int)(1000000 * 1.0 / (ENDNUMBER - BEIGNNUMBER));
		myprintf(2, "     %dHZ      ",  PLUSEVALUE);
		//myprintf(0, "   %d  ", ENDNUMBER - BEIGNNUMBER); 
		//myprintf(2, "   %.1f   ", (ENDNUMBER - BEIGNNUMBER) / 10.0);
		STATETIM = 0;
	  HAL_Delay(200);
	}
}

Function函数记得也要改一下

相关推荐
qq_4112624221 分钟前
wifi自适应
stm32·单片机·嵌入式硬件
洋九八1 小时前
STM32 (NVIC)中断
stm32·单片机·嵌入式硬件
12.=0.1 小时前
【stm32_9.2】FreeRTOS的任务管理:任务策略,调度器启用,任务创建、删除、挂起、恢复
c语言·stm32·单片机·嵌入式硬件
国产电子元器件1 小时前
ACS712国产替代推荐:电流检测芯片选型指南
单片机·嵌入式硬件·物联网
Oflycomm3 小时前
无人机远距离图传新选择:国产私有SDR模组O9201UDH技术解析与选型指南
人工智能·科技·物联网·无人机·模组·qogrisys
洋九八3 小时前
STM32 串口(USART)配置
stm32·单片机·嵌入式硬件
迈威通信4 小时前
戈壁滩上的“国产化通信网”:850MW光储项目如何稳定运行?
网络·物联网·安全·信息与通信
深圳市恒星物联科技有限公司4 小时前
暴雨天气排水管网运行风险监测与应急联动机制
物联网·智慧城市
aini_lovee6 小时前
STM32 上实现 SD 卡读取 JPEG 解码 TFT 显示
开发语言·stm32
eastyuxiao6 小时前
主流物联网协议 超详细讲解
大数据·人工智能·物联网·智慧城市·能源·数字孪生