自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32CubeMX学习笔记28---FreeRTOS软件定时器

定时器,是指从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户 可以自定义定时器的周期与频率。类似生活中的闹钟,我们可以设置闹钟每天什么时候响, 还能设置响的次数,是响一次还是每天都响。定时器有硬件定时器和软件定时器之分:硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯 片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产 生时钟中断。硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。软件定时器。

2024-03-28 20:41:26 974

原创 STM32CubeMX学习笔记27---FreeRTOS事件

事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。即一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒任务进行事件处理。同样,也可以是多个任务同步多个事件。每一个事件组只需要很少的 RAM 空间来保存事件组的状态。事件组存储在一个 EventBits_t 类型的变量中,该变量在事件组结构体中定义。

2024-03-28 15:23:13 824

原创 STM32CubeMX学习笔记26---FreeRTOS互斥量

1、互斥量用于互锁,可以充当资源保护的令牌,当一个任务希望访问某个资源时,它必须先获取令牌,当任务使用完资源后,必须返还令牌,以便其他任务可以访问该资源。2、互斥量一般用于临界资源保护。

2024-03-20 20:52:02 1074

原创 STM32CubeMX学习笔记25---FreeRTOS信号量

信号量用于同步,任务间或者任务和中断间同步互斥量用户互锁,用于保护同时只能有一个任务访问的资源,为资源上一把锁。二值信号量:同步。如果存在两个线程,为线程1和线程2,如果线程1发送了信号量,线程2接收到了信号量,这两个线程同步工作,如果线程1没有发送信号量,那么线程2也就不工作(前提线程2中有信号量接收等待函数)。相当于一个标志位。计数信号量:资源使用统计互斥量:互斥信号是一个拥有优先级继承的二值信号量递归互斥:互斥中嵌套互斥。

2024-03-20 17:28:53 1219

原创 STM32CubeMX学习笔记24---FreeRTOS(消息队列)

队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中 断之间传递消息,队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之 间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的 长度,创建队列的时候会指定数据项目的大小和队列的长度。由于队列用来传递消息的,所以 也称为消息队列。FreeRTOS 中的信号量的也是依据队列实现的!所以有必要深入的了解 FreeRTOS 的队列。

2024-03-19 23:21:11 979

原创 STM32CubeMX学习笔记23---FreeRTOS(任务的挂起与恢复)

注:在不同任务(任务优先级相同)中同时使用同一个中断会导致任务轮流使用该中断,如LED1和LED2都延时1000ms后同时使用printf,则会出现以下情况,即两个任务轮流使用printf,就导致了中间的遗漏了。程序编译无误后下载到板子上,可以看到LED1计数到10时挂起LED2,当计数到15时恢复LED2。本实验通过freertos创建两个任务来分别控制LED2和LED3的亮灭,需要用到的硬件资源。在任务函数中编写程序,让LED1计数到10时挂起LED2,当计数到15时恢复LED2.

2024-03-19 11:08:38 808

原创 STM32CubeMX学习笔记22---FreeRTOS(任务创建和删除)

FreeRTOS 是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。FreeRTOS 提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。FreeRTOS 是用 C 和汇编来写的,其中绝大部分都是用 C 语言编写的,只有极少数的与处理器密切相关的部分代码才是用汇编写的,FreeRTOS 结构简洁,可读性很强!最主要的是非常适合初次接触嵌入式实时操作系统学生、嵌入式系统开发人员和爱好者学习。

2024-03-18 20:29:58 975

原创 STM32CubeMX学习笔记21--- FLASH应用(Bootloader+APP)

在16章我们学习了FLASH的读写操作,FLASH内的数据是断电可保存的,而且stm32的运行程序也是存放在内部FLASH当中,那么可以编写一段程序A,将另一段程序B写入FLASH中并引导单片机运行程序B。在专业的角度上程序A称为引导/启动程序(Bootloader),简称Boot。程序B叫应用程序,简称APP。

2024-03-18 10:07:41 1331

原创 STM32CubeMX学习笔记20——SD卡FATFS文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(即在存储设备上组织文件的方法)。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统;不带文件系统的SD卡仅能实现简单的读写扇区操作,要真正应用SD卡必须要使用文件系统FATFS文件存储原理(以FAT32为例),下图为FAT32文件系统布局:分区空间大小簇空间大小每个簇包含的扇区数< 8GB4KB88KB1616KB32>= 32GB32KB64。

2024-03-11 21:17:05 1518

原创 STM32CubeMX学习笔记19——SD卡(SDIO接口)

