自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于PyQT5解析串口数据并通过GUI显示应用开发-Python

基于PyQT5解析串口数据并通过GUI显示应用开发-Python

2022-10-13 10:46:04 2616 2

原创 Windows利用CMake在vscode中编译C/C++文件

CMake是一个跨平台的项目构建工具,它可以用简单的语句来描述所有平台的编译过程并输出各种各样的makefile或者project文件,最后调用编译器按照构建文件规则编译整个项目。本篇主要简单介绍Windows利用CMake在vscode中编译C/C++文件。

2022-10-08 11:09:39 1153

原创 浅谈用匈牙利算法寻找二分图的最大匹配

本篇博客主要浅析一下利用匈利亚算法求解二分图

2022-07-31 16:02:24 611

原创 嵌入式经典通信协议

嵌入式开发常用的几种通信协议USART/UART、IIC、SPI

2022-07-10 15:20:35 3426

原创 FreeRTOS内核小结

关于FreeRTOS内核的一些小结,包括调度方式、信号量、互斥信号量、消息队列、事件组以及任务通知。

2022-07-07 16:35:54 339 1

原创 计网基础七-传输层

七、传输层​ IP层是实现点到点的连接;传输层是提供端到端的连接,即实现不同进程之间的通信。在传输层主要依赖TCP和UDP协议,TCP是一种是一种可靠的、面向连接的通信协议;UDP是一种不可靠、无连接的通信协议。7.1TCP协议7.1.1TCP的报文结构​ TCP报文由固定首部长度为20字节和可变部分0~40字节组成,其每部分的含义如下源端口号:发送数据进程的端口号,范围0~65525。目标端口号:接收数据进程的端口号,范围0~65525.序列号(sequence number ) :TCP

2022-04-01 18:43:17 1008

原创 计网基础六-路由器

六、路由器6.1路由器的功能​ 连接不同的网段,以及不同类型的网络。6.2路由器的原理​ 路由器将数据包从一个网段发送到另一个网段需要依靠路由表完成。其中每个路由器都维护着一张路由表,这是转发数据包的关键;每条路由表记录指明了到达某个网段或者主机,应从路由器的哪个物理端口发送,通过此端口可到达该路径的下一个路由器的地址(或直接相连网络中的目标主机地址)。...

2022-04-01 18:31:36 323

原创 计网基础五-网络层

五、网络层​ 在TCP/IP五层模型中网络层的主要功能是进行逻辑地址寻址,实现到达不同网络的路径选择。在目前的网络中,主要的网络层协议是IP协议,下面将对IP协议做进一步的介绍。5.1IP数据包格式​ IP数据报是可变长度的,它是由两部分组成:首部和数据,如下图所示。首部由两部分组成:固定部分和可变部分(可选项);固定部分长度为20字节,可变部分由一些选项组成,最长40字节。5.2IP头部字段分析版本:表示IP协议的版本,这里抓取的数据包是IPV4的数据包首部长度:因为IP头部可以添加可选项

2022-03-26 20:50:08 3593

原创 计网基础四-物理层与数据链路层

四、物理层与数据链路层4.1物理层​ 在TCP/IP五层模型中的物理层主要功能是实现0/1数据在设备间的双向传输,其中常见的有线介质有双绞线和光纤,无线介质有无线电、微波、激光和红外线。而物理层所使用的设备有网卡、中继器和集线器,这里想简单介绍一下这些设备的功能。网卡:每个网卡都存在一个唯一的标识地址(MAC地址),用于连接计算机终端设备和网络设备。中继器:包含一个输入端口和输出端口,用于放大电信号,延长网络信号传输距离。集线器:多端口的中继器,支持不同传输介质和速率,不过已经被交换机取代。4.

2022-03-26 20:39:41 3350

原创 计网基础三-IP地址介绍

三、IP地址介绍3.1IP地址作用与结构​ 任何互联网设备都拥有一个在网络中唯一的IP地址。IP地址的长度是4个字节,由网络位和主机位组成,其中网络位和主机位的长度是由掩码决定的,而掩码的长度也是4个字节。在IP地址中,与掩码中的1对应的为,称之为网络位;与掩码中的0对应的位,称之为主机位。例如:IP地址为10.10.10.1,掩码为255.0.0.0的网络位是10,主机位是10.10.1.3.2IP地址分类​ IP地址的划分主要根据IP四个字节的一个字节进行划分A类地址:0000 0000 至

