自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 STM32—DMA直接存储器存取

DMA(Direct Memory Access)也叫直接存储器存取,DMA 可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须 CPU 干预,节省了 CPU 的资源,它的核心目的就是为 CPU 减负,实现数据的高速、后台传输。解放CPU:CPU 只需要配置和启动 DMA,之后就可以去执行其他代码,数据传输由 DMA 控制器完成提高效率:尤其适用于大量数据或高速数据流传输的场景(如 ADC 采样、UART 通信、SPI / I2C 读取传感器等)

2025-08-22 19:46:06 1248

原创 双环PID实现倒立摆实验

下图是倒立摆的稳定状态,通过下面的编码器,左右转动横杆,使得活动杆左右摇摆,将摆杆摆至顶端,然后由双环 PID 的输出值控制摆杆竖直向上,通过角度传感器判断摆杆杆是否在顶端或是在左右两边。

2025-08-18 21:17:33 775

原创 电位器式角度传感器

电位器式角度传感器是一种基于可变电阻(电位器)原理的角度测量装置,通过机械旋转改变电阻值,从而输出与角度成比例的电信号(通常为电压或电流)。

2025-08-18 16:18:46 264

原创 双环PID

多环 PID 相较于单环 PID,功能上,可以实现对更多物理量的控制,性能上,可以使系统拥有更高的准确性(不会产生稳态误差)、稳定性和响应速度;单环 PID 只能对被控对象的一个物理量进行闭环控制,而当用户需要对被控对象的多个维度物理量(例如:速度、位置、角度等)进行控制时,则需要多个 PID 控制环路,即多环 PID,多个 PID 串级连接,因此也称作串级 PID。

2025-08-18 11:37:03 1157

原创 PID控制算法

PID(比例-积分-微分)控制器是一种广泛应用于工业控制系统的反馈控制算法,PID 是一种闭环控制算法,它动态改变施加到被控对象的输出值(Out),使得被控对象某一物理量的实际值(Actual),能够快速、准确、稳定地跟踪到指定的目标值(Target)。PID 是一种基于误差(Error)调控的算法,其中规定:误差=目标值-实际值,PID 的任务是使误差始终为 0,对被控对象模型要求低,无需建模,即使被控对象内部运作规律不明确,PID 也能进行调控。P:眼睛看到偏离车道,立即打方向盘修正(现在)

2025-08-15 22:04:30 880

原创 嵌入式概念及硬件构成

一块芯片里集成了许多模块,例如 SPI 模块,CPU 上电之后如何使用 SPI 模块,SPI 模块不是 XIP(eXecute In Place)设备,也就是不能直接从它的 Flash 里面启动,这个时候就涉及到 ROM(Read-Only Memory)和 RAM(Random Access Memory),CPU 只能在 ROM 里面找到 SPI 的启动代码进行运行。在个人电脑领域,可以看到类似下图的主板。一般将 MCU 用于某个专业的功能,例如测温度、湿度等等,这样可以减少生产的成本。

2025-08-12 17:03:48 411

原创 STM32—CAN总线

CAN 总线(Controller Area Network,控制器局域网)是一种广泛应用于汽车、工业控制等领域的串行通信协议,由德国博世(Bosch)公司在 1980 年代开发,主要用于设备间的实时数据交换,当一个设备发送信息给 CAN 总线上,当这个信息通过了一些接收设备的过滤器,则接收设备就会收到发送设备的信息,如果多个接收设备都符合接收的条件,则有多个接收设备;两根通信线(CAN_H、CAN_L),线路少差分信号通信,抗干扰能力强。

2025-08-06 11:48:35 981

原创 FreeRTOS—Tickless低功耗模式

Tickless(无系统节拍) 是一种用于实时操作系统(RTOS,如FreeRTOS、RT-Thread等)的低功耗技术,它通过动态调整 SysTick 来减少不必要的 CPU 唤醒,从而降低功耗。Tickless 模式:当系统进入空闲状态时,RTOS 会计算下一个任务的最早唤醒时间,并暂时关闭 SysTick,让 CPU 进入低功耗状态(如睡眠模式)。在任务就绪前,再通过低功耗定时器(如RTC 或 LPTIM)唤醒 CPU。其实 Tickless 低功耗模式的本质是通过调用指令 WFI 实现睡眠模式。

2025-07-30 16:57:33 1147

原创 FreeRTOS—软件定时器

