- 博客(59)
- 收藏
- 关注
原创 Windows利用CMake在vscode中编译C/C++文件
CMake是一个跨平台的项目构建工具,它可以用简单的语句来描述所有平台的编译过程并输出各种各样的makefile或者project文件,最后调用编译器按照构建文件规则编译整个项目。本篇主要简单介绍Windows利用CMake在vscode中编译C/C++文件。
2022-10-08 11:09:39
1382
原创 计网基础七-传输层
七、传输层 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
1082
原创 计网基础六-路由器
六、路由器6.1路由器的功能 连接不同的网段,以及不同类型的网络。6.2路由器的原理 路由器将数据包从一个网段发送到另一个网段需要依靠路由表完成。其中每个路由器都维护着一张路由表,这是转发数据包的关键;每条路由表记录指明了到达某个网段或者主机,应从路由器的哪个物理端口发送,通过此端口可到达该路径的下一个路由器的地址(或直接相连网络中的目标主机地址)。...
2022-04-01 18:31:36
390
原创 计网基础五-网络层
五、网络层 在TCP/IP五层模型中网络层的主要功能是进行逻辑地址寻址,实现到达不同网络的路径选择。在目前的网络中,主要的网络层协议是IP协议,下面将对IP协议做进一步的介绍。5.1IP数据包格式 IP数据报是可变长度的,它是由两部分组成:首部和数据,如下图所示。首部由两部分组成:固定部分和可变部分(可选项);固定部分长度为20字节,可变部分由一些选项组成,最长40字节。5.2IP头部字段分析版本:表示IP协议的版本,这里抓取的数据包是IPV4的数据包首部长度:因为IP头部可以添加可选项
2022-03-26 20:50:08
3861
原创 计网基础四-物理层与数据链路层
四、物理层与数据链路层4.1物理层 在TCP/IP五层模型中的物理层主要功能是实现0/1数据在设备间的双向传输,其中常见的有线介质有双绞线和光纤,无线介质有无线电、微波、激光和红外线。而物理层所使用的设备有网卡、中继器和集线器,这里想简单介绍一下这些设备的功能。网卡:每个网卡都存在一个唯一的标识地址(MAC地址),用于连接计算机终端设备和网络设备。中继器:包含一个输入端口和输出端口,用于放大电信号,延长网络信号传输距离。集线器:多端口的中继器,支持不同传输介质和速率,不过已经被交换机取代。4.
2022-03-26 20:39:41
3498
原创 计网基础三-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
1228
原创 计网基础二-数据封装、传输与解封装
二、数据封装、传输与解封装2.1数据的封装与解封装 两台计算机上的应用程序进行数据交互时,发送端的计算机需要添加TCP/IP模型每层的头部,最终装换成0/1比特流在物理层进行传输,接收端的计算机需要将接收到的数据去掉模型每一层的头部,最终传递至上层的应用程序,如下如所示。其中在封装和解封装的过程中,数据在每一层在模型的每一层中都相应的称呼,在传输层称为数据段;在网络层称为数据包、数据链路层称为数据帧;在物理层称为比特流。2.2设备与层的对应关系2.3数据的传输 两台计算机在进行数据交互时,
2022-03-25 16:43:42
2563
原创 计网基础一-OSI模型与TCP/IP模型
一、OSI模型与TCP/IP模型1.1.OSI模型1.1.1OSI模型分层 OSI七层模型主要分为以下七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层1.1.2OSI模型每层作用应用层:网络服务于用户的一个接口建立用户间的会话关系表示层:数据的表示、安全、压缩、加密等定义传递信息的语法和语义编码和解码、压缩解压缩、加密解密会话层:建立、管理终止会话建立用户间的会话关系传输层:定义传输数据的协议端口号、以及流控和差错校验用户进程间的通信
2022-03-25 16:36:55
2634
原创 FreeRTOS内部机制学习笔记三——互斥的引入
FreeRTOS内部机制学习笔记三——互斥的引入在多任务系统中,如果有两个或者多个任务需要使用同一个变量,那么会出现一些数据错误。 比如任务A和任务B都需要实现对某个全局变量的自加,而变量自加需要三个过程:①从内存读取数据②对数据进行自加一③向内存写入数据。如果任务A在执行完过程①后被切换带任务B,任务B会对变量值进行修改,当时间片再次分配给任务A时,任务A会继续执行上次中断在过程①的任务,当执行完过程③之后,将数据写入内存中,这时上次任务B对全局变量的数据操作将不会起作用,因为被这次操作将上次任务B
2022-03-23 11:22:47
662
原创 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
1497
原创 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
383
原创 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
2117
1
原创 STM32多个串口重定义
STM32多串口重定义在平时使用stm32单片机做开发时,有时会开启串口进行调试,如重定义串口,使用printf打印一些调试信息,但是这样只能重定义一个串口,也就是只有一个串口能够使用printf,那么在开发的时候需要使用多个串口的时候该怎么进行重定义呢?这里提供了一种方案。#include "stdarg.h"#include "stdio.h" /**********串口打印函数*******************函数名称:UsartPrintf*参数: *USARTx:选择打印的端口
2022-02-20 15:59:36
1890
原创 C++二级-软件工程基础
1.软件工程的基本概念1.1软件的定义计算机软件是与计算机操作系统有关的程序、规规则及任何与之有关的文档和数据。软件由两部分组成:一是机器可执行的程序及有关数据;二是机器不可执行的,与软件开发、运行、维护、使用和培训有关的文档。1.2软件工程软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程三要素是:方法、工具和过程。1.3软件的特点软件是一种逻辑实体,具有抽象性;软件的生产与硬件不同,它没有明显的制作过程;软件在运行、使用期间不存在磨损、老
2022-02-12 21:13:27
630
原创 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
374
原创 STM32HAL学习笔记七-RTC时钟
STM32HAL学习笔记七-RTC时钟 本次实验工程是在第二次实验串口通信的基础上修改的。参考博客1.RTC简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使
2022-02-08 15:43:59
3738
原创 STM32HAL学习笔记六-定时器之正交解码
STM32HAL学习笔记六-定时器之正交解码 本次实验使用STM32F103ZET6开发板的TIM2对带霍尔编码器的减速电机进行计数,然后将输出计数值通过串口打印,因此本次实验是在实验二的基础上进行修改。参考:https://blog.youkuaiyun.com/ASWaterbenben/article/details/115588689?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164308693616781685356407%2522%
2022-02-08 15:35:04
1526
原创 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
960
原创 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
3719
原创 # 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
949
原创 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
871
原创 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
270
原创 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
1136
原创 FREERTOS学习笔记九-邮件
FREERTOS学习笔记九-邮件1.实验内容 邮件和消息队列类似,不过邮箱可以发送更多类型的数据,如结构体。 本次实验是在实验三的基础上进行修改,其中任务三负责检测按键并发送结构体,任务四负责接收邮件。2.CubeMX的配置 FREERTOS已经有相关的封装函数,无需增加配置。3.程序编写3.1定义测试结构体/* Private typedef -----------------------------------------------------------*//* USE
2022-02-03 15:07:11
1976
原创 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
1096
原创 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
2261
原创 FREERTOS学习笔记六-事件组
FREERTOS学习笔记六-事件组1.实验内容1.1介绍 事件“标志”是布尔值(1或0),用于指示事件是否发生。事件“组”是一组事件标志。 事件标志只能为1或0,从而允许将事件标志的状态存储在单个位中,而将事件组中所有事件标志的状态存储在单个变量中;事件组中每个事件标志的状态由EventBits_t类型的变量中的一位表示。因此,事件标志也称为事件“位”。如果将EventBits_t变量中的某个位设置为1,则发生了该位表示的事件。如果将EventBits_t变量中的某个位设置为0,则该位表示的事件
2022-02-03 14:59:51
804
原创 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
2653
原创 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
1972
原创 FREERTOS学习笔记三-消息队列
FREERTOS学习笔记三-消息队列1.实验内容 实验二内容:创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。 实验三是在实验二的基础上进行修改,增加一个消息队列和两个任务进程;任务二按键检测,当按键被按下时,会发生消息;任务三和任务四负责接收消息。2.CubeMX的配置1.1添加两个优先级相同的任务1.2添加消息队列消息大小为16,消息格式为无符号的16位1.3添加调试串口2.程序编
2022-02-03 14:43:53
1929
原创 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
2374
原创 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
1771
原创 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
1174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人