- 博客(53)
- 收藏
- 关注
原创 回顾C语言数组
数组是一种数据结构,是一种存放数据的方式,把一种类型的数据放在一起,在创建数组时,数组元素个数不能为0。数组创建:类型 arr 【常量】二维数组:arr【】【7】
2025-11-24 13:20:27
257
原创 OLED驱动
我们发送数据时可以指定发送的是命令还是数据,芯片从1处获取数据,获取到的数据分,命令和数据,是命令传入2,是数据传入32是命令译码器,执行传输的命令3是内置显示存储器,决定显示在屏幕上的内容4是显示控制器,他的任务就是将3中的内容显示到屏幕上,也就是驱动器9是震荡器,用于提供屏幕时钟CL是时钟输入脚,CLS是时钟时钟源选择脚,CLS接高电平用内部时钟,CLS接低电平接外部时钟(CL),一般接内部时钟8电流控制和电压控制。
2025-11-23 21:56:16
865
原创 回顾通信方式
串口是一对一的串行非实时全双工的一种通信协议,他也有两根线,Tx,Rx,两台设备之间通信,Tx是发送数据,Rx是接收数据一台设备的Tx连另一台设备的Rx,两台设备通信必须设置好相同的波特率,发送方以规定的速度发送数据,接收方也用相同的速度接收速度,串口是低位先行。
2025-11-22 22:00:18
879
原创 PID详解
PID是一种控制算法,通过调节PID系数使系统误差达到最小化,常用来调节PWM波控制,PID算法有三个系数Kp(比列系数),Ki(积分系数),Kd(微分系数),这三个系数是由我们自己通过实际显现调节的得来的。
2025-11-21 19:13:56
627
原创 FreeRTOS低功耗模式
Tickless模式的工作流程可以比作一个高效的管理员:他不会每分钟都看表,而是计算下一个会议还有多久,设定好闹钟再去休息其具体步骤如下:进入空闲任务:当所有用户任务都处于阻塞状态时,系统切换到空闲任务(Idle Task)计算休眠时间:空闲任务计算到下一个需要处理的事件(如任务延时到期、定时器触发)还有多长时间,这个时间记为(期望空闲时间)判断与准备:如果大于配置的阈值,则配置一个硬件定时器(如RTC)在指定时间后产生中断来唤醒系统4.进入低功耗模式。
2025-11-21 16:20:52
232
原创 FreeRTOS软件定时器
软件定时器的精读和分辨率不高(靠滴答定时器),没有硬件定时器精度高,硬件定时器想设置多少秒进一次中断可以通过参数调整,软件定时器只能靠滴答定时器(1ms进一次中断),但是软件定时器节约资源,FreeRTPS中的软件定时器,是基于FreeRTOS中时钟源(滴答)运行的,当设置好周期,周期一到就会进入,软件定时器的回调函数,,使用软件定时器要创建软件定时器任务,回调函数也需要我们自己写,他负责软件定时器的超时逻辑判断,调用软件定时器的回调函数,还有命令队列。开启头文件#include"timers.h"
2025-11-20 22:33:01
210
原创 FreeRTOS事件标志组/任务通知
事件标志组,可以看成标志位,用0和1来代表事件发生还是没有发生,他通过configUSE_16 BIT TICKS这个宏来决定标志组大小,当宏为1这个标志组大小为8比特的,可以表示8个事件,宏为0,则表示大小为24,可以表示24个事件事件标志组也有头文件:#include "event_groups.h"
2025-11-19 18:51:47
464
原创 FreeRTOS队列集
队列集是一种数据结构,用于管理多个队列,使任务能更轻松的访问和处理多个队列中的数据,集中管理多个队列,只需要一个API函数就可以同时操作多个队列,无需分别处理每个队列。
2025-11-18 22:26:44
132
原创 FreeRTOS——信号量
信号量也主要用于管理共享资源的访问,确保在同一时间内只有一个任务可以对共享资源访问,他的数据只有一个,他只能表示0和1,如:当有一个全局变量a,同一时间任务一想要对其++,但任务2也要对其++,++的·过程是获取值后+1然后再返回值,如果不用信号量管控,任务1,任务2同时操作后a实际只自加了一次,
2025-11-18 13:44:29
408
原创 STM32_标准库转hal库
阻塞式接收,有四个传参,串口句柄,要传输数据的地址,数据大小,超时时间,只有当接收到规定的字节或到阻塞最大时间程序才会继续运行。
2025-11-14 21:20:57
658
原创 STM32--智能小车
功能:避障,红外循迹,蓝牙控制材料:红外循迹模块,电机驱动,两个电机,舵机,超声波测距,蓝牙模块,降压模块,12v锂电池,stlink下载,杜邦线若干(有两根必须能承受12v电压功率)此项目搭建材料,主程序编写与模块编写全由我一人完成,耗时5天。
2025-10-05 16:47:20
1456
原创 STM32---看门狗
看门狗实际就是计数器,当到喂狗的时间程序将自动重装器的值给计数器,看门狗的计数器是自减计数器,当减到0,会有一个信号提醒我们程序有问题,没有及时喂狗,所以我们要再计数器自减到0前把自动重装器的值个计数器。
2025-09-19 17:34:42
201
原创 STM32--时间戳,BKB,RTC
就是基于时间戳来设置的时钟,他也有备用电源,当主设备断电他可以用备用电源提供供电,来做到时钟计数准时他的时钟通常用LSE时钟源这是特定给RTC来设计的时钟。
2025-09-11 18:03:21
495
原创 STM32----W25QXX
块--->扇-->页块分成128块一块64kb一块分成16扇一扇4kb一个扇区分成16页,页的大小是256个字节。
2025-09-06 20:29:32
232
原创 STM32----MPU6050
六轴:三轴加速度,三轴陀螺仪九轴:三轴加速度,三轴陀螺仪,三轴磁场强度十轴:三轴加速度,三轴陀螺仪,三轴磁场强度,气压强度姿态角(欧拉角):表示飞机的姿态,这个欧拉角要通过数据融合(将加速度,陀螺仪,磁场强度,气压强度融合,取长补短得到欧拉角)加速度计(Accel):具有静态稳定性,不具有动态稳定性陀螺仪计(Gyro):具有动态稳定性,不具有静态稳定性。
2025-09-01 20:53:23
243
原创 STM-----USART
波特率发生器相当于分频器,但不需要我们算由软件算好硬件流控制:防止因传输速率过快导致数据覆盖或数据丢失,如果有硬件流控制,硬件会多出一根线,当接收设备准备好时置低电平,未准备好和常态置高电平,只有发送设备接受到接收设备的反馈才会继续发数据USART接受和发送有四个寄存器但这四个寄存器共用一个地址,当收到数据:数据---->接收移位寄存器--->接收数据寄存器(RDR)(只读)当发送数据时:数据---->发送数据寄存器(TDR)(只写)---->发送移位数据寄存器。
2025-08-28 21:47:43
275
原创 STM32--定时器编码器接口
第二步:配置时基单元,这里分频器一般不分频,自动重装配置成65535,CNT配置执行计数。第三步:配置输入捕获单元,这里只需要配置极性和滤波器。第一步:开启GPIO时钟并初始化(配置成输入模式)第四步:配置编码器接口模式。定时器编码器接口配置。
2025-08-17 19:42:29
162
原创 STM32----TIM输入捕获
(输入捕获和输出比较都有四个通道,输出比较每个通道都有对应的函数,输入捕获四个通道共用一个函数,结构体里有一个参数来选择配置那个通道)这个函数也是初始化输入捕获单元的上个函数只是单一配置一个通道,这个函数可以快速配置两个通道。第三步:配置输入捕获单元(滤波器,极性,直连通道还是交叉通道,分频器)这些是结构体。分别单独配置四个通道的分频器。(这个参数结构体也有配置)第二步:配置时基单元,并且用内部时钟源然CNT自增运行。第六步:选择触发后执行的操作复位(Reset)第四步:选择从模式触发源(TI1FP1)
2025-08-16 18:33:26
143
原创 stm32----定时中断
第五步:配置nvic,在nvic中打开定时器中断通道,并分配优先级。第四步:配置中断输出控制,允许跟新事件输出到nvic。时基单元(预分频器,计数器,自动重装寄存器)第六步:使能计数器,使能后计数器才能计数。第二步:选择时基单元的时钟源。第一步:开启RCC时钟,第三步:配置时基单元。
2025-08-13 17:47:32
207
原创 c语言 数据在内存中的·存储
M*2^E表示二进制小数,例如101.1=1.011*2^2 此时M=1.011 E=2;例如:0x11 22 33 44存储时是44 33 22 11。例如:0x11 22 33 44存储时是11 22 33 44。将数据低字节内容存放在低地址处,将高字节内容存放在高地址处。将数据高字节内容存放在低地址处,将低字节内容放在高地址处。(-1)^S:表示正负数如果V是负数S为1,否则为2;1.第一种申请32位字符时(4字节)(float)将1去掉了,取出时再加上。将1去掉了,取出时再加上。
2025-05-09 16:10:52
182
原创 C语言 内存函数
将源内存地址复制n个字节到目标内存,当目标内存有值时使用memcpy会将目标内存中的值覆盖注;memcpy不负责重叠空间的复制。
2025-05-08 23:10:53
200
原创 单片机 密码锁
2.输入密码,给一个变量来表示密码,通过。4.对照输入的密码是否与真实密码一样,3.按错按钮,对密码清0。1,设一个变量装真密码。
2025-05-06 16:27:42
142
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