定时器,就是一个闹钟,从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期。硬件定时器:芯片本身自带的定时器模块,硬件定时器的精度一般很高,每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。硬件定时器属于外设,数量有限软件定时器:是指具有定时功能的软件,可以设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息。软件定时的数量理论上来说可以有无限个,由用户自定设定软件定时器的数量。

2025-07-30 14:48:29 1009

原创 FreeRTOS—任务通知

任务通知是用来通知任务的,任务控制块(TCB)中的结构体成员变量就是这个通知值。使用任务通知时,任务结构体就包含了内部对象,可以直接接收别人发过来的通知使用队列、信号量、事件标志组时都需另外创建一个结构体,通过中间的结构体进行简介通信。

2025-07-29 16:47:42 1088

原创 FreeRTOS—事件标志组

事件标志位是用一个位来表示时间是否发生;事件标志组是一组事件标志位的集合,可以看作一个整数。它的每一位表示一个事件(高 8 位不算,高 8 位用作存储时间标志组的控制信息)每一位事件的含义,由用户自己决定,如:bit0 表示按键是否按下,bit1 表示是否接收到消息任意任务或中断都可以读写这些位可以等待某一位成立,或者等待多位同时成立实际上是一个 16 位或 32 位无符号的数据类型,一个事件组就包括了一个//下面的宏默认为0,如果为1就进行if操作0。

2025-07-28 10:45:07 1062

原创 FreeRTOS—空闲任务

在 FreeRTOS 中,空闲任务(Idle Task)是一个由内核自动创建的系统任务,主要用于管理系统资源并在 CPU 空闲时执行后台操作。特性说明优先级固定为0(最低)主要职责清理内存、处理低功耗、支持定时器和统计功能用户扩展通过添加自定义逻辑(如低功耗)注意事项不要创建优先级=0的用户任务,且钩子函数中禁止阻塞操作。通过合理利用空闲任务,可以优化系统资源管理和功耗,尤其在电池供电的嵌入式设备中。

2025-07-27 16:15:29 459

原创 FreeRTOS—队列集

一个队列只允许任务之间传递的消息为同一种数据类型,如果需要在任务间传递不同的数据类型的消息时,那么就可以使用队列集。队列集的作用是用于多个队列或信号量进行监听,其中不管哪一个消息到来,都可以让任务退出阻塞状态。假设有一个接收任务,分别使用普通的接收和使用接收队列集的方法:等待接收队列;获取信号量;下面代码是使用接收队列集的方法,队列集里面有不同的数据,接收到之后进行if等待队列集中消息;if(队列还是信号量)...;

2025-07-27 15:42:08 1197

原创 FreeRTOS—互斥信号量

互斥信号量是一个拥有优先级继承的二值信号量,在同步的应用中二值信号量最适合,互斥信号量适用与需要互斥访问的应用中。

2025-07-25 22:00:49 921

原创 FreeRTOS—优先级翻转问题

优先级翻转顾名思义就是:高优先级的任务变成最后执行,低优先级的任务反而优先执行。优先级翻转在抢占式内核中是很常见的问题,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破环任务的预期顺序,可能会导致未知的严重后果。在使用二值信号量的时候,经常会遇到优先级翻转问题。

2025-07-25 16:47:49 457

原创 FreeRTOS—计数型信号量

计数型信号量相当于队列长度大于 1 的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。事件计数:当每次事件发生后,在事件处理函数中释放计数型信号量(计数值+1),其他任务会获取计数型信号量(计数值-1),这种场合一般在创建时将初始计数值设置为 0资源管理:信号量表示有效的资源数目,任务必须先获取信号量(信号量计数值-1)才能获取资源控制权,当计数值减为零时表示没有的资源。当任务使用完资源后,必须释放信号量(信号量计数值+1),信号量创建时计数值应等于最大资源数目。

2025-07-24 23:23:22 1178

原创 FreeRTOS—二值信号量

二值信号量的本质是一个队列长度为 1 的队列,该队列就只有空和满两种情况,也就是 0 和 1。通常用于互斥访问或任务同步,与互斥信号量比较类似,但是二值信号量有可能会导致优先级反转问题,所以二值信号量更适用于同步。

2025-07-24 21:50:50 586

原创 FreeRTOS—信号量

在 FreeRTOS 中,信号量(Semaphore)是一种用于任务间同步和资源管理的核心机制,主要用于控制对共享资源的访问、任务间的通信以及事件通知。信号量是队列的衍生,队列是传输数据,信号量是传输状态。FreeRTOS 提供了多种信号量类型,每种适用于不同的场景。下面详细介绍 FreeRTOS 信号量的类型、使用方法和典型应用。