2022-03-25 16:46:02 828

原创 计网基础二-数据封装、传输与解封装

二、数据封装、传输与解封装2.1数据的封装与解封装​ 两台计算机上的应用程序进行数据交互时,发送端的计算机需要添加TCP/IP模型每层的头部,最终装换成0/1比特流在物理层进行传输,接收端的计算机需要将接收到的数据去掉模型每一层的头部,最终传递至上层的应用程序,如下如所示。其中在封装和解封装的过程中,数据在每一层在模型的每一层中都相应的称呼,在传输层称为数据段;在网络层称为数据包、数据链路层称为数据帧;在物理层称为比特流。2.2设备与层的对应关系2.3数据的传输​ 两台计算机在进行数据交互时,

2022-03-25 16:43:42 2358

原创 计网基础一-OSI模型与TCP/IP模型

一、OSI模型与TCP/IP模型1.1.OSI模型1.1.1OSI模型分层​ OSI七层模型主要分为以下七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层1.1.2OSI模型每层作用应用层:网络服务于用户的一个接口建立用户间的会话关系表示层:数据的表示、安全、压缩、加密等定义传递信息的语法和语义编码和解码、压缩解压缩、加密解密会话层:建立、管理终止会话建立用户间的会话关系传输层:定义传输数据的协议端口号、以及流控和差错校验用户进程间的通信

2022-03-25 16:36:55 2555

原创 FreeRTOS内部机制学习笔记三——互斥的引入

FreeRTOS内部机制学习笔记三——互斥的引入在多任务系统中,如果有两个或者多个任务需要使用同一个变量,那么会出现一些数据错误。​ 比如任务A和任务B都需要实现对某个全局变量的自加,而变量自加需要三个过程:①从内存读取数据②对数据进行自加一③向内存写入数据。如果任务A在执行完过程①后被切换带任务B,任务B会对变量值进行修改,当时间片再次分配给任务A时,任务A会继续执行上次中断在过程①的任务,当执行完过程③之后,将数据写入内存中,这时上次任务B对全局变量的数据操作将不会起作用,因为被这次操作将上次任务B

2022-03-23 11:22:47 519

原创 FreeRTOS内部机制学习笔记二——任务调度机制

