stm32f1 是没有FPU的, 不能进行硬件浮点运算,故在实时控制等时间敏感度很高的场景是很难处理的。需要用到stm32f4并开启硬件浮点运算

以下是一个场景,规避浮点运算 然后将结果打印整数位和小数位打印
tempStr 变量没有用到,忽略

//ttt = ((short)2) * 15 / 100 - 70  ; 原本是这样
ttt = ((short)TIM2->CNT) * 15  - 7000  ; //弄成int, 结果之后再除以100
sprintf(tempStr,"%d",ttt);
		if(ttt > 0){
			if(ttt%100 >= 10){ //小数位如果大于10 正常输出,否则需要补0
				
				printf("-   %s  ,  %d  ,%2d ,%d -\r\n",tempStr,ttt,ttt%100,ttt/100);   //必须%2d 否则605  变成6 5
			}else{
				printf("-   %s  ,  %d  ,0%d ,%d -\r\n",tempStr,ttt,ttt%100,ttt/100);   //必须%2d 否则605  变成6 5
			}
		}else{
			if(ttt/100 == 0){ //如果是负数且整数位是0 需要补一个负数符号
				printf("-   %s  ,  %d  ,%2d ,-0 -\r\n",tempStr,ttt,-ttt%100);   //   负数的0
			}else{
				if(-ttt%100 >= 10){
					printf("-   %s  ,  %d  ,%2d ,%d -\r\n",tempStr,ttt,-ttt%100,ttt/100);   //  负数
				}else{
					printf("-   %s  ,  %d  ,0%d ,%d -\r\n",tempStr,ttt,-ttt%100,ttt/100);   //  小数点后的 5 变成05
				}
			}
		}

由此可见,果然GPU的浮点运算资源是有价值的

更多推荐