- 博客(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学习 --- 任务通知
任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。使用队列、信号量、事件标志组时都需另外创建一个结构体,通过中间的结构体进行。
2025-02-05 01:40:38
939
原创 FreeRTOS学习 --- 信号量
当一个互斥信号量正在被一个低优先级的任务持有时, 如果此时有个高优先级的任务也尝试获取这个互斥信号量,那么这个高优先级的任务就会被阻塞。互斥信号量有任务优先级继承的机制, 但是中断不是任务,没有任务优先级, 所以互斥信号量只能用与任务中,不能用于中断服务函数。的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。使用计数型信号量的过程:创建计数型信号量 --->使用二值信号量的过程:创建二值信号量 --->信号量表示有效的资源数目。),其他任务会获取计数型信号量(计数值-1。
2025-02-03 22:19:51
1049
原创 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学习 --- 中断管理
让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
原创 初学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模数转换器工作原理
不能直接向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过采样
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关注的人