2025-07-24 15:19:31 363

原创 FreeRTOS—队列

队列(Queue)是 FreeRTOS 中一种 任务间通信(IPC, Inter-Process Communication) 机制,用于安全地在任务之间传递数据,也可以用于任务与中断服务程序之间的通信。FreeRTOS基于队列,实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二值信号量、递归互斥信号量。

2025-07-23 16:28:42 1518

原创 FreeRTOS—每个函数名的前缀

这种命名风格提高了代码的可读性,开发者可以通过函数名快速判断其用途和返回值类型。在 FreeRTOS 中,函数名的前缀(如 v、ux、x 等)是一种命名约定,用于表示函数的。2.其他常见前缀(行为或模块)1.前缀与返回类型的对应关系。

2025-07-21 16:42:50 164

原创 FreeRTOS—时间片调度

当多个任务的任务优先级相同时,CPU 会轮流的处理每一个任务,每个任务享有 CPU 处理的时间都是相同的,这个时间被称为时间片,一个时间片就等于 SysTick 中断周期(可以由用户自行设置),CPU 给与了一个时间片运行一个任务,不管这个任务是否运行完成,CPU 都会跑到下一个任务。例如:创建三个任务:task1、task2、task3,它们的任务优先级均为 1,如下图所示:首先 task1 运行完一个时间片之后,切换到 task2 运行task2 运行完一个时间片之后,切换至 task3 运行。

2025-07-21 16:05:22 778

原创 FreeRTOS—列表和列表项

列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来追踪 FreeRTOS 中的任务,列表项就是存放在列表中的项目;列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表,列表和列表项的关系和下图所示:列表的特点:列表项间的地址非连续,是人为的连接到一起的,列表项的数目是由后期添加的个数决定的,随时可以改变。数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后期无法改变。

2025-07-19 16:55:30 1193

原创 FreeRTOS—临界段代码保护及调度器挂起与恢复

临界段代码也叫做临界区,是指那些必须完整运行,不能被中断、任务调度所打断的代码段,适用的场景如:临界段代码保护的特点:FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断,下表是有关临界段代码保护的函数:中断级临界区调用格式示例:二、任务调度器的挂起与恢复2.1.任务调度器的挂起与恢复函数介绍挂起任务调度器,调用此函数不需要关闭中断,下表是相关函数:任务调度器的挂起与恢复的作用:下面代码是使用格式:2.2.源码解析找到函数,右键进入定义它的地方,查看它的

2025-07-18 11:21:32 897

原创 FreeRTOS—中断管理

中断就是让 CPU 打断正常运行的程序,转而去处理紧急的事件;中断请求:外设产生中断(GPIO 外部中断、定时器中断等等)响应中断:CPU 停止执行当前程序,转而去执行中断处理程序( ISR )执行完毕,返回被打断的程序处,继续往下执行。

2025-07-17 20:45:18 870

原创 FreeRTOS—任务的挂起与恢复的API函数

API函数描述挂起任务恢复被挂起的任务在中断中恢复被挂起的任务挂起:挂起任务类似暂停,可恢复;删除任务,无法恢复恢复:恢复被挂起的任务“ FromISR ”:带 FromISR 后缀是在中断函数中专用的API函数。

2025-07-16 22:25:04 1252

原创 FreeRTOS—动态创建与删除任务实战;静态创建与删除任务实战

【代码】FreeRTOS—动态创建与删除任务实战;静态创建与删除任务实战。

2025-07-12 21:58:13 580

原创 FreeRTOS—任务创建和删除的API函数和方法

下面代码是任务控制块结构体的各个成员介绍,其中任务栈栈顶与任务切换时的任务上下文保存、任务恢复息息相关,每个任务都有属于自己的任务控制块,就像每个人有自己的身份证。//指向任务栈栈顶的指针,必须是TCB的第一个成员//任务状态列表项//任务等待事件列表项//任务的任务优先级//任务栈的起始地址//任务的任务名//以下还有很多条件编译的成员......} tskTCB;任务删除的函数是它的形参是,是待删除任务的任务句柄,该删除函数必须用于已被创建的任务,被删除的任务将从就绪。

2025-07-10 16:33:33 1181

原创 FreeRTOS—初识RTOS、移植