很多单片机系统都需要大容量存储设备,以存储数据(常用的有U盘、FLASH芯片、SD卡等),比较而言SD卡是单片机大容量外部存储的首选,只需要少数几个IO口即可外扩一个容量从几十M到几十G的,且有多种体积尺寸可选(标准SD卡、TF卡等)的外部存储器SD卡(Secure Digital Memory Card)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。

2024-03-11 15:08:38 1081

原创 STM32CubeMX学习笔记18——FSMC(TFT-LCD屏触摸)

目前最常用的触摸屏有两种:电阻式触摸屏和电容式触摸屏。

2024-03-08 14:17:54 1138

原创 STM32CubeMX学习笔记17--- FSMC

TFT-LCD(thin film transistor-liquid crystal display)即薄膜晶体管液晶显示器。液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制,不仅提高了显示屏的反应速度,同时可以精确控制显示色阶,所以TFT液晶的色彩更真,因此TFT-LCD也被叫做真彩液晶显示器 常用的TFT液晶屏接口有8位、9位、16位、18位,这里的位数表示的是彩屏数据线的数量。

2024-03-08 11:12:00 973

原创 STM32CubeMX学习笔记16--- STM32内部FLASH

之前的文章中介绍过STM32F1利用SPI与外部FLASH(W25QXX芯片)通讯的例程,本例程将介绍STM32F1的内部FLASH,通过内部FLASH实现数据读写操作。不同型号的STM32,其FLASH容量也有所不同,最小的只有16K字节,最大的则达到了1024K字节。此处我们使用的是STM32F103ZET6,其FLASH容量为512K字节,属于大容量产品,大容量产品的闪存模块组织图如下图示STM32F1的闪存模块由:主存储器、信息块和闪存存储器接口寄存器3部分组成。

2024-03-07 20:51:15 999

原创 STM32CubeMX学习笔记15---CAN总线

CAN总线网络的结构有闭环和开环两种形式闭环结构的CAN总线网络,总线两端各连接一个1202的电阻。这种CAN总线网络由ISO11898标准定义,是高速、短距离的CAN网络,通信速率为125kbit/s到1Mbit/s。在1Mbit/s通信速率时,总线最长40m。开环结构的CAN总线网络,两根信号线独立,各自串联一个2.2k·的电阻这种CAN总线网路由ISO11519-2标准定义,是低速、远距离的CAN网络,通信速率最高125kbit/s。在40kbit/s速率时,总线最长距离可达1000m。

2024-03-07 17:49:26 1133 1

原创 STM32CubeMX学习笔记14 ---SPI总线

SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI主从模式。

2024-03-06 21:44:20 1543

原创 STM32CubeMX学习笔记13 ---IIC总线

IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。PS: 这里要注意IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPIIIC的物理层。

2024-03-06 10:47:11 1315

原创 STM32CubeMX学习笔记12 ---低功耗模式

系统或电源复位后,微处理器处于运行状态,运行状态下HCLK为CPU提供时钟,内核执行程序代码。当CPU不需继续运行时(例如等待某个外部事件),可以利用多个低功耗模式来节省功耗。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。

2024-03-05 19:07:06 1156

原创 STM32CubeMX学习笔记11 ---RTC实时时钟

STM32的实时时钟RTC是一个独立的定时器,RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能,修改计数器的值可以重新设置系统当前的时间和日期 RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后背区域,即在系统复位或从待机模式唤醒后RTC的设置和事件维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外操作。所以在要设置时间之前,要先取消备份区域写保护。

2024-03-05 11:31:07 1404

原创 STM32CubeMX学习笔记10 ---看门狗

看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统 STM32的独立看门狗(IWDG)由内部专门的40KHz低速时钟驱动,即使主时钟发生故障,它也仍然有效。注意IWDG的时钟是一个内部RC时钟,是一个在30~60KHz之间的一个可变化的时钟,只是我们在估算的时候以40KHz的频率来计算,看门狗对时间的要求不是很精确 独立看门口功能框图如下。

2024-03-04 18:06:16 992

原创 STM32CubeMX学习笔记9 -DAC

Digital-to-Analog Converter的缩写。数模转换器。又称D/A转换器,简称DAC,是指将离散的数字信号转换为连续变量的模拟信号的器件。典型的数字模拟转换器将表示一定比例电压值的数字信号转换为模拟信号。STM32F1中有两个DAC,可以同时使用STM32的DAC模块是12位数字输入,电压输出型的DAC。输出波形和输出固定电压DAC工作原理DAC工作框图"触发方式 " “控制逻辑” "数模转换器"1触发方式第一部分,触发方式,是指DAC转换可以由某外部事件触发。

