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的浮点运算资源是有价值的