1月14日

1.对于昨天最后写的can通信,里面有几个高八位低八位的赋值,是因为自学笔记4

对stm32板子来说,此处反馈的就是接受的,一定要注意。

1.现在我们来总结一下所有结构体关系

1.第一个是机器人基本状态的结构体
自学笔记4
2.第二个是遥控器接受数据的结构体
自学笔记4
3.第三个是can通讯电机相关数据的结构体
自学笔记4

2.接下来要定义一个发送数据的函数(之前已经定义完成,但此处要在另一个函数中判断是否是运动模式,并且要对速度赋值)

先是.h文件

#ifndef _SEND_SIGNAL_H_
#define _SEND_SIGNAL_H_
void SendSignal(void);
#endif
//此处只是为了以后方便添加变量定义

然后是.c文件

#include "send_signal.h"
#include "robot.h"
#include "can_motor.h"

extern struct Robot_t infantry;

int speed;//定义速度大小

void SendSignal(void)
{
  if(infantry.workstate == STOP)
  {
   CanTransmit_1234(&hcan1,0,0,0,0);
  }
  else 
  {
		m3510_1.speed_pid.ref = speed;
    #ifdef CHASSIS
	CanTransmit_1234(&hcan1, m3510_1.speed_pid.output,0, 0, 0);
    #endif 
 // 判断模式
  }
}

3.接来下是到操作系统,将之前写的所有函数结合到FREETOS.c中

首先要在stm32cube中选择FREETOS
自学笔记4
然后就是到keil中操作
此时看到多出freetos.c文件,打开后发现

osThreadDef(send_signal, all, osPriorityIdle, 0,2048);
  send_signalHandle = osThreadCreate(osThread(send_signal), NULL);

两句话,这两个是线程的定义,第一个函数而言,
第一个参量是线程的名字,第二个是线程执行的函数(此处我们定义了一个all的函数来将所有函数整合),第三个是优先级,第四个不知,第五个是分配的空间。
线程就是会一直无限的循环,类似于for(;;)
all函数

void all(void const * argument)
{
	infantry.workstate = PREPARE;
  for(;;)
  {
      	Calculate();                 //计算输出值,接收信号包含在内了     
		SendSignal();                //发出信号
        osDelay(1);
  }
}

4.接下来读了18年RM官方步兵车的源代码代码所学到的东西总结

1.自学笔记4

首先学到的是项目工程可以尽量分细,这样后来容易调试,而且尽量把功能模块化自学笔记4
2.将初始化放到一个函数中
自学笔记4
3. 报错用法自学笔记4
上面的用法可以直接用另一个解决
自学笔记4
4. 嵌套结构体
自学笔记4
极大简化重复定义嵌套结构体
5在函数中使用可以选择自己需要的,类似于if
自学笔记4

相关文章:

  • 2021-11-18
  • 2021-12-13
  • 2022-12-23
  • 2022-12-23
  • 2021-10-23
  • 2021-08-03
  • 2021-10-19
猜你喜欢
  • 2020-05-30
  • 2021-08-18
  • 2021-09-29
  • 2022-01-25
  • 2021-06-10
  • 2021-04-06
相关资源
相似解决方案