2024-03-04 15:09:44 1149

原创 STM32CubeMX学习笔记8 -ADC

ADC 是Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。简单地说就是将模拟电压值,转换成对应的肉眼可读数值12位ADC是一种逐次逼近型模拟数字转换器。它有,3个ADC控制器,多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

2024-03-04 10:18:31 1066

原创 STM32CubeMX学习笔记7 - 输入捕获

输入捕获模式可以用来测量脉冲宽度或者测量频率,下图以测量脉宽为例来说明输入捕获的原理假定定时器工作在向上计数模式,图中t1-t2的时间就是我们需要测量的低电平时间。测量方法为:首先设置定时器通道x为下降沿捕获,在t1时刻就会捕获到当前的CNT值,然后立即清零CNT,并设置通道x为上升沿捕获,到t2时刻又会发送捕获事件,得到此时的CNT值(记为CCRx2)。在t1-t2之间可能产生N次定时器溢出,因此需要对定时器溢出做处理,防止低电平太长导致数据不准确。

2024-02-27 10:59:24 977

原创 STM32CubeMX学习笔记6-PWM输出

图中的定时器是工作在向上计数PWM模式,当CNT < CCRx时输出0,IO口输出低电平,当CNT >= CCRx时输出1,IO口输出高电平;当CNT值达到ARR的时候,重新归零,然后重新向上计数,依次循环。改变CCRx的值就可以改变PWM输出的占空比,改变ARR的值就可以改变PWM输出的频率输出模式有两种:PWM1和PWM2模式计数器CNT计算方式说明PWM1递增CNTCCR,通道CH为无效,否则为有效PWM2递增。

2024-02-22 12:36:15 473 1

原创 STM32CubeMX学习笔记5-定时器中断

STM32的定时器功能十分强大,有高级定时器(TIM1和TIM8)、通用定时器(TIM2~TIM5)和基本定时器(TIM6和TIM7);通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。16位向上、向下、向上/向下自动装载计数器。

2024-02-21 20:25:49 1069

原创 STM32CubeMX学习笔记4-外部中断

STM32F1的每个IO口都可以作为外部中断的中断输入,STM32F103的中断控制器支持19个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。EXTI线0~15:对应外部IO口的输入中断EXTI线16:连接到PVD输出EXTI线17:连接到RTC闹钟事件EXTI线18:连接到USB唤醒事件EXTI线19:连接到以太网唤醒事件(互联网型产品)STM32F103供IO口使用的中断线只有16个,但是IO口却远不止16个。下图为GPIO跟中断线的映射关系图。

2024-02-21 17:59:41 946

原创 STM32CubeMX学习笔记3-串口通信2(不定长数据)

在上一章中学习到了串口如何接收定长的数据,但我们串口接收到的数据往往是不定长的,利用定长接收,就会导致数据遗漏和丢失,因此本章将学习如何接收不定长的数据。

2024-02-19 10:48:36 1000 1

原创 STM32CubeMX学习笔记3-串口通信

对于串口通信在这里就不再多做介绍了,有需要的可以自行查询资料,本章主要是完成串口的收发实验一、轮询方式。

2024-01-30 14:37:11 957 1

原创 STM32CubeMX学习笔记2-按键检测

在上一章LED_TEST工程的基础上设置PE0为GPIO输入模式、上拉模式,重命名为KEY1。点击GENERATE CODE,生成工程代码。PE0通过按键接地,按键按下时,LED0亮,LED1灭,按键松开时LED0灭,LED1亮。2、打开工程,可以看到新增了PE0的配置,但上次修改的内容并没有被覆盖。4、在工程的应用文件目录下创建key.c文件,编写按键相关函数。编译无误后下载到开发板,验证是否达到实验效果。3、在工程的头文件目录下创建key.h文件,编写相关声明。5、在main.c函数中编写相关程序。

2023-10-31 20:31:02 144 1

原创 STM32CubeMX学习笔记1-点亮LED灯

STM32CubeMX用于STM32配置和初始化C代码生成本章目标为点亮一颗LED灯,所用芯片为stm32f407zgt6,编译环境为keil5。1. 从主菜单栏中选择文件 > 新建项目,或从主页选择新建项目。2. 选择MCU选择器选项卡,并通过将STM32F4选为“系列”、将STM32F407选为“产品线”和将LQFP100选为“封装”来筛选STM32产品3. 从MCU列表中选择STM32F407VGT6,然后点击“确定”。

2023-10-31 19:45:00 117 1

原创 Cadence Allegro焊盘制作

