stm32中由于数据类型强制转换遇到的问题

2019-08-20 17:50发布

  目的:输出n个方波(方波周期为m)暂停a秒;输出n个方波(方波周期为m)暂停a秒。。。如此循环,动作过程中,要求n,m,a三个参数可控  我的程序代码节选:
     u16 speed;        //控制方波周期                       
     u32 step;        //控制方波步数                               
     u32 delay;        //控制暂停时间                       
     u32 count;        //定时器中断中进行计数                       
     u32 real_step;        //记录实际输出的方波步数       

        float speed_buff = 0;
        float step_buff = 0;
        float delay_buff = 0;


        TIM2_Int_Init((1000 - 1),(72 - 1));                // 中断周期为1ms

     //Modbus_HoldReg[0~2] 由外部通过Modbus RTU通讯传递给单片机,此处直接赋值常数,方便进行脉冲输出验证
        Modbus_HoldReg[0] = 10;   //通讯时,数值扩大了10倍,需要除以10得到真实参数,数值调节范围是:5—20,即真实范围是:0.5—2.0。
        Modbus_HoldReg[1] = 100;  //通讯时,数值扩大了100倍,需要除以100得到真实参数,数值调节范围是:50—200,即真范围是:0.50—2.00。
        Modbus_HoldReg[2] = 100;  //通讯时,数值扩大了100倍,需要除以100得到真实参数,数值调节范围是:50—200,即真范围是:0.50—2.00。
       
        speed_buff = (float)Modbus_HoldReg[0] * 0.1; //将参数还原,并赋值给浮点型变量,下同
        step_buff = (float)Modbus_HoldReg[1] * 0.01;
        delay_buff = (float)Modbus_HoldReg[2] * 0.01;
       
        speed = (u16)(500/speed_buff); //经过计算,当Modbus_HoldReg[0] = 10时,理论上speed应等于500
        step = (u32)step_buff * 5;   //经过计算,当Modbus_HoldReg[1] = 100时,理论上step应等于5
        delay = (u32)delay_buff * 5000;//经过计算,当Modbus_HoldReg[2] = 100时,理论上delay应等于5000



     其他代码这里就省略了。。。在Debug下观察,speed、step、delay确实分别等于500、5、5000。但是却没有脉冲输出。但是直接给这三个参数赋值   时,脉冲输出正常。所以我猜测这里应该是由于进行了强制转换的原因,小弟才疏学浅,不知道为何会这样。。还请诸位大神不吝赐教!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
gotofly21
1楼-- · 2019-08-21 18:21
 精彩回答 2  元偷偷看……
lvkanger
2楼-- · 2019-08-21 21:18
ZeroDis2016 发表于 2017-4-22 12:09
请问一下,只要存在整数与浮点数之间的强制转换程序就无法正常运行,这是哪里的问题?编译器不支持转换?

不应该会出现这样的问题啊?最好检查下代码!

一周热门 更多>