自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 飞控PID进阶

无人机飞控PID

2024-03-24 10:25:26 660

原创 无人机的轴数说明

使用偏航速率可以使控制系统更加稳定,因为它允许更直接地调整飞行器的旋转速度,而不会受到角度表示法的周期性问题的影响。例如,在使用偏航速率的控制系统中,如果需要让飞行器绕垂直轴旋转特定的角度,控制系统可以更准确地调整偏航速率,而不需要考虑到飞行器已经旋转了多个圈。总的来说,四轴和六轴无人机的区别在于它们的轴数,六轴相对于四轴来说更加稳定和灵活,但也会增加复杂性和成本。这两个额外的轴使得飞行器在空间中的运动更加灵活,尤其是在悬停和稳定飞行时。四轴和六轴通常指的是无人机的飞行器结构中的轴数。

2024-04-12 10:26:10 218

原创 无人机卡尔曼滤波简介

讲述卡尔曼滤波在无人机上用处与简述说明为什么要用这个算法

2024-04-12 10:24:16 350

原创 蓝牙模块1

这个蓝牙模块是一个串口TTL接口,既实现AT指令来设置和查询相关参数,同时实现串口数据透传。方法2进入AT状态后,模块波特率和通信波特率一致(通信波特率可以设置,默认为9600)在这里指令和参数都可选的,不过切记在发送末尾添加回车符(\r\n ),否则模块不响应。:方法1进入AT状态后,模块波特率为38400(8位数据位,一位停止位)。蓝牙模块是一种运用Usart串口的模块,可以远程控制模块。AT+(指令(CMD)) = 参数(PARAM)AT+(指令(CMD))->AT+(指令(CMD)?

2024-03-24 10:53:01 285

原创 匿名飞控代码

驱动,lED,ADC,PWM,Time,USART,Math(数学库),接收机采集(RCin),光流(Ano of),GPS数据的采集。先判断是否有信号,然后如果第六通道拨杆满足下面的要求,就执行一键起飞。里的内容主要是协议PDF中有的的控制命令,可以在Pdf中查看。2.在野外快速的触发校准,都是通过遥感打到不通位置实现的。函数是最关键的,是用来发送这个一键起飞的命令。Library里都是Stm32里的函数库。然后一键降落也是一样。

2023-12-10 12:39:16 473 1

原创 OLED进阶知识

如果使用GB2312的编码格式,移植文件的过程和前一个一致,但是江协提供的Hardware文件是UTF_8的,所以移植前需要进行编码转换,软件在江协资料里有,记得改变编码格式过程需要选择需要改的工程文件,不要把别的改了。测试图像中的照片,需要BMP的图片,同时尺寸不能太大,用PS软件将其缩小尺寸即可,然后在取模软件中的文件键里选中这个BMP图片,如果对其有些像素点不满意可以继续改,剩下操作和上面图像差不多。05,一共保留五位,如果少于五位就在前面补0,如果多于五位,则继续增加位,不会截取多的位。

2023-12-04 15:49:34 125

原创 stm32 Flash闪存

同时有些位前有个n,意思是例如RDP和nRDP,就是在写入RDP的数据时,同时也要在nRDP中写入与之对应的反码,其他的也是一样,写入的同时要在带n的对应的寄存器中写入反码,这样写入才有效。同时,闪存在程序运行时,是只读的,不能轻易更改,而现在需要对闪存进行修改,所以需要权限较高,需要提前解锁,并且还要套一个下面的程序存储器编程过程的流程。除非写入的都是0,这个除外因为不擦除写入会导致写入错误。平时说的,芯片闪存容量是64K,128K是主存储器容量,信息块里的东西虽然也是闪存,但是并不统计在这个容量里面。

2023-10-08 20:47:40 284

原创 WDG看门狗

先从PCLK1(36MHz)进来,先经过一个预分频器进行分频,这个和独立看门狗的预分频器,定时器的预分频值都是一个作用,就是灵活地调节后面计数器的时钟频率,同时预分频系数也是计算计数器溢出时间的重要参数。然后经过递减计数器,每来一个脉冲就自减一次,在图中有T6~T0一共七位,但是实际只有六位是有效位,最高位T6用来当做溢出标志位,由1变为0(或自减到0)表示计数器溢出。就是如果把T6位看做计数器的一部分,那减到0X40之后就溢出了,但如果把T6位当初溢出标志位,那就是低六位数字减到0之后溢出。

2023-10-03 10:13:50 101

原创 PWR电源控制

接着,LPDS位用来设置最后这个电压调节器,是开启,还是进入低功耗模式,LPDS=0,电压调节器开启,LPDS=1,电压调节器进入低功耗。3.3v是正常供电,当电压降低,然后在2.2v~2.9v之间,属于PVD的监测范围,可以通过PVD设置一个警告线,之后再降低到1.9v。右边部分是VDD通过电压调节器,降压到1.8V,提供给后面的1.8BV供电区域,其中包括CPU核心,存储器,内置数字外设。VDDA供电区域,主要负责模拟部分的供电,其中包括AD转换,温度传感器,复位模块,PLL锁相环。

2023-09-08 09:46:18 550

原创 BKP及RTC简介

在下面还有一个闹钟寄存器的RTC_ALR,它也是32位的寄存器,和上面这个CNT是等宽的,作用是设置闹钟,可以在ALR写一个秒数,设定闹钟,当CNT的值和ALR设定的闹钟值时,就是中间的等号,就代表闹钟响了,这是就会产生RTC_Alarm通往右边的中断系统,同时闹钟信号可以退出待机状态。三个信号右边是中断标志位和中断输出控制,F(Flag)结尾是对应的中断标志位,IE(Interrupt Enable)结尾是中断使能,他们通过一个或门汇聚到NVIC的中断控制器。橙色部分:后备区域,BKP处于后备区域。

2023-09-04 22:52:35 976 1

原创 Unix时间戳

为基础的时间计量系统。当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其计时与地球自转的协调一致。C语言的time.h模块提供了时间获取和时间戳转换的相关函数,可以方便地进行秒计数器、日期时间和字符串之间的转换。时间戳是一个计数器数值,他是从1970年1月1日0时0分0秒开始,到现在总共经过的秒数(永不进位的秒数)time_t 是用Typedef将int64更改的数据类型名,是一个表示秒计数器的数据类型。()的1970年1月1日0时0分0秒开始所经过的秒数,不考虑。

2023-08-29 17:28:56 58 1

原创 W25Qxx简介(SPI)

将8M容量的W25Q64分为若干个Block((块)64KB),对于每个Block又分为若干个Sector((扇区)4KB),对于每个Sector又分为若干个Page((页)256Byte)这个意思是:一个写入时序,最多只能写一页(256Byte) 的数据,多出的部分会自动覆盖页首写进去。Flash无法擦除比扇区小的单位,要擦除只能一大片的擦除,擦除的最低单位是扇区、4KB。3:/WP(低电平有效)写保护 接低电平,写保护,不能写。7:/HOLD(低电平有效)数据保持。6:CLK SPI时钟线。

2023-08-23 18:21:32 747

原创 STM32 SPI通信

不同的指令,可以有不同的数据个数,有的指令,只需要一个字节的指令码就可以完成,比如:W25Q64的写使能/失能等,而有的指令,后面就需要根要读写的数据,例如:W25Q64的写数据读数据等等。如果只想发送或接收时,也是用这个交换字节的时序,接收一个字节的同时,随便发送出去一个数据(0x00/0xff),只读取接收的字节,不管发送的字节,这样就是只接收了;在SCK低电平期间,主机和从机都会进行数据采样输入,将两机的最高位采样到各自的最低位,形成一个圈,循环八次,就可以完成主机从机的一个数据的数据交换。

2023-08-23 14:35:29 146

原创 MPU6050简介

想读取数据的话,就读取数据寄存器就行,这是一个16位的有符号数以二进制补码的方式存储,读出高八位和低八位,高位左移八次 或逻辑上 低位数据,最后在存在一个uint16_t的变量里,就能得到数据了。LDO是电源供电的逻辑,MPU6050的芯片VDD供电是2.375~3.46V,属于3.3V供电的设备,不能直接接5V,所以接入了一个3.3V的稳压器,电源(5V)可在3.3V到5V之间给芯片端供电。10轴: 3轴加速度,3轴角加速度,3轴磁场强度,一个气压强度。

2023-08-18 10:53:34 4698 1

原创 USART串口通信 stm32

接收方则在接收数据后验证数据位和校验位,若在传输中收到干扰,有一位由1变为0,奇偶性就会发生变化,就会认为传输错误,要求重发或舍弃数据。是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。解释:空闲状态(1),信号来临、起始位(0),信号0x55低位先行依次输入10101010,无校验位,最后停止位(1)等待下一次接收数据。这个图是不同配置停止位(0.5, 1, 1.5 ,2)四种。

2023-08-12 16:08:26 74 1

原创 通信协议的简介

差分,(是靠两个差分引脚的电压差来传输信号的,具有极大的抗干扰能力,所以差分信号的传输速度和距离都会非常高):差分,(是靠两个差分引脚的电压差来传输信号的,具有极大的抗干扰能力,所以差分信号的传输速度和距离都会非常高)MOSI(Master output slave input)主机输入数据脚。MISO(Master input slave output)主机输入数据脚。这两个是差分数据脚,用两个引脚表示一个差分数据。或者叫D+和D-,是一对差分数据脚。

2023-08-06 09:55:36 72

原创 STM32 DMA简介

作用是,传输计数器减0之后,是否要自动恢复到最初的值,比如我转运5次后,不使用自动重装器,DMA就结束了。调用DMA_Init函数,配置DMA所需的各个参数:外设和存储器站点的起始地址,数据宽度,地址是否自增方向,传输计数器,是否需要自动重装,选择触发源,通道优先级。如果你的变量前用const(常量)修饰,那么这个常量的地址就应该在Flash里,因为const修饰的变量时只读不能写的,而Flash(闪存)也是只读不能写的。就是触发源,必须有触发信号,触发一次转运一次,直到计数器清零,且没有自动重装时停止。

2023-08-05 09:46:06 123 1

原创 STM32 ADC数模转换小笔记

因为AD转换,就是后面的量化,编码需要一小段时间的,如果在这一小段时间里输 入的电压还在不断变化,就没法定位输入电压到底在哪,所以在量化编码前,需要设 置一个采样开关,打开开关,收集外部的电压,然后断开采样开关,再进行后面的 AD转换,这样量化编码期间,电压保持不变。的ADC是12位(10GPIO+2)的,转换结果就是12位,但我们的数据寄存器是16位,所以就有数据对齐。

2023-07-31 17:08:12 1201 1

原创 STM32TIM编码器接口小笔记

增减的判断方法是:这个计数的方向由另一相的状态来决定,当出现某个边沿时,我们判断另一相的高低电平,如果对应另一相的状态出现在上面图片的正转表里,那就是计数自增,反之,另一相状态出现在下面这个表里,就是反转,计数自减。可以发现,毛刺信号也是符合上面的表中规律的,一旦产生了毛刺信号,计数器就会加,减,加,减的来回摆动,最终的计数值还是原来的那个数不变,不受毛刺噪声的影响,这就是编码器抗噪声的原理。同时,AB相上升沿或下降沿,都对应着另一相的此时的电平,并且正转和反转在同样的边沿是,另一相状态相反。

2023-07-29 16:50:58 219

原创 STM32输入捕获

配置时基单元,GPIO,然后输入捕获1的GPIO口输入一个方波信号,经过滤波器和边沿检测,选择TI1FP1为上升沿触发,之后输入选则直连的通道,分频器选择不分频,当TI1FP1出现上升沿后,CNT的当前计数值就会转运到CCR1里,同时触发源选择,选择TI1FP1为触发信号,从模式选择复位操作,转运TI1FP1的上升沿也会通过上面这一路,取触发CNT的清零。同样,通道2有TI2FP1,连通到通道1的后续,通道二也有TI2FP2,联通到通道2的后续,经过数据选择器,进入后续的捕获电路。

2023-07-27 11:26:30 999 1

原创 C语言指针内容及理解

也可以说,数组是直接在内存中连续的放入数据,而指针则是先寻找连续的位置,然后将要写入数据的首地址确认,从而按照需求进行初始化内容。这里可以看到,p++加的并不是1,而是一个数据宽度,而int型是四个字节,是一个整体,所以p++是往下挪了一个int的字节宽度,这种方法可以弥补传统函数返回值只有一个的缺点,利用指针可以做到返回多个值的效果,指针和数组是同一种东西,不同说法,写法而已。使用指针传递大容量的参数,主函数和子函数使用的是同一套数据,避免了参数传递过程中的数据复制,提高了运行效率,减少了内存占用。

2023-07-25 12:12:55 151

原创 STM32引脚定义表以及重映射的使用方法

简单来说就是这个功能有两个GPIO口都能使用,但你的上电默认的端口(能完成这个功能的端口)有其他的用途,就可以将能完成这个功能的引脚重新定义到另一个能实现这个功能的引脚上,可以使新引脚代替它完成功能。作用:如果两个功能同时复用在一个IO口上,而确实需要用这个两个功能,就可以把其中一个复用功能重映射到其他端口上,前提是这个重定义功能的表里有对应的端口。那么这三行代码你就都得需要,首先打开AFIO的时钟,然后将端口重映射成你需要使用的端口,最后将这个调试端口变成正常的GPIO端口(不具备调试功能)即可。

2023-07-25 12:09:13 7613

原创 STM32 舵机和直流电机简介

直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向。周期为20ms,高电平宽度为0.5ms~2.5ms(-90°~90°)舵机是一种根据输入PWM信号占空比来控制输出角度的装置。直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作。注:舵机自带驱动电路.

2023-07-23 14:35:31 85

原创 STM32 定时器的输出比较电路及PWM的见解

取决于ARR的值,因为当你CCR超过了ARR在PWM1上就一直是有效电平(高电平),这样无意义,所以ARR值越大越好,分辨率就越精细,这样占空比就更细腻。输出比较可以通过比较CNT(计数器)与CCR(捕获/比较寄存器)的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。向下计数:CNT>CCR时,REF置无效电平,CNT≤CCR时,REF置有效电平。向下计数:CNT>CCR时,REF置有效电平,CNT≤CCR时,REF置无效电平。占空比 = TON / TS。

2023-07-23 11:43:19 737

原创 STM32 TIM定时器的小笔记

代表会产生中断信号,像这种计数值等于自动重装值产生的中断,叫做“更新中断”,更新中断之后会前往NVIC,,我们再配置好NVIC的定时器通道,那定时器的更新中断就能得到CPU的响应了。在运行的过程中,计数值不断自增,自动重装值是固定的目标,当计数值等于自动重装值时,就是计数时间到了,那他就会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。:可以对预分频后的计数时钟进行计数,每来一个上升沿计数器加一,一共可加至65535,直至自增运行到目标值时,产生中断,就完成了定时的任务。

2023-07-21 17:41:17 79 1

原创 Stm32的EXTI外部中断

中断函数的有固定的中断地址,因为我们程序中的中断函数他的地址是由编译器来分配的,是不固定的,但是中断跳转由于硬件的限制,只能跳到固定的地址执行程序,为了让硬件跳到一个不固定的中断函数中,需要在内存中定义一个地址的列表,当有中断发生后,就跳到这个固定位置,再由编译器加上一条跳转到中断函数的代码,这样中断就可以跳到任意位置了。:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。

2023-07-20 19:09:48 99 1

原创 单片机中的c语言拓展

前面的Stdint关键字是新版本使用的用Typedef更带名字厚度关键字,后面的ST关键字是老版本,但新版本兼容老版本关键字。所以结构体与枚举类型区别是:结构体的变量可以赋任何值,只要是其变量类型,而枚举类型变量只能赋它枚举中的值。枚举类型的变量赋值只能按照枚举定义中的来,否则就会编译器会显示出现其他变量。:新名字在后,被代替名在前,同时只能对变量类型换名字,并且需要加分号;}里的内容才叫变量(数据)类型。结构体也是一种组合数据类型,作用是组合不同的数据类型。宏定义:新名字在前,被替代名在后,无需分号。

2023-07-13 18:39:49 32 1

原创 蜂鸣器的驱动

PNP三极管,若PA0为低电平三极管导通,驱动蜂鸣器若PA0为高电平三极管截止,蜂鸣器不工作,NPN三极管,若PAN为高电平,若PA0为高电平三极管导通,驱动蜂鸣器。若PA0为低电平三极管截止,蜂鸣器不工作,

2023-07-13 18:38:46 194 1

原创 Stm32_GPIO

数据寄存器为1时,上管(P-MOS)导通,下管(N-MOS)断开,输出直接接到VDD,输出高电平。无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。数据寄存器为0时,上管(P-MOS)断开,下管(N-MOS)导通,输出直接接到VSS,输出低电平。数据寄存器为0时,下管(N-MOS)导通, 输出直接接到VSS,输出低电平。

2023-07-13 18:37:29 425 2

空空如也

空空如也

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

TA关注的人

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