文章目录
1. UART7 串口的中断优先级太低 会导致串口不进去中断
HAL_NVIC_SetPriority(UART7_IRQn, 4, 0);
要大于
HAL_NVIC_SetPriority(USART6_IRQn, 5, 0);
2.在FreeRTOS的任务中不能屏蔽延时函数Osdelay();否则会导致程序在该任务下找不到跳出的接口。
3. keil修改为绿色护眼背景建议参数
色调 87 红 193
饱和度 77 绿223
亮度 196 蓝198
效果如下:
4.舵机四足对角步态代码记录
void ListLeg(void) //规划Z轴 对角步态
{
static int L_count = 0; //这里的count和walk中的count是不相同的 因为这个count用了static
int MAX_HIGH = body.rotate*2; //抬腿的最大高度等于body.rotate
L_count ++;
uint8_t L_cycle = 30; //延时5ms重复执行,T = 54 * 2* 5 = 540ms
FR_Leg.last_state = FR_Leg.state; //更新每个腿的状态用于 walk 标志位的检测
BL_Leg.last_state = BL_Leg.state;
FL_Leg.last_state = FL_Leg.state;
BR_Leg.last_state = BR_Leg.state;
if(L_count<=L_cycle) //前右和后左 1 < L_count <= 54
{
FR_Leg.state = Down;
BL_Leg.state = Down;
FL_Leg.state = Up;
BR_Leg.state = Up;
if(L_count < L_cycle/2) //1 <= L_count < 27
{
FL_Leg.delta_z = -L_count*MAX_HIGH/L_cycle; // -1*50/54 = -0.93 -26*50/54 = - 24.07
BR_Leg.delta_z = -L_count*MAX_HIGH/L_cycle;
}
else //27 <= L_count <= 54
{
FL_Leg.delta_z = -(L_cycle-L_count)*MAX_HIGH/L_cycle; //-(54-27)*50/54 = -25 -(54-54)*50/54 = 0
BR_Leg.delta_z = -(L_cycle-L_count)*MAX_HIGH/L_cycle;
}
}
else if(L_count < 2 * L_cycle) //54 < L_count < 54*2 = 108
{
FR_Leg.state = Up;
BL_Leg.state = Up;
FL_Leg.state = Down;
BR_Leg.state = Down;
if(L_count < L_cycle*3/2) //54 < L_count < 54*3/2 = 81
{
FR_Leg.delta_z = -(L_count-L_cycle)*MAX_HIGH/L_cycle; //-(54-54)*50/54 = 0 -(81-54)*50/54 = -25
BL_Leg.delta_z = -(L_count-L_cycle)*MAX_HIGH/L_cycle;
}
else //81 < L_count < 54*3/2 = 108
{
FR_Leg.delta_z = -(2*L_cycle-L_count)*MAX_HIGH/L_cycle; //-(108-81)*50/54 = -25 -(108-108)*50/54 = 0
BL_Leg.delta_z = -(2*L_cycle-L_count)*MAX_HIGH/L_cycle;
}
}
else //count的值从0-108
{
L_count = 0;
}
// printf("z%f\r\n",FR_Leg.delta_z);
}
5.cubemx配置的DMA只能发送一次,存在bug
6.typedef的用法
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。
具体区别在于:
若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;
若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;
区别就在于使用时,是否可以省去struct这个关键字。
分三块来讲述:
1 首先:
在C中定义一个结构体类型要用typedef:
typedef struct Student
{
int a;
}Stu;
或者
typedef struct
{
int a;
}Stu;
于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明
这里的Stu实际上就是struct Student的别名。
但在c++里很简单,直接
struct Student
{
int a;
};
于是就定义了结构体类型Student,声明变量时直接Student stu2;
2.声明结构体变量时,必须在结构体变量定义的后面
3.
typedef struct aa{
}aa_t;
等价于
typedef struct {
}aa_t;
typedef 相比直接用struct ,其在声明的时候不用加 struct
4.不管什么变量,现在自己的.c文件中定义,要想在其他.c文件中使用
必须做到以下两点:
第一点:在自己的.h文件中 用extern 声明
第二点:在想要使用它的的.c文件中 包含该.h文件
5.枚举定义可以多个变量
enum{
Up,
Down
}state,last_state;