平衡车Freertos

ADC配置

【STM32】HAL库 STM32CubeMX教程九---ADC_cubemx adc-CSDN博客

CubuMX配置后需要再自己加上

adc校准函数

一阶互补滤波应用到stm32 ADC采集上_stm32 一阶互补滤波算法-CSDN博客

我用adc是为了测量电压值,但是电压是飘的,所以我们可以加一个滤波函数来使它趋于稳定

信号量的使用需要调用这两个头文件

vTaskDelay函数要用到 task.h头文件

在创建二进制信号量的时候需要先释放一次信号量,因为它的初始值是因为0

获取为减-1,释放为+1

使用信息量时要加vTaskDelay()

定义结构体的方法:

[05-6]_C基础2_结构体_哔哩哔哩_bilibili

方法①

方法②

这里typedef相当于 把int等价替换为A_type

所以我们用图二来优化图二的定义方式

图一:

图二:这里定义了两个类型,类型一为person  类型二为*p_person(指针)

等效图:

定义带标签的结构体

typedef struct mode {

int data;

} Node;

  • 标签(mode: mode 是结构体的标签名。在这种定义中,mode 是结构体类型的名称,但 Node 是通过 typedef 创建的别名。

  • 好处:

    • 标签的存在: 标签 mode 使得你可以在结构体类型的定义中引用自身(对于自引用结构体类型)。如果结构体内部有指向自身的指针时(如链表中的 next 指针),标签是必要的。
    • 自引用: 如果你需要在结构体中使用指向相同类型的指针(例如链表中的 next 和 pre),标签是必须的。

定义不带标签的结构体

 

typedef struct {

int data;// 不能在此处使用指向自身的指针,因为没有标签

} Node;

  • 无标签: 结构体没有指定标签名。在这种情况下,结构体只能通过 Node 类型进行引用。

  • 好处:

    • 简洁: 如果结构体类型不需要在其他地方引用(例如,内部定义结构体),或者结构体类型是临时的且只用于 typedef 生成别名时,可以省略标签。
    • 局部性: 当你不需要在结构体定义中引用自身时(例如,没有自引用的情况),不使用标签可以使定义更加简洁。

总结和应用场景

  1. 带标签的结构体:

    • 当结构体类型需要引用自身时,例如在链表、树等数据结构中。
    • 当你希望结构体在其他地方有额外的引用能力。
  2. 不带标签的结构体:

    • 当结构体类型仅用于定义和别名创建,且不需要自引用或外部引用时。
    • 当定义的结构体非常简单,仅用于某个特定的、局部的目的。

pwm开启错误示范:

正确示范:不要用”|“写在一起,要分开写,不然只能开启一个

宏定义函数-CSDN博客

这里使用宏函数要注意两点:

①:宏函数的使用是有返回值的,要幅值给变量

不然会出现使用错误,无法实现函数功能

可能会报如下错误:

②宏函数的使用,每一个变量都要加括号!不然会很容易出现意料之外的错误

姿态解算

谈谈MPU6050的数据融合 一阶滤波 卡尔曼滤波_mpu 6050一阶滤波 csdn-CSDN博客

这里是angleAx和gyroGy融合(卡尔曼和一阶互补滤波都是),但如果是四元素就是angleAx和gyroGx(应该是算法决定的)

编码器测速:

stm32 hal库定时器编码器模式设置 实现电机圈数计数_哔哩哔哩_bilibili

hal库应用:

STM32的HAL库开发各函数意义、笔记_hal引脚置高-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值