蓝桥杯物联网竞赛_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函数记得也要改一下

相关推荐
牛奶咖啡.8542 小时前
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组真题
c语言·数据结构·c++·算法·蓝桥杯
SuperW2 小时前
蓝桥杯嵌入式十五届模拟二(串口DMA,占空比的另一种测量方式)
单片机·职场和发展·蓝桥杯
~央千澈~4 小时前
剖析AI与5G:是夸大其词,还是时代变革的引擎?-优雅草卓伊凡
物联网·5g·前端开发
旧时光林4 小时前
蓝桥杯 分解质因数(唯一分解定理)
数据结构·c++·算法·蓝桥杯·模拟·枚举
头发尚存的猿小二5 小时前
2024年第十五届蓝桥杯C&C++大学A组--成绩统计
c语言·开发语言·c++·蓝桥杯
moton20175 小时前
Matter协议深度解析:智能家居通信标准的技术架构、开发指南与生态挑战
物联网·智能家居·matter
xMathematics6 小时前
STM32嵌入式开发从入门到实战:全面指南与项目实践
stm32·单片机·嵌入式硬件
物联网平台6 小时前
边缘计算盒子是什么?
物联网·边缘计算·iot
冻结的鱼7 小时前
在 STM32 中实现电机测速的方法介绍
stm32·单片机·嵌入式硬件
Hi__7 小时前
[蓝桥杯 2023 省 A] 平方差
算法·蓝桥杯