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

相关推荐
yiqiqukanhaiba1 小时前
STM32学习笔记13-通信协议I2C&MPU6050&I2C软件控制
笔记·stm32·学习
你打代码的样子真帅1 小时前
从零开始构建物联网设备管理系统:基于Netty的高性能IoT平台实战
物联网·netty
猫猫的小茶馆3 小时前
【STM32】HAL库中的实现(五):ADC (模数转换)
stm32·单片机·嵌入式硬件·mcu·51单片机·智能硬件·pcb工艺
紫阡星影4 小时前
【模块系列】STM32&W25Q64
stm32·单片机·嵌入式硬件
keer_zu5 小时前
STM32L051同时处理Alarm A和Alarm B中断
stm32·单片机·嵌入式硬件
厦门辰迈智慧科技有限公司6 小时前
水闸安全综合监测系统解决方案
网络·物联网·安全·自动化·监测
源远流长jerry9 小时前
STM32之MCU和GPIO
linux·c++·stm32·单片机·嵌入式硬件
ShiMetaPi1 天前
【GM3568JHF】FPGA+ARM异构开发板烧录指南
stm32·单片机·嵌入式硬件
riveting1 天前
重塑工业设备制造格局:明远智睿 T113-i 的破局之道
人工智能·物联网·制造·t113·明远智睿
蜡笔小电芯1 天前
【STM32】STM32H750 CubeMX 配置 USB CDC 虚拟串口笔记
笔记·stm32·嵌入式硬件