打开Pad Designerparameters选项卡layers选项卡。

2023-04-12 17:47:17 4185

原创 自动返航策略-电池篇

电池低电量和电池老化以及电池通讯丢失会触发返航。

2023-04-12 17:46:11 99

原创 Cadence Allegro PCB快捷键设置

在安装路径下D:\Cadence\SPB_16.6\share\pcb\text中找到env文件,利用记事本打开,就可以加入自己的快捷键方式了。

2023-04-12 14:25:10 5182

原创 Cadence Allegro PCB 铺铜管理

可以直接利用多边形和矩形以及圆形直接进行铺铜,铺铜之前需要在Options中设置铺铜的参数,top为铺铜的电气层,type为铺铜的类型,Dynamic copper为动态实心铺铜,可以自动避让,static solid为静态实心铺铜,不会自动避让,一般都是选择Dynamic copper动态实心铺铜。name是选择铺铜的网络。铺铜常用的是Shape下的命令进行操作,可以选择多边形,矩形和圆形。

2023-03-29 16:46:03 6836

原创 Cadence Allegro PCB 光绘文件制作

光绘制板文件制作及输出

2023-03-10 17:44:20 3523

原创 ardupilot4.2.2-定制日志

其中的LOG_PACKET_HEADER_INIT(LOG_SPOS_MSG)中的LOG_SPOS_MSG和LOG_PACKET_HEADER_INIT(LOG_SBAT_MSG)中的LOG_SBAT_MSG需要在define.h中进行定义。电池采用6s电池,每个电芯的使用信息都记录在日志当中,记录的日志体为RCOU,在libraries\AP_Logger\LogFile.cpp当中。(2)、将添加的日志体添加到log_structure[]数组当中。(1)、定义日志结构体。

2022-12-27 08:57:34 248

原创 ardupilot4.2.2-定制地面站信息

在地面站上显示数据的文件为GCS_Common.cpp,在此文件中可以发现很多给地面站发送数据的函数,找到void GCS_MAVLINK::send_battery_status(const uint8_t instance) const,在此函数中可以给地面站发送一定的电池数据,应设计要求,需要把电池的电压,电量百分比,电量,温度,循环次数等信息发送到地面站并在地面站上显示出来。将对应的电压,百分比,电流等参数替换成我们已经设定好的数据即可。同样在GCS_Common.cpp文件中,

2022-12-26 11:14:05 407

原创 ardupilot4.2.2-雷达CAN通讯

解析到的8个扇区的距离数据都存储到hal.util->mr72_dist[i]数组当中,这些数据将到Proximity库当中运用。在实例识别当中可以发现所有的类型都是采用了串口通讯,而我们的雷达采用的是CAN通讯,因此我们要在实例识别程序中添加CAN通讯。雷达采用的是MR72,其BMS默认为0x21,最远探测距离是80米,通讯过程中会依次传回8个扇区测到的距离。在此函数当中添加CAN雷达通讯,并将我们的读取到的扇区数据传递给实例当中即可。其中最主要的是read_sensor_data();

2022-12-26 10:37:37 575

原创 Ardupilot仿真中遇到的问题(持续更新)

其次输入help,可以看到MAVProxy上的所有命令,其中accelcalsimple命令即为3D校准,输入此命令还不能解锁建议重新编译。首先是查看一下地图上是否有飞机的图标,如果没有,查看在初始设置下的必要硬件中的飞控的类型是否选择上了你编译的类型。2、仿真时提示需要3D校准,无法解锁。

2022-10-21 09:19:27 1223 1

原创 Ardupilot飞控编译环境搭建

仿真完成后下次使用可以直接执行 ./Tools/autotest/sim_vehicle.py -v ArduCopter 不用重新构建和下载资源。git checkout Copter-4.1.3或git checkout Copter-4.1.3 –force。当仿真通过之后,Mission Planner会自动连接上虚拟的飞控,如果没有则是构建失败,建议重新以上步骤。在编译的时候可能会出现错误,只需要找到这错误的文件,把出现错误的地方修改后重新编译,直到没有错误即可。一般更新:(可能会有遗漏)

2022-10-16 09:05:39 975

Linux学习笔记例程2

Linux学习笔记裸机例程2

2024-04-29

Linux学习笔记4-点亮LED灯(汇编裸机)程序

Linux学习笔记4---点亮LED灯(汇编裸机)程序

2024-04-23

imxdownload修改文件

正点原子官方的imxdownload文件将烧录功能屏蔽后的修改文件,可直接使用

2024-04-16

空空如也

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

TA关注的人

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