- 博客(50)
- 收藏
- 关注
原创 在FreeRTOS中各类任务之间通信方法的对比
能实现同步、互斥的内核方法有:任务通知(task notification)、队列(queue)、事件组(event group)、信号量(semaphoe)、互斥量(mutex)。这些内核对象五花八门,记不住怎么办?我也记不住,通过对比的方法来区分它们。它们都有类似的操作方法:获取/释放、阻塞/唤醒、超时。转载自韦东山RTOS教程。
2025-09-22 14:29:51
402
原创 FreeRTOS任务管理与调度
3.如果有多个相同优先级的任务,那么会先运行最后创建的那个任务。6.如果有相同优先级的三个任务123正在运行,此时在任务1中创建一个更高优先级的任务4,就会打断任务1,立刻运行任务4,当任务4运行结束之后会运行打断之前的下一个任务,被打断的任务不会继续运行。5.调度就是在tick中断的时候从优先级高到底遍历任务就绪列表,找到第一个非空的List,把pxCurrentTCB指向下一个任务,然后启动它。4.相同优先级的任务会通过链表将该优先级任务的任务控制块连接起来。2.最高优先级的任务先运行。
2025-09-21 17:46:00
221
原创 STM32计算步进电机转速
化简得到 ARR = (定时器时钟频率 * T) / (转速 * 6 * x * (PSC + 1)) - 1。所以 ARR = (定时器时钟频率/(转速/(60/((360/T)*x))*PSC+1))-1。输出频率 = 定时器时钟频率 / [(PSC + 1) × (ARR + 1)]频率 = 转速/(60/((360/T)*x))转速 = 频率 * 60 /((360/T)*x)PSC固定设置为72-1。
2025-09-20 18:15:31
318
原创 直流电机PID调参技巧
Kd:太大会出现振荡,调节PD时,可以将Kp参数给大一点也没关系,超调可以用Kd来调节,但是不能振荡,如果出现振荡,要减小Kp。Kp:不断改变目标值观察实际值,然后增大Kp,知道实际值开始抖动,然后适当减小Kp让抖动消失,此时Kp就比较适合。PS:调参时,学会取舍,参数越响应快但是抖动振荡越严重,参数小响应慢但是动作平滑。Ki:看消除稳态误差的速度满不满意,不满意就加大Ki,但是不能够出现大幅度超调。
2025-09-11 10:46:59
248
原创 STM32Hex文件和Bin文件的区别
bin文件不带地址信息,因此下载的时候需要指定下载地址。 hex文件自带地址信息,直接点击下载自己会找到要下载到的地址(默认0x0800 0000)。
2024-11-21 20:16:53
214
原创 树莓派配置GPIO串口与电脑通信
如果想使用稳定可靠的硬件串口,就要将树莓派的硬件串口与mini串口默认映射对换。而这个需求官方也考虑到了,在系统中放了一个实现这个功能的文件—stretch版本系统中的文件为/boot/overlays/pi3-miniuart-bt.dtbo。然后ctrl+s进行写入保存,不修改文件名称,直接回车即可完成写入,最后ctrl+x退出该文件。然后ctrl+s进行写入保存,不修改文件名称,直接回车即可完成写入,最后ctrl+x退出该文件。serial0(GPIO串口)默认使用的是ttyS0(mini串口);
2024-11-13 20:57:40
744
原创 野火PID调试助手由HAL库移植到标准库
野火PID上位机通过串口与开发板相关联,通过特定的协议,可以同步上位机与下位机的指令与 数据。可以通过生成曲线图观察PID结果,方便用户调试。官方给的例程是HAL库的,现移植到标准库使用。配置完成后,在main.c初始化,在while里面调用接收。PID调试还需在中断里面调用发送实际值至上位机。需要注意的是,串口波特率不能低于9600,要不然调试助手就会不显示图像。其中,protocol.c需要修改的地方只有下面两个函数。
2024-11-06 10:36:58
907
1
原创 STM32定时器输出比较翻转模式输出PWM
该模式特点是定时器计数值每达到ARR就进行一次电平翻转,只需在中断函数里对ARR值进行修改即可改变PWM频率,不过该模式输出的PWM占空比始终是50%。此模式常用于步进电机加减速、步进电机闭环控制,可以在定时器运行时修改CCR值改变脉冲频率。也可实现定时器4个通道输出不同频率的PWM。重点是将PWM模式配置为:TIM_OCMode_Toggle模式。我只配置了定时器2的通道1。可以根据需求自行增加其他通道。
2024-10-25 20:26:44
1603
2
原创 STM32主从定时器输出个数、频率可调的脉冲
其中/TIM_SelectInputTrigger(TIM1, TIM_TS_ITR2);1)利用定时中断输出脉冲,但是间隔的延时会影响其他主程序的进程,当控制多个电机的时候就非常不可取;2)利用PWM脉宽调制,并通过主从定时器进行设定,好处是不占用主程序时钟,且能精准控制;ARR的值最高只能是65535,所以这种方法最多只能输出65535个脉冲。
2024-10-23 16:13:45
2022
原创 TMC2209堵转检测配置详细教程
通用寄存器主要是配置第0和第1位,第1位要给1,第0位根据自己的原理图配置。我的要配置0;这里需要发送。
2024-10-07 19:41:29
3389
4
原创 树莓派配置Qt+OpenCV
设置 cmake 参数,安装目录默认各部分分别安装在 /usr/local/ 路径下的 include、bin、lib 三个文件夹下。先在电脑下载opencv-python 和 opencv-contrib-python 库,再传输到树莓派进行编译;cp37表示支持python3.7,armv7l指树莓派系统版本。将这两个源码下载完成后,传输到树莓派新建的文件夹里面。保存重启,即可通过 OpenCV 读取摄像头使用。进入解压后的 opencv 文件夹。选择 Yes ,即打开摄像头功能。
2024-09-21 12:28:46
1476
原创 树莓派Qt使用摄像头报错
报错defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera"
2024-08-17 17:26:23
347
2
原创 Windows系统Qt串口助手移植到树莓派运行
这一步可能会报错ERROR: Unknown module(s) in QT: serialport multimedia multimediawidgets。使用两个ch340将树莓派和电脑串口助手连接,相互发送数据。在树莓派工程目录下打开可执行文件即可。解决方法:安装缺失的依赖模块。
2024-08-17 02:03:56
384
原创 2024年树莓派VNC更改分辨率
将Composite关掉,重启树莓派,完成VNC分辨率修改。选择所需分辨率(一般都是1080x1920)再次重启树莓派,再次进入这个界面。重启树莓派,再次进入该界面。使能Composite。
2024-08-13 23:38:58
2490
5
原创 2024新版树莓派镜像安装python3.7.3
可能会出现报错:ModuleNotFoundError: No module named '_ctypes'
2024-08-07 16:47:43
1020
原创 将USB摄像头画面显示到Qt界面
在.h文件中添加摄像头所用到的头文件和两个按钮的槽函数。摄像头显示窗口使用Qwidget。查找摄像头,并将画面显示到窗口。
2024-08-04 17:56:14
1004
原创 Qt串口助手滑块与STM32进行通信,控制步进电机正反转以及转动固定距离
其实这6个转换未槽函数的实现就是对应着QAbstractSlider的6个信号量触发函数。
2024-08-04 17:27:35
1173
1
原创 树莓派换源教程
使用下面命令查找树莓派版本bullseye可以理解为树莓派的系统代号(10,11,12都不同,一定要看好自己系统是什么版本)
2024-07-28 16:10:42
5124
2
原创 Qt串口助手 实现文本收发和Hex收发
实现串口调试助手,可配置通信关键参数,包括波特率、停止位、数据位、校验位;可以以16进制、ASCII码收发数据,显示时间戳、自动换行、自动发送等功能。
2024-07-21 19:14:30
1126
原创 Qt槽函数使用Lambda表达式
目的是简化编程工作。Lambda表达式的基本构成分为四个部分:[局部变量获取列表]、(函数参数)、函数额外属性设置opt、函数返回值->retype、{函数主体}
2024-07-19 13:58:29
731
原创 STM32串口提取所需数据
从STM32接收到的数据中提取我们所需的数据,极大的便利了串口控制的流程。如:从“Z轴移动10mm”中,将10提取出来,并赋值给其他变量。
2024-07-12 21:23:44
1239
1
原创 STM32串口收发HEX、文本数据包
STM32收发数据包只需在数据的左右分别发送包头包尾,当STM32接收到包头包尾时即可判断数据是否接收完毕,并提取包头包尾之间的数据进行处理。在串口接收中断中置状态机,即可过滤不需要的数据。建立数组,将要发送和接收到的数据存起来。STM32发送数组函数。
2024-06-04 20:42:33
382
原创 STM32 硬件IIC读取MPU6050
MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担 支持多主机模型支持7位/10位地址模式。
2024-05-31 12:07:55
2714
2
原创 树莓派打开摄像头
选项可改变保存图像的分辨率。会短暂显示一个预览窗口,其中包含所连接摄像头的视频画面。选项传递一个可选的持续时间(以毫秒为单位)。选项可更改预览窗口的显示时间。
2024-05-21 20:50:13
1494
1
原创 Qt自定义信号和槽
在窗口中声明一个公共方法下课,这个方法的调用会触发老师饿了这个信号,而响应槽函数学生请客。定义场景:下课了,老师跟同学说肚子饿了(信号),学生请老师吃饭(槽)首先定义一个学生类和老师类:(新建.cpp和.h文件)老师类中声明信号 饿了 hungry。学生类中声明槽 请客treat。学生响应了槽函数,并且打印信息。
2024-04-08 20:47:30
280
原创 Qt信号与槽
但是Qt对象不会无故收到某个信号,要想让一个对象收到另一个对象发出的信号,这时候需要建立连接(connect)当某个事件发生后,如某个按钮被点击了一下,它就会发出一个被点击的信号(signal)。第一行是创建一个关闭按钮,这个之前已经学过,第二行就是核心了,也就是信号槽的使用方式。4)slot:接收对象在接收到信号之后所需要调用的函数(槽函数)某个对象接收到这个信号之后,就会做一些相关的处理动作(称为槽slot)。1)sender:信号发送者。2)signal:信号。槽: 响应信号的动作。
2024-04-07 00:11:37
267
原创 QtCreator常用快捷键
整行移动代码 ctrl + shift + ↑或↓。跳到符号定义 F2 或者ctrl + 鼠标点击。帮助文档 F1 ,点击F1两次跳到帮助界面。同名之间的.h和.cpp文件跳转 F4。字体缩放 ctrl + 鼠标滚轮。自动对齐 ctrl + i。运行 ctrl +R。编译 ctrl +B。
2024-04-06 14:58:36
325
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