FreeRTOS内部机制学习笔记二——任务调度机制2.1FreeRTOS任务的创建以下是FreeRTOS创建任务线程的程序/* Create the thread(s) *//* definition and creation of LED_RED_Task */osThreadDef(LED_RED_Task, StartLED_RED_Task, osPriorityNormal, 0, 128);LED_RED_TaskHandle = osThreadCreate(osThread(LE

2022-03-23 11:11:20 1174

原创 FreeRTOS内部机制学习笔记一——ARM架构的三种场景的现场保存

FreeRTOS内部机制学习笔记一——ARM架构的三种场景的现场保存1.1任务切换CPU中所有寄存器都需要压入到栈中例如在执行任务A的时候被任务B打断,那么任务A被打断处的CPU寄存器状态都会被压入栈中,等切换到任务A时,存在栈的值会出栈到CPU寄存器,继续执行指令。1.2硬件中断硬件会保存CPU部分寄存器的值;软件上需要保存中断会破坏的寄存器的值。1.3调用子函数例如:void A_Fun(){ ........... B_Fun(&a,&b,....);

2022-03-23 10:52:55 289

原创 ATK-ESP8266获取时间和知心天气的天气信息

ATK-ESP8266获取时间和知心天气的天气信息本次是采用正点原子的ATK-ESP8266模块,在烧写好固件库之后,可以通过以下的一些指令获取时间和天气信息,这里只记录一些步骤,然后其他的一些指令可以去正点原子官网或者乐鑫官网下载。1.测试指令AT2.设置模式为sta(station)模式AT+CWMODE=13.连接网络AT+CWJAP_DEF="name","password"4.设置时间地域AT+CIPSNTPCFG=1,85.获取当前时间AT+CIPSNTPT

2022-02-20 21:07:16 1929 1

原创 STM32多个串口重定义

STM32多串口重定义在平时使用stm32单片机做开发时,有时会开启串口进行调试,如重定义串口,使用printf打印一些调试信息,但是这样只能重定义一个串口,也就是只有一个串口能够使用printf,那么在开发的时候需要使用多个串口的时候该怎么进行重定义呢?这里提供了一种方案。#include "stdarg.h"#include "stdio.h" /**********串口打印函数*******************函数名称:UsartPrintf*参数: *USARTx:选择打印的端口

2022-02-20 15:59:36 1677

原创 C++二级-软件工程基础

1.软件工程的基本概念1.1软件的定义计算机软件是与计算机操作系统有关的程序、规规则及任何与之有关的文档和数据。软件由两部分组成:一是机器可执行的程序及有关数据;二是机器不可执行的,与软件开发、运行、维护、使用和培训有关的文档。1.2软件工程软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程三要素是:方法、工具和过程。1.3软件的特点软件是一种逻辑实体,具有抽象性;软件的生产与硬件不同,它没有明显的制作过程;软件在运行、使用期间不存在磨损、老

2022-02-12 21:13:27 576

原创 C++二级-树与二叉树

计算机二级C++之树与二叉树

2022-02-12 16:21:07 608

原创 C++二级-栈与队列

计算机二级c++的栈与队列

2022-02-12 13:46:03 908

原创 STM32HAL库应用-硬件IIC驱动OLED

用HAL库的硬件IIC驱动OLED

2022-02-08 16:30:34 4623 4

原创 STM32HAL学习笔记八-ADC

STM32HAL学习笔记八-ADC 本实验是ADC,依旧是在串口通信实验(实验二)的基础上修改1.ADC简介ADC(analog to digital converter)即模数转换器,它可以将模拟量信号转换为数字信号,按照转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。STM32F1的ADC是12位逐次逼近型的模数转换器,它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位存储寄存器中。模拟

2022-02-08 15:46:42 328

原创 STM32HAL学习笔记七-RTC时钟

STM32HAL学习笔记七-RTC时钟​ 本次实验工程是在第二次实验串口通信的基础上修改的。参考博客1.RTC简介​ 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使

2022-02-08 15:43:59 3106

原创 STM32HAL学习笔记六-定时器之正交解码

STM32HAL学习笔记六-定时器之正交解码​ 本次实验使用STM32F103ZET6开发板的TIM2对带霍尔编码器的减速电机进行计数,然后将输出计数值通过串口打印,因此本次实验是在实验二的基础上进行修改。参考:https://blog.csdn.net/ASWaterbenben/article/details/115588689?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164308693616781685356407%2522%

2022-02-08 15:35:04 1338

原创 STM32HAL学习笔记五-定时器的PWM输出

STM32HAL学习笔记五-定时器的PWM输出​ 本实验是采用逻辑分析仪观察观察管脚的输出波形1.PWM的配置介绍PWM脉冲的输出频率为定时周期的导数,所以其周期仍采用定时器周期的计算公式TimeOut = ((Prescaler + 1) * (Period + 1) ) / TimeClockFren; 其他配置参数有以及有效电平的设置。2.PWM脉冲的配置2.1选择时钟信号此处选择内部时钟,其所在总线的时钟频率为72MHz2.2配置输出通道此处只打开TIM2的通道一2

2022-02-08 15:29:13 810

原创 STM32HAL学习笔记四-定时器之基本使用

STM32HAL学习笔记四-定时器之基本使用​ 本次的实验内容是配置一个周期为1S的定时器,在中断回调函数中自增一个变量的数值,然后并通过串口输出至上位机的显示。1.定时器的周期计算定时器的计算公式:TimeOut = ((Prescaler + 1) * (Period + 1) ) / TimeClockFren; 由于本次实验采用的MCU是STM32F103ZET6,其TIM2的时钟挂载在APB1 Time Clocks上为72MHz,所以定时周期为TimeOut = ((Presca

2022-02-08 15:24:52 3379

原创 # STM32HAL学习笔记三-EXTI外部中断

STM32HAL学习笔记三-EXTI外部中断1.关于外部中断的介绍2.根据原理图确定管脚​ 本次实验是在上个LED工程的基础上,采用红外对管作为外部中断的输入信号,根据管脚分配图可知红外对管对应的管脚为PA0。3.在cubemx中配置PA0​ 寻找PA0管脚,并将其配置成外部中断0模式:上升沿和下降沿都触发输出模式:无上拉与下拉标签为InTube在NVIC中断管理器中使能EXTI0,并配置其优先级。4.在mdk中寻找中断回调函数通过可以Go to define可以找到这个

2022-02-08 15:21:49 854

原创 STM32HAL学习笔记二-串口通信

STM32HAL学习笔记二-串口通信本次串口通信实验是在上个LED工程的基础上进行改写。本次实验仅编写与上位机串口助手通信的简单通信,以方便对后期实验的验证与调试。1.在CubeMX中配置串口1波特率115200字长8位无奇偶检验停止位12.设置中断优先管理级3.编写程序3.1找到HAL库函数3.2开启串口1的接收中断HAL_UART_Receive_IT(&huart1,RxBuf1,sizeof(RxBuf1));//开启串口接收中断HAL_UART_Transmi

2022-02-08 15:11:06 786

原创 STM32HAL学习笔记一-点亮第一个LED

STM32HAL学习笔记一-点亮第一个LED1.新建工程与基本配置1.1选择芯片​ 这里试验箱的芯片是采用STM32F103ZET61.2配置调试模式​ 在System Core -> SYS -> Debug选择Serial Wire模式。PS:标准的JTAG调试需要占用5个IO口,有的时候可能会造成IO口不够用,而用SWD模式调试只需要占用2个IO口(JTCK和JTMS),同时SWD调试模式支持STLINK调试器。1.3选择时钟信号​ 在System Core -&

2022-02-08 14:58:57 204

原创 FREERTOS学习笔记十-内存管理

FREERTOS学习笔记十-内存管理1.FreeRTOS内存管理方式1.1 heap_1.c中的内存分配​ 动态内存分配需要一个内存堆,FreeRTOS中的内存堆为ucHeap[],大小为configTOTAL_HEAP_SIZE。不管是哪种内存分配方法,它们的内存堆都为ucHeap[],而且大小都是configTOTAL_HEAP_SIZE。特点:①适用于那些一旦创建好任务、信号量和队列就再也不会删除的应用,实际上大多数的FreeRTOS应用都是这样的。②具有可确定性(执行所花费的时间大多

2022-02-03 15:09:10 907

原创 FREERTOS学习笔记九-邮件

FREERTOS学习笔记九-邮件1.实验内容​ 邮件和消息队列类似,不过邮箱可以发送更多类型的数据,如结构体。​ 本次实验是在实验三的基础上进行修改,其中任务三负责检测按键并发送结构体,任务四负责接收邮件。2.CubeMX的配置​ FREERTOS已经有相关的封装函数,无需增加配置。3.程序编写3.1定义测试结构体/* Private typedef -----------------------------------------------------------*//* USE

2022-02-03 15:07:11 1503

原创 FREERTOS学习笔记八-任务通知

FREERTOS学习笔记八-任务通知1.实验内容​ 本次实验内容是在实验三工程的基础进行修改,其中任务三和任务四分别监听KEY0和KEY1按键的按下,当按键按下后会给任务二发送标志位。2.CubeMX的配置2.1打开任务通知3.程序编写3.1定义标志位/* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD */#define BIT_1 (

2022-02-03 15:05:39 1032

原创 FREERTOS学习笔记七-定时器

FREERTOS学习笔记七-定时器1.实验内容​ 本次实验内容是在实验三的基础上增加定时器功能,并在定时器的回调函数中进行串口打印。2.CubeMX的配置2.1使能定时器并配置定时器中断优先级、队列消息长度和深度。2.2添加定时器​ 添加定时器,可以设置定时器的名称和回调函数的名称,同时可以选择单次定时还是周期定时。3.程序编写3.1启动定时器 /* USER CODE BEGIN RTOS_TIMERS */ /* start timers, add new ones,

2022-02-03 15:02:49 2175

原创 FREERTOS学习笔记六-事件组

FREERTOS学习笔记六-事件组1.实验内容1.1介绍 事件“标志”是布尔值(1或0),用于指示事件是否发生。事件“组”是一组事件标志。 事件标志只能为1或0,从而允许将事件标志的状态存储在单个位中,而将事件组中所有事件标志的状态存储在单个变量中;事件组中每个事件标志的状态由EventBits_t类型的变量中的一位表示。因此,事件标志也称为事件“位”。如果将EventBits_t变量中的某个位设置为1,则发生了该位表示的事件。如果将EventBits_t变量中的某个位设置为0,则该位表示的事件

2022-02-03 14:59:51 710

原创 FREERTOS学习笔记五-互斥锁

学习笔记五-互斥锁1.实验内容​ 互斥锁即优先级继承,其作用就是在H、L两个任务同时需要唯一资源时,且任务L需要先得到了使用权,这时需要提高L的优先级,让L尽快干完活,好让H用,避免因任务M打断任务L而导致任务L占用资源的时间过长。​ 而递归互斥锁是可以在一个任务线程内使用。​ 本次实验是在实验三的基础上进行修改,其中将按键任务的优先级更改为三者中的H;将任务三的优先级更改为三者中的M;将任务四的优先级更改为三者中的L。2.CubeMX的配置2.1添加互斥锁2.2使能递归互斥锁2.

2022-02-03 14:55:36 2457

原创 FREERTOS学习笔记四-信号量

FREERTOS学习笔记四-信号量1.实验内容​ FREERTOS中信号量有二值信号量和计数信号量,其中二值信号量的剩余信号量只有0和1;而计数信号量的信号剩余量可以自行设定。本次实验是在实验三的基础上进行修改,将任务三和任务四分别更改为通过按键实现释放信号(信号量会加一),和获得信号(信号量会减一)。2.CubeMX配置2.1添加二进制信号量2.2在任务传入参数中添加信号名3.函数编写3.1任务3程序/* USER CODE END Header_StartTask03 */vo

2022-02-03 14:50:04 1906

原创 FREERTOS学习笔记三-消息队列

FREERTOS学习笔记三-消息队列1.实验内容​ 实验二内容:创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。​ 实验三是在实验二的基础上进行修改,增加一个消息队列和两个任务进程;任务二按键检测,当按键被按下时,会发生消息;任务三和任务四负责接收消息。2.CubeMX的配置1.1添加两个优先级相同的任务1.2添加消息队列消息大小为16,消息格式为无符号的16位1.3添加调试串口2.程序编

2022-02-03 14:43:53 1804

原创 FREERTOS学习笔记二-任务的挂起与取消挂起

FREERTOS学习笔记二-任务的挂起与取消挂起1.实验内容​ 创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。2.CubeMX的配置2.1选择调试模式2.2使能高速时钟2.3设置基准时钟源2.4配置LED2.5配置按键KEYO与KEY12.6创建两个动态任务2.7设置时钟3.程序编写3.1LED任务void StartLED_RED_Task(void const * ar

2022-02-03 14:31:25 2295

原创 FREERTOS学习笔记一-跑马灯

FREERTOS学习笔记一-跑马灯​ 本次实验是根据开发板原理图控制两灯的闪烁。1.CubeMX配置1.1配置基准时钟源1.2使能FREERTOS1.3更改默认任务1.4点击ADD创建新的任务2.程序编写2.1编写任务内容3.程序运行正常4.更换更精准延时4.1函数更改void StartLED_RED_Task(void const * argument){ /* USER CODE BEGIN StartLED_RED_Task */ /* Infin

2022-02-03 14:25:33 1640

原创 STM32f1学习笔记五NVIC中断优先级管理

5.1初识NVIC中断CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。STM32F103系列上面,又只有60个可屏蔽中断,在107系列才有68个。《SMT32中文参考手册》中关于STM32F103系列的60个可屏蔽中断5.2NVIC中断优先级分组STM32对中断进行组0~4分组以管理中断优先级。分组配置是在寄存器SCB->AIRCR中

2021-12-11 19:16:12 952

空空如也

空空如也

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

TA关注的人

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