This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

套件类型为28069M与8305,电机为无刷直流电机,工程为lab5b,与迪文屏进行通信,发生以下问题

你好,我想请问一个问题,就是在lab5b中,在原有的for循环之外再添加一个for循环,例如


它只执行这一个循环,另一个循环不执行,也就是只接收数据,电机不运行;
再假如把下图程序放入原有的for循环中,电机不转,也不接收数据,该怎么办?

  • for(;;)这个函数就是无线循环的,所以你的第一张图的情况是正常的,程序只会在第一个for中无限循环。
    第二张图中的程序,一般不会把两个for(;;)嵌套使用,不是很确定问题原因。需要你单步运行一下,看看程序具体在那个语句中循环没有跳出来。
  • 目前是放在声明一列是可以的,而且也能准确跳出循环,但是只能运行一次,每次执行只能再重新烧写等等,很麻烦,所以他为什么不能放入for循环里面呢?
  • 因为for(;;)是无限循环,在执行第二个for(;;)之前,函数可能在第一个for(;;)中循环,跳不到第二个for(;;)中
  • 即使没有第一个的FOR循环,也是不行,就是单纯的调用receive_byte();也不能放进第二个for循环中,只能在声明的部分,这是为什么呢?如果我想用sci.c的hal进行读写数据可以嘛?该如何写,有没有参考的?
    因为我目前用的是f28069_Example_sci.c进行修改的,但是sci.c与它不一样,所以想问问有没有相关的例程可以供参考。
  • 请问你提到的HAL是指硬件抽象层吗?不是很清楚HAL的sci.c是什么意思
  • Green Deng 说:
    请问你提到的HAL是指硬件抽象层吗?不是很清楚HAL的sci.c是什么意思

    是抽象层的含义;在lab5b.c中有一函数是HAL_setParams(halHandle,&gUserParams);自己写的不含有中断的SCI程序放在它之前就可以正常通信,电机也可以运行,但是只能进行一次通信,因为SCI的函数在声明中,并不在主循环中。

    而放在HAL_setParams(halHandle,&gUserParams);之后就无法通信电机也不转

    我所用到的转速是屏幕上可以操控的,假如说我第一次屏幕上给500,电机运行500转;此时屏幕上的转速增加,接下来就是重新烧写,很麻烦。

    所以我想解决的是,为什么通信的函数无法放进主循环中呢?

  • 个人理解是,主函数中有循环,进不了通讯函数中,所以一般通讯程序都是用中断方式控制的。