自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 websocket

服务器在接收到客户端的 WebSocket 握手请求后,发送响应来确认建立 WebSocket 连接。它允许客户端和服务器之间进行实时、双向的数据交换,WebSocket 是一种在。

2025-03-17 20:54:19 469

原创 SPI和IIC总线协议

SPI总线采用同步方式工作,时钟线再上升沿或者下降沿时发送器向数据线上发送数据,再紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个是时钟周期即可完成一个字节数据的传送;IIC总线在进行数据发送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线在高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。IIC总线上传送的数据时广义的,既包括地址,又包括真正的数据。

2025-03-17 17:37:00 718

原创 STM32启动过程概述

STM32 的启动过程是一个系统化的过程,涵盖了硬件初始化、时钟配置、外设配置等多个方面。通过从复位向量到进入main()函数的多步操作,确保了系统的各个部件和外设准备好为用户应用提供服务。理解这一过程对开发 STM32 应用非常重要,尤其是在调试、优化启动时间和进行系统级开发时。

2025-02-08 13:43:55 1216

原创 FreeRTOS学习 --- Tickless低功耗模式

configPOSR_SLEEP_PROCESSING(x) 此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行(这个宏用来定义出低功耗模式后执行的事务,所以后续要处理的事务,要自己定义)退出低功耗后,需补上系统时钟节拍数(因为修改了滴答定时器的中断周期,导致系统时钟节拍数不准确,所以要进行系统时钟节拍的补偿)任务运行时间统计实验中,可以看出,在整个系统的运行过程中,其实大部分时间是在执行空闲任务的。

2025-02-07 15:46:05 299

原创 FreeRTOS学习 --- 软件定时器

从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期。

2025-02-07 13:03:04 981

原创 FreeRTOS学习 --- 任务通知

任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。使用队列、信号量、事件标志组时都需另外创建一个结构体,通过中间的结构体进行。

2025-02-05 01:40:38 939

原创 FreeRTOS学习 --- 时间标志组

事件标志位:用一个位,来表示事件是否发生事件标志组是。

2025-02-04 16:29:04 733

原创 FreeRTOS学习 --- 队列集

一个队列只允许任务间传递的消息为同一种数据类型,

2025-02-03 22:28:52 354

原创 FreeRTOS学习 --- 信号量

