ADC配置
【STM32】HAL库 STM32CubeMX教程九---ADC_cubemx adc-CSDN博客、
CubuMX配置后需要再自己加上
adc校准函数
一阶互补滤波应用到stm32 ADC采集上_stm32 一阶互补滤波算法-CSDN博客
我用adc是为了测量电压值,但是电压是飘的,所以我们可以加一个滤波函数来使它趋于稳定
信号量的使用需要调用这两个头文件
vTaskDelay函数要用到 task.h头文件
、
在创建二进制信号量的时候需要先释放一次信号量,因为它的初始值是因为0
获取为减-1,释放为+1
使用信息量时要加vTaskDelay()
定义结构体的方法:
方法①
方法②
这里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
生成别名时,可以省略标签。 - 局部性: 当你不需要在结构体定义中引用自身时(例如,没有自引用的情况),不使用标签可以使定义更加简洁。
- 简洁: 如果结构体类型不需要在其他地方引用(例如,内部定义结构体),或者结构体类型是临时的且只用于
总结和应用场景
-
带标签的结构体:
- 当结构体类型需要引用自身时,例如在链表、树等数据结构中。
- 当你希望结构体在其他地方有额外的引用能力。
-
不带标签的结构体:
- 当结构体类型仅用于定义和别名创建,且不需要自引用或外部引用时。
- 当定义的结构体非常简单,仅用于某个特定的、局部的目的。
pwm开启错误示范:
正确示范:不要用”|“写在一起,要分开写,不然只能开启一个
这里使用宏函数要注意两点:
①:宏函数的使用是有返回值的,要幅值给变量
不然会出现使用错误,无法实现函数功能
可能会报如下错误:
②宏函数的使用,每一个变量都要加括号!不然会很容易出现意料之外的错误
姿态解算
谈谈MPU6050的数据融合 一阶滤波 卡尔曼滤波_mpu 6050一阶滤波 csdn-CSDN博客
这里是angleAx和gyroGy融合(卡尔曼和一阶互补滤波都是),但如果是四元素就是angleAx和gyroGx(应该是算法决定的)
编码器测速:
stm32 hal库定时器编码器模式设置 实现电机圈数计数_哔哩哔哩_bilibili
hal库应用:
STM32的HAL库开发各函数意义、笔记_hal引脚置高-CSDN博客