本专栏基于正点原子的《FreeRTOS开发指南_V1.10》所编写,使用的开发板型号是精英型STM32f103zet6。“RTOS”全称是 Real Time Operating System,中文名就是实时操作系统,RTOS 并不是值某一特定的操作系统,而是指一类操作系统,例如,µC/OS,FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类的操作系统。因此,从 FreeRTOS 的名字中就能看出,FreeROTS 是一款免费的实时操作系统,也正因FreeRTOS开源免费。

2025-07-09 20:32:53 1250

原创 贪吃蛇小游戏

ncurses(“new curses”)是一套用于在类UNIX系统(如Linux、BSD等)上创建字符终端界面的函数库。它提供了一系列丰富的函数,可用于处理屏幕输出、键盘输入、窗口管理等操作。借助ncurses,开发者能够方便地开发出文本模式下的交互式应用程序,像文本编辑器、文件管理器、菜单驱动的工具等。它兼容传统的curses库,具备良好的可移植性,能在多种不同的终端环境下正常工作,极大地简化了在字符终端上构建复杂用户界面的过程。int lie。

2025-07-08 13:41:45 736

原创 STM32 Hal库版—串口、USART(通用同步异步收发器)

USART的全称是Universal synchronous asynchronous receiver transmitter,通用同步异步收发器;UART是裁剪了同步功能,所以叫通用异步收发器,它们都可以与外部设备进行全双工通信。//标志为1,收到信息。

2025-07-06 12:36:50 1323

原创 STM32 Hal库版—NVIC、外部中断(EXTI)、AFIO

STM32中的中断是指在程序正常运行时,外部事件或内部异常强行打断当前执行流程,转而执行相应处理程序,完成后再返回原流程的机制。在STM32中,中断是指当外设或处理器内部发生某些事件时,处理器暂停当前执行的程序,转而执行预定义的中断服务程序,处理完毕后再返回原程序继续执行的机制。

2025-06-30 00:31:23 1090

原创 STM32 Hal库版—GPIO

GPIO的全称是General Purpose Input Output,即通用输入输出端口,它和51单片机里的IO口一样,只是一个输入输出的端口,负责采集外部器件的信息或者控制外部期间工作。CRL、CRHIDRODRBSRRLCK配置工作模式,输出速度输入数据输出数据设置ODR寄存器的值配置锁定。

2025-06-27 16:28:37 1420

原创 STM32 Hal库版—STM32CubeMX软件和创建一个工程

STM32CubeMX是ST开发的一款图形配置工具,可通过配置自动生成初始化代码,不会生成逻辑代码,因此该软件只是一个辅助工具,想要配置一个外设的初始化,看手册也难以理解的时候,这个软件是个不错的选择。一个图形配置工具,搭配不同系列的STM32Cube固件包,即可支持不同系列的STM32芯片。

2025-06-26 23:48:03 957

原创 STM32 Hal库版—介绍STM32和新建Hal库工程

STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器,常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。

2025-06-26 16:51:20 383

原创 51单片机—红外遥控器和NEC协议

人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为 0.62~0.76μm;紫光的波长范围为 0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。红外线遥 控就是利用波长为 0.76~1.5μm 之间的近红外线来传送控制信号的。红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出。通信方式:单工,异步红外LED波长:940nm通信协议标准:NEC标准。

2025-06-26 15:48:58 939 1

原创 51单片机—AD和DA的转换

运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中。ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号。单片机在采集模拟信号时,通常都需要在前端加上 A/D 芯片。DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信。

2025-06-26 11:08:50 1128

原创 51单片机—脉冲宽度调制(PWM)实现直流电机的调速和呼吸灯

PWM 是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域。频率 = 1 / T(S)占空比 = T(ON) / T(S)精度 = 占空比变化步距直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。

2025-06-25 16:02:24 648

原创 51单片机—单总线和DS18B20

单总线是美国DALLAS公司推出的外围串行扩展总线技术。与SPI、IIC串行数据通信方式不同.它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线一根通信线:DQ异步、半双工单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线。

2025-06-25 11:32:31 1515

原创 链表的插入、删除、修改与创建

每来一次新的数据,就放在链表的头里,先到后出,类似栈,也类似弹匣压子弹的方式。尾插法讲究先来后出,按顺序输入,按顺序输出。在查找的基础上只是添加了这一行代码即可实现。尾插法指在链表中特定节点的。把原来的链表首地址传过来,函数有三个参数,分别是。插入这一个新的节点。

2025-06-22 17:28:12 910

原创 链表节点个数和链表查找

编写一个返回int类型的函数,在函数里面,定义一个count计数进入循环的次数,也就是指针没有指向NULL之前。

2025-06-21 23:40:25 231

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除