当一个互斥信号量正在被一个低优先级的任务持有时, 如果此时有个高优先级的任务也尝试获取这个互斥信号量,那么这个高优先级的任务就会被阻塞。互斥信号量有任务优先级继承的机制, 但是中断不是任务,没有任务优先级, 所以互斥信号量只能用与任务中,不能用于中断服务函数。的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。使用计数型信号量的过程:创建计数型信号量 --->使用二值信号量的过程:创建二值信号量 --->信号量表示有效的资源数目。),其他任务会获取计数型信号量(计数值-1。

2025-02-03 22:19:51 1049

原创 FreeRTOS学习 --- 消息队列

队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递。

2025-02-02 23:46:28 1148

原创 FreeRTOS学习 --- 时间管理(相对延时和绝对延时)

指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务。为任务主体,也就是任务真正要做的工作。开始,直到延时指定的时间结束。指每次延时都是从执行函数。

2025-02-02 16:45:14 322

原创 FreeRTOS学习 --- 任务相关API函数

()获取任务优先级()设置任务优先级()获取系统中任务的数量()获取所有任务状态信息()获取指定单个的任务信息()获取当前任务的任务句柄()根据任务名获取该任务的任务句柄()获取任务的任务栈历史剩余最小值()获取任务状态vTaskList()以“表格”形式获取所有任务的信息()获取任务的运行时间。

2025-02-02 16:42:29 1072

原创 FreeRTOS学习 --- 时间片调度

3、注意没有用完的时间片不会再使用,下次任务。阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务。、一个时间片大小,取决为滴答定时器中断频率。得到执行还是按照一个时间片的时钟节拍运行。、同等优先级任务,轮流执行;运行过程中(还不到一个时间片),运行完一个时间片后,切换至。运行完一个时间片后,切换至。运行完一个时间片后,切换至。

2025-02-02 16:18:21 411

原创 FreeRTOS学习 --- 任务切换

任务切换的本质:就是CPU寄存器的切换。假设当由任务A切换到任务B时,主要分为两步:第一步:需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场;第二步:将任务B的各个寄存器值(被存于任务堆栈中)恢复到CPU寄存器中,这个过程叫做恢复现场;对任务A保存现场,对任务B恢复现场,这个整体的过程称之为:上下文切换1、滴答定时器中断触发PendSV中断2、执行FreeRTOS提供的相关API函数:触发PendSV中断。

2025-02-02 15:56:18 1017

原创 FreeRTOS学习 --- 任务调度

对于正点原子的 STM32F1、 STM32F4、 STM32F7 和 STM32H7 开发板上使用的 ARM Cortex-M 的 MCU 内核来说, ARM Cortex-M 提供了两个栈空间, 这两个栈空间的堆栈指针分别是。

2025-01-31 23:49:13 1175

原创 FreeRTOS学习 --- 列表和列表项

列表是 FreeRTOS中的一个数据结构,概念上和链表有点类似,

2025-01-31 20:48:44 1122

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

什么是临界段:临界段代码也叫做临界区,是指那些必须完整运行,

2025-01-31 16:45:32 306

原创 FreeRTOS学习 --- 中断管理

让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断中断执行机制,可简单概括为三步:1,中断请求外设产生中断请求(GPIO外部中断、定时器中断等)2,响应中断CPU停止执行当前程序,转而去执行中断处理程序(ISR3,退出中断执行完毕,返回被打断的程序处,继续往下执行STM32中断是怎么进入到中断服务程序的?

2025-01-31 15:21:41 929

原创 FreeRTOS学习 --- 任务的挂起与恢复

挂起: 挂起任务类似暂停,可恢复; 删除任务,无法恢复,类似“人死两清”恢复: 恢复被挂起的任务“FromISR”:带FromISR后缀是在中断函数中专用的API函数 此函数用于挂起任务,使用时需将宏 INCLUDE_vTaskSuspend 配置为 1。 无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复 。注意:当传入的参数为NULL,则代表挂起任务自身(当前正在运行的任务)任务中恢复被挂起函数: 使用该函数注意宏:INCLUDE_vT

2025-01-29 22:47:04 887

原创 FreeRTOS学习 --- 动态任务创建和删除的详细过程

2、记录栈顶,保存在pxTopOfStack3、保存任务名字到pxNewTCB->pcTaskName[ x ]中4、保存任务优先级到pxNewTCB->uxPriority5、设置状态列表项的所属控制块,设置事件列表项的值6、列表项的插入是从小到大插入,所以这里将越高优先级的任务他的事件列表项值设置越小,这样就可以排到前面7、调用pxPortInitialiseStack初始化任务堆栈,用于保存当前任务上下文寄存器信息,已备后续任务切换使用8、将任务句柄等于任务控制块。

2025-01-29 20:44:24 416

原创 FreeRTOS的任务创建和删除

任务的创建和删除本质就是调用FreeRTOS的API函数动态创建任务:任务的任务控制块以及任务的栈空间所需的内存,均由 FreeRTOS 从 FreeRTOS 管理的堆中分配。静态创建任务:任务的任务控制块以及任务的栈空间所需的内存,需用户分配提供。动态创建任务函数实现动态创建任务流程。

2025-01-29 17:11:02 781

原创 初学FreeRTOS --- 系统配置

这部分是于 FreeRTOS 内存分配相关的配置项,如下表所示:这部分是 FreeRTOS 中一些钩子函数的相关配置项,如下表所示:这部分是与运行时间和任务状态统计相关的配置项,如下表所示:此宏用于使能任务运行时间统计功能, 当宏 configGENERATE_RUN_TIME_STATS 设置为1 时,使能任务运行时间统计功能,此时用户需要提供两个函数,

2025-01-29 16:17:38 823

原创 初学stm32 --- FreeRTOS移植

第二种途径就是 FreeRTOS 内核的演示工程,在“FreeRTOS 文件预览”这一小节中,介绍了 Demo 文件夹, Demo 文件夹中包含了 FreeRTOS 官方提供的演示工程,在这些演示工程当中就包含了每个演示工程对应的 FreeRTOSConfig.h 文件,需要注意的是,有些演示工程使用的是老版本的 FreeRTOS,因此部分演示工程的 FreeRTOSConfig.h 文件并不能够很好的适用于新版本的 FreeRTOS。当然,对于 FreeRTOS 新手来说,笔者是不建议自行编写的。

2025-01-26 18:05:18 2508

原创 初学FreeRTOS --- 介绍

RTOS” 全称是 Real Time Operating System, 中文名就是,要注意的是, RTOS 并不是指某一特定的操作系统,而是指一类操作系统,例如, µC/OS, FreeRTOS, RTX, RT-Thread 等这些都是 RTOS 类的操作系统。因此,从 FreeRTOS 的名字中就能看出, FreeROTS 是一款免费的实时操作系统。

2025-01-26 15:35:53 945

原创 嵌入式通信协议

UART是一种常用的串行通信协议。它以异步通信的方式传输数据。它有两根信号线分别是Rx和Tx,Rx是用来接收数据的,而Tx是用来发送数据的。UART有以工作在全双工、半双工、单工模式下。UART数据帧结构为起始位(1bit)、数据位(5、8bit)、校验位(可选,1bit)、还有停止位(1bit),常用的通信数据帧为10位,即包含1位的起始位,8位的数据位,还有1位的停止位。异步传输:就是指不需要时钟信号,通过波特率匹配进行通信。

2025-01-26 14:55:24 723

原创 C++中从获取终端输入的数据

在C++中,要获取终端输入的数据,你可以使用cin流来读取输入。cin是标准输入流,通常用于从键盘获取用户的输入。

2025-01-21 10:56:38 282

原创 初学stm32 --- flash模仿eeprom

在STM32芯片内部有一个FLASH存储器,主要用于存储代码。内部FLASH主要由三部分组成:主存储器、信息块、闪存存储器接口寄存器。主存储器:地址范围为0x08000000~0x0807FFFF,分为256页,每页2KB(小/中容量为1K)。当BOOT0接地,系统将从0x08000000地址处开始读取代码(从主存储器启动)信息块:系统存储大小为2KB,用来存储ST自带的启动程序,用来串口下载代码。选项字节大小为16B

2025-01-17 23:29:13 1358

原创 初学stm32 --- CAN

CAN(),是ISO国际标准化的串行通信协议。为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米高速CAN(ISO11898)通信速率,总线长度≤40米(经典CAN)CAN FD 通信速率可达5Mbps,并且兼容经典CAN,遵循做数据收发更多CAN的历史知识,可以上CiA官网了解。

2025-01-16 16:54:50 3340

原创 UART 串口的全双工模式与 SPI 的全双工模式的区别

独立的发送和接收通道:没有自动回传机制:数据流由逻辑控制:同步时钟和数据传输:数据交换机制:

2025-01-15 12:35:10 156

原创 初学stm32 --- RS485

1,配置串口工作参数2,串口底层初始化配置GPIONVICCLOCK等3,开启串口异步接收中断4,设置优先级,使能中断()5,编写中断服务函数()6,串口数据发送USART_DR,()

2025-01-15 11:25:06 478

原创 c语言 --- 字符串

创建方式存储位置是否可修改内容字符数组(如char str[]栈内存可以指向字符串常量的指针(如char *只读内存不可以(未定义行为)动态分配的字符串(如malloc堆内存可以逐个字符赋值的数组栈内存可以。

2025-01-14 23:21:41 1207

原创 初学stm32 --- SPI驱动25Q128 NOR Flash

①SPI相关引脚MOSI(输出数据线) MISO(输入数据线) SCK(时钟) NSS(片选)② 数据发送和接收与缓冲区、移位寄存器以及引脚相关③ 时钟信号SPI时钟信号是通过SPI_CR1寄存器配置④ 主控制逻辑涉及两个控制寄存器SPI_CR1/2用于配置SPI工作,SPI_SR用于查看工作状态。

2025-01-14 15:51:04 832

原创 初学stm32 --- II2C_AT24C02,向EEPROM中读写数据

IIC,集成电路总线,是一种同步 串行 半双工通信总线。总线:就是传输数据的通道协议:就是传输数据的规则。

2025-01-13 15:59:45 1008

原创 初学stm32 --- PWM DAC

信号的占空比随时间改变,那么其直流分量随之改变,信号滤除交流分量后,将输出幅度变化的模拟信号。,为了让音频信号能够通过该低通滤波,同时为了标准化参数选取,所以确定了这样的参数。PWM可以被分解为一个直流分量和一个占空比固定,但是平均幅度为零的方波。在精度要求不高的场合,可以用一种廉价的解决方案实现DAC。根据傅里叶理论,任意周期波形都可以分解为无限个频率为其整数倍的谐波之和。PWM是周期固定,占空比可调的数字信号。当然分辨率越高,速度就慢,低通滤波电路的要求也越高。位的,可以很容易得到更高分辨率的。

2025-01-13 13:21:26 1182

原创 初学stm32 --- DAC输出三角波和正弦波

1,功能描述通过DAC1通道1(PA4)输出三角波,然后通过DS100示波器查看波形2,关闭通道1触发即自动TEN1位置03,关闭输出缓冲BOFF1位置14,使用12位右对齐模式将数字量写入寄存器输出三角波函数。

2025-01-12 19:34:20 1105

原创 初学stm32 --- DAC输出

摘自:STM32F10xxx参考手册_V10(中文版).pdf12.5.1节。

2025-01-11 00:07:23 538

原创 初学stm32 --- DAC模数转换器工作原理

不能直接向DORx寄存器写入数据,也不能直接向DHRx寄存器写入数据,实际操作是向DHRyyy写入数据,然后系统会自动将写入DHRyyy的数据写入到DHRx中,然后通过DAC控制寄存器,最后在DORx寄存器中写入DHRyyy的数据。这里的比例系数误差就是k不等于a,失调误差是b不等于0;(这里的yyy是选择8位12位的分辨率,以及左对齐还是右对齐,以及是严格单通道,以及是否使用双通道)表示模拟电压的最小增量,常用二进制位数表示,比如:8。三种触发转换的方式:自动触发、软件触发、外部事件触发。

2025-01-10 23:49:25 1202

原创 初学stm32 --- adc光敏传感器

有光照时,光的强度越大,反向电流也越大,形成光电流(非线性变化)利用电流变化的特点,串联一个电阻,就可以得到电压的变化,通过。无光照时,反向电流很小(一般小于0.1。结,对光强非常敏感,单向导电性,工作时需加。读取,从而知道光强变化。

2025-01-10 18:31:45 327

原创 初学stm32 --- ADC采集内部温度传感器

温度计算式子:

2025-01-10 18:29:23 421

原创 初学stm32 --- 单通道ADC过采样

ADC过采样技术, 是利用ADC多次采集的方式, 来提高ADC精度, 采样速度每提高4倍采样精度提高 1bit, 同时, ADC采样速度降低4倍, 如提高4bit精度, 需要256次采集才能得出1次数据, 相当于ADC速度慢了256倍. 理论上只要ADC足够快, 我们可以无限提高ADC精度, 但实际上ADC并不是无限快的, 而且由于ADC性能限制, 并不是位数无限 提高结果就越好, 需要根据自己的实际需求和ADC的实际性能来权衡。位,就得到提高分辨率后的结果。位分辨率,采样频率就要提高。

2025-01-10 17:50:54 430

空空如也

空空如也

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

TA关注的人

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