自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

人生一路,点滴记录

思考,记录着人生的所思所想……

  • 博客(139)
  • 资源 (18)
  • 收藏
  • 关注

原创 预编译#error的使用

说到预编译,大家立刻就能想到#define、#if、#ifdef和#ifndef等熟悉的预编译命令。其实#include,我们通常放在源文件用来包含头文件,它也是预编译命令。当然这不是这篇文章的重点。这篇文章主要讲解下#error预编译命令,对于什么是预编译,预编译的作用等基础知识点不再讲解,不懂的同学请自行百度。在MCU的开发中,我们经常需要用到Flash存储一些参数,且通常情况下有很多参数需要存储。

2022-12-17 10:57:18 1066 2

原创 关于共享资源保护的思考

先聊聊分享这篇文章的原因,在使用STM32时,我发现对于GPIO输出操作,可以使用GPIOx_ODR寄存器,也可以使用GPIOx_BSRR寄存器。对应的标准外设库API接口有对于我来说,我一直在用GPIO_SetBits和GPIO_ResetBits接口,一直对GPIO_ToggleBits无感。最近注意的这个问题,经过查资料和FAE确认,这样做的,目的是防止同一个port的其他GPIO被篡改。看下GPIO_ToggleBits的具体实现。

2022-12-17 10:40:53 326

原创 表驱动法在STM32中的应用

所谓表驱动法(Table-Driven Approach)简而言之就是用查表的方法获取数据。此处的“表”通常为数组,但可视为数据库的一种体现。根据字典中的部首检字表查找读音未知的汉字就是典型的表驱动法,即以每个字的字形为依据,计算出一个索引值,并映射到对应的页数。相比一页一页地顺序翻字典查字,部首检字法效率极高。具体到编程方面,在数据不多时可用逻辑判断语句(if…else或switch…case)来获取值;但随着数据的增多,逻辑语句会越来越长,此时表驱动法的优势就开始显现。

2022-11-05 23:48:32 3289 2

原创 关于软件定时器的一些讨论

这里先介绍下软件定时器和硬件定时器的区别:CPU内部自带的定时器模块,通过初始化、配置可以实现定时,定时时间到以后就会执行相应的定时器中断处理函数。硬件定时器一般都带有其它功能,比如PWM输出、输入捕获等等功能。但是缺点是硬件定时器数量少!!:软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,简而言之,当定时器的定时周期到了以后就会执行回调函数。

2022-09-26 21:35:28 1579 2

原创 聊聊数据溢出的事

聊聊数据溢出的事情

2022-07-09 11:38:07 540

原创 C语言为什么不检查数组下标

1、引言最近在查一个bug,查到最后发现是数组越界导致的。数组只有30个字节,代码却向这个数组填充了35个数据,这个bug还是偶现的,查到它确实废了一番功夫。我就突然想到:C语言为什么不检查数组下标呢???先来个demo验证下#include<stdio.h>#include<stdlib.h>int main(){ int data[5]={0}; for(int i=0;i<8;++i) { printf("%d "

2022-05-25 22:08:30 382 1

原创 回调函数在命令解析中的应用

1、回调函数关于回调函数,在之前的文章《回调函数》已经详解讲解过了,这个文章不再讲解,不太懂的同学请看之前的文章《回调函数》。在之前讲解回调函数中就使用串口作为示例,使用回调函数可以方便封装通讯库,芯片/模块厂家的SDK和部分开源库经常这样做,这样可以实现模块间的解耦,模块化编程。这篇文章主要讲解回调函数在命令解析中的应用,一般命令中都会有功能码,用于区分这条命令到底执行的什么动作,命令字后面的数据的意义。在这种场景中,使用回调函数是一个不错的选择。2、经典写法在命令解析中,经典的写法使用s

2022-05-08 22:56:34 715

原创 回调函数

1、函数指针学习回调函数,其实就是函数指针的应用,关于函数指针在之前的文章《指针与函数》中有详细的讲解,这里不再展开详解,重新贴一下之前文章中函数指针的示例代码#include <stdio.h>void MyFun1(int x);void MyFun2(int x);void MyFun3(int x);typedef void (*FunType)(int); /* ②. 定义一个函数指针类型FunType,与①函数类型一致 */void CallMyFun(FunTy

2022-04-16 16:55:55 1108 1

原创 指针与函数

1、指针函数指针函数,从名字上看它本质上是一个函数。指针函数:返回值类型是指针的函数。函数声明如下:int *plusfunction(int a,int b);当然也可以写成如下格式:int* plusfunction(int a,int b);让指针标志 * 与int紧贴在一起,而与函数名f间隔开,这样看起来就明了些了,plusfunction是函数名,返回值类型是一个int类型的指针。指针函数就是一个普通的函数,普通到仅仅是因为它的函数返回值是指针而已。#includ

2022-04-10 08:50:47 1404 2

原创 指针与数组

1、定义指针:C语言中某种数据类型的数据存储的内存地址,例如:指向各种整型的指针或者指向某个结构体的指针。数组:若干个相同C语言数据类型的元素在连续内存中储存的一种形态。数组在编译时就已经被确定下来,而指针直到运行时才能被真正的确定到底指向何方。所以数组的这些身份(内存)一旦确定下来就不能轻易的改变了,它们(内存)会伴随数组一生;而指针则有很多的选择,在其一生他可以选择不同的生活方式,比如一个字符指针可以指向单个字符同时也可代表多个字符等。指针和数组在C语言中使用频率是很高的,在极个别情

2022-03-29 22:02:36 3771 1

原创 VS Code调试C代码

1、前言首先说明的是vscode是代码编辑器,并不是编译器,它本身并不能编译C语言。在这里我们使用的是MinGW-w64作为C语言的编译器。MinGW-w64的前身是MinGW的全称是:Minimalist GNU on Windows。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概

2022-03-13 17:38:24 4159

原创 单片机中volatile的应用

01、简述一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。简单来说,如果这变量很重要,且你不想它被编译器优化,就用volatile修饰。02、用处关于编译器优化如果你在编译器器开了优化

2022-03-01 22:12:32 1318 2

原创 C语言中static关键字详解

C语言中staic关键字很简单,简单到你的任何一个项目中可以不写一个staic关键字也是没有问题的。写这篇章主要是一下自己的staic的理解和应用,当然在章开头依旧要照本宣科简述一下static关键字。1、简述static关键字在嵌入式C语言当中很简单,它有三个作用:作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。void test1(void){ unsigned char a; static unsigned char b;…...

2022-02-16 21:52:12 3231

原创 深入聊一下const关键字

const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程序上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解别人的程序有所帮助。1、const简介下面简单描述一下const,基本都是教科书的知识。const修饰的变量,其值存放在只读数据段中,其值不能被改变。称为只读变量。关于什么是数据段,什么是代码段,请看我之前的文章《C语言的内存分配》。int const a;const int a;上面两条语句都可以将a声明为一个整数,

2022-02-08 21:27:18 1307

原创 联合体在单片机编程中的应用

1、联合体之前的文章《枚举和结构体的结合》文中提到,结构体就像是打包封装,把一些有共同特征的变量封装在内部。结构体是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语言中,还有另外一种和结构体非常类似的语法,叫做联合体(Union)(有些地方也叫做共用体)。联合体举例如下union data{ char n; char ch; char f;};union data a, b, c;结构体和联合体的区别在于:结构体的各个成员会占用不同的内存,互相之间没

2022-01-27 22:07:46 2498

原创 关于结构体中指针的一些探讨

1、起因在上篇文章《STM32编程中枚举和结构体的结合》中,有读者对下列代码有疑问typedef struct{ char *name; //姓名 int num; //学号 int age; //年龄 float score; //成绩}stuff_s;stuff_s xiaoming;void xiaoming_inf_init(){ xiaoming.name = "xiaoming"; xiaoming.num = 1; xiaoming.age

2022-01-25 22:59:46 586

原创 STM32编程中枚举和结构体的结合

01、结构体定义基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。结构体的定义:第一种:只有结构体定义struct stuff{ char *name; //姓名 int num; //学号 int age; //年龄 float score; //成绩};第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义,如下代码也就是定义结构体时

2022-01-08 14:37:55 651

原创 C语言在STM32中的内存分配

01、前言不说废话,先上示例代码uint8_t num_byte[4];uint32_t num_word;const uint32_t num_word_const = 0x1234;uint32_t *point_heap;int main(void){ uint8_t num_byte_stack; static uint8_t num_byte_static; point_heap = (uint32_t *)malloc(4); *point_heap =

2021-12-22 23:17:58 1291

原创 C语言的内存分配

01、ANSI C在ANSI C中数据类型包括:整形,浮点型,指针和聚合型(如数组和结构等)整形:字符,短整型,整型和长整型,他们都分别有有符号(singed)和无符号(unsingned)取值范围:没有带signed或者unsigned,默认signed长整型至少应该和整型一样长,而整型至少应该和短整型一样长在32位环境中,各种数据类型的长度一般如下:02、ARM C具体我们以IAR为编译器,版本7.2注意:在32位ARM中,字是32位,半字是16位

2021-12-17 23:46:04 2049

转载 在大公司天天调参数,感觉快废了

01、基础知识 一个嵌入式工程师,很多都是从51单片机或者STM32单片机开始,对于单片机的开发环境,开发流程,基础外设都了解,做过一些实际的案例,比如点流水灯之类的。那么对于基本的中断的概念,寄存器的概念,看门狗,AD等基本原理能大概的讲出来。掌握硬件设计方法,能设计原理图PCB,至少两层板。能画出三极管及MOS管作为开关管的实际应用电路,对电源芯片的设计有基本的了解。能利用网络进行信息检索,能在理解别人图纸的基础上进行copy。这是一个本科嵌入式毕业生应该具备的水平。项目做的多...

2021-12-08 22:17:13 379

原创 深入探讨一下如何打断点

对于程序员来说,debug的时间往往比写程序的时间还要长。尤其对我这种专写bug为主的程序员来说,正确使用断点调试是提高效率的有效方法。今天我们聊聊如何高效率的断点调试,由于工作中IAR为主力IDE,本篇文章主要以IAR为主。01、普通断点打开IDE,如下图,我们想在程序运行到第104行时停止运行,我们在下图中104行号前单击,这时该语句上将出现红色的断点标记。如下图:或者点击要设置断点的语句,按鼠标右键,选择Toggle Breakpoint (Code)。02、条件断点除了上述最

2021-12-07 21:40:54 3885

原创 C语言访问存储器的方法

在单片机中我们经常需要访问某个指定的寄存器或者到指定的RAM地址,在本文为简单描述,下文所说的存储器可指:寄存器,RAM等。01、宏定义:定义一个宏,将地址值转化为C指针,然后取这个指针指向的内容,这样就可以访问存储了,代码如下:#define SDA_DIR_REG *(__IO uint32_t *)SDA_MOD_OFFSET分析:(__IOuint32_t *)SDA_MOD_OFFSE 是强制类型转换强制转换为指针*(__IOuint32_t *)SDA_MOD_..

2021-10-22 21:03:17 1953

原创 Jlink之J-Scope虚拟示波器

01、虚拟示波器说到虚拟示波器,大家应该都不陌生。在学校时开发智能车,调节PID时虚拟示波器是必须的工具。虚拟示波器软件有很多,之前我也分享过一篇文章《一个超赞的开源串口虚拟示波器项目》,基于QT的开源软件,大家有兴趣可以看一下。一般情况下虚拟示波器软件都是通过串口接收数据的,所以要求MCU通过串口把数据打包成软件支持的协议发给虚拟示波器软件。02、J-Scope是什么J-Scope是J-link的功能之一,J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。简单地说

2021-09-23 21:57:19 2737 1

原创 教你如何在STM32中使用DSP指令

01、DSP简介提到DSP,作为电子专业的学生,大部分第一时间想到的是DSP芯片,DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。实际上,DSP的全称是数字信号处理(DigitalSignalProcessing,简称DSP)。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛DSP技术图解的应用。如下面ARM官方描述的,ARM处理器是支持DSP的。主要是在cortex-R

2021-09-06 23:04:57 3712

原创 STM32“隐藏的定时器”-DWT

01、前言在之前的文章在《STM32延时函数的四种方法》使用定时器延时,在《如何测量代码运行时间》中提到使用定时器外设计算代码运行时间。文中提到这种方法的明显缺点就是需要占用一个定时器,一些MCU在特定应用场景下定时器外设资源是十分稀缺的。在留言区有位大佬提到可以使用DWT,我就研究了一番。02、DWT在Cortex-M里面有一个外设叫DWT(DataWatchpoint andTrace),是用于系统调试及跟踪,DWT的中文名字应该是:数据观察点触发。在STM32用户手册的第32章节Deb

2021-08-31 00:03:48 2953 1

原创 如何测量代码运行时间

01、示波器测量一段代码运行时间第一时间想到的当然是示波器了,在测量开始的代码前面拉高某个GPIO,在结束测量的位置拉低这个GPIO,直接使用示波器查看这个GPIO的高电平时间长度即可,就是我们要测量的这段代码的运行时间。那么直接上示例,为了模拟代码运行一段时间,这里我直接采用之前文章《STM32的四种延时方法》直接延时。 while (1) { GPIO_SetBits(GPIOE,GPIO_Pin_4); //熄灭LED灯

2021-08-25 21:56:24 1740

原创 数字地和模拟地都是地,为什么要分开?

数字地、模拟地互相会影响不是因为一个叫数字,一个叫模拟,而是他们用了同一部电梯:地,而这部电梯所用的井道就是我们在PCB上布得地线。模拟回路的电流走这条线,数字回路的电流也走这条线,本来无可厚非,线布着就是用来导通电流的,可问题出在这根线上有电阻!而且最根本的问题是走这条线的电流要去2个不同的回路。假设一下:有2股电流,数流,模流同时从地出发。有2个器件:数字件和模拟件。若2个回路不分开,数流模流走到数字件的接地端前的时候,损耗的电压为V=(数流+模流)X走线电阻,相当于数字器件的接地端相对于地

2021-08-17 21:41:23 2025

原创 J-Link cmd的使用

01、WHY为什么要使用到J-LinkCommander呢???大部分情况下,我们使用J-link都是在IDE中debug使用的,出现问题,直接debug复现然后解决。这是最常见的开发方式。但是有些情况我们不能使用IDE直接debug,比如发布版本(JTAG或SWD接口可以正常使用),大批量生产时发现几片异常的板子,重新debug问题就消失了。这个时候使用IDE直接debug已经不能解决问题,我们需要使用J-LinkCommander读取关键寄存器的值来协助我们定位排查问题。02、Jlink

2021-08-17 21:38:09 3993

原创 填坑-关于IIC通讯

01、概述在之前的文章中《STM32IIC详解》中详细讲解了IIC协议,并且使用是NXP的官方手册,demo示例使用IIC读取RTC芯片,运行正常,没有任何问题。并且更新了《IIC踩过的坑》,讲述了在使用IIC读取RTC芯片时遇到的问题,并成功解决。我以为我已经完全学会了IIC,但现实却打了脸,我在使用《STM32IIC详解》文中的IIC驱动,去驱动MPU6050时,总是读取失败。这个驱动明明是验证过的,为什么会有问题。让我一度很是郁闷。02、问题所在不卖关子,直接说问题,是我之前的IIC驱

2021-08-04 00:07:39 865

原创 用Excel教会你PID算法

01、引入PID电机控制这样是没有反馈的,也就是说我们完全相信输入的数字,且是理想化的模型,比如输入占空比为50%的25Kz的PWM,车轮速度为1m/s,实际产品中会受到各种这样的影响,比如地面阻力,风阻等等,同样输入占空比为50%的25Kz的PWM,车轮的速度并不是1m/s。这时候我们就引入测量单元,也就是反馈系统。这个时候,最常见的反馈就是:直接使用反馈值。简单的例子,属于数值X和输出数值y的数学公式是:y=2x,这是这最见的关系。假设我们输入7,测量结果是5,那么我们就直接将输

2021-07-21 22:31:42 2357 3

原创 STM32串口开发之环形缓冲区

01、简介在之前的文章《stm32 串口详解》中,我们讲解了串口的基本应用,使用串口中断接收数据,串口中断发送回包(一般可以使用非中断形式发送回包,在数据接收不频繁的应用中。串口接收中断保证串口数据及时响应,使用非中断方式发送回包即可)。后面的文章《STM32使用DMA接收串口数据》和《STM32使用DMA发送串口数据》讲解了如何使用DMA辅助串口收发数据,使用DMA的好处在于不用CPU即可完成串口收发数据,减轻CPU负担,在串口通信频繁且不想频繁中断的应用中非常有用。除了上述两种场景,还有一种

2021-07-07 00:14:40 5795 13

原创 LDO的原理及应用

01、LDO定义LDO即lowdropoutregulator,是一种低压差线性稳压器。这是相对于传统的线性稳压器来说的。传统的线性稳压器,如78XX系列的芯片都要求输入电压要比输出电压至少高出2V~3V,否则就不能正常工作。但是在一些情况下,这样的条件显然是太苛刻了,如5V转3.3V,输入与输出之间的压差只有1.7v,显然这是不满足传统线性稳压器的工作条件的。针对这种情况,芯片制造商们才研发出了LDO类的电压转换芯片。02、LDO的特点低压降(LDO)线性稳压器的成本低,噪音低,静态电流小,这

2021-06-27 21:53:45 31885 6

原创 STM32使用DMA发送串口数据

上一篇文章《STM32使用DMA接收串口数据》讲解了如何使用DMA接收数据,使用DMA外设和串口外设,使用的中断是串口空闲中断。本篇文章主要讲解使用DMA发送数据,不会讲解基础的串口和DMA知识,直接上代码,如果有同学对DMA和串口都不熟悉,建议看一下上篇文章《STM32使用DMA接收串口数据》。使用DMA发送数据,首先我们要确认使用的串口有没有DMA。我们使用USART1串口外设,从数据手册中可以查到,USART1的发送和接收都是支持DMA的,使用的是DMA2.接下来就是撸代码的时刻了

2021-06-09 22:39:28 4104 1

原创 STM32使用DMA接收串口数据

目录01、概述02、DMA接收03、中断04、代码01、概述在之前的文章里《STM32串口详解》和《STM32 DMA详解》文章中,详细讲解了STM32的串口和DMA外设,本篇文章将不在细述串口和DMA的知识。在串口讲解的文章中,示例代码采用中断方式接收和发送数据,中断的好处在于可以及时响应,快速接收到数据,但缺点也很明显,那就是频繁中断,接收1000个字节需要中断1000次,频繁中断就意味着会打断其他代码的执行,对一些应用场景是不允许的。这个时候,使用DMA+串口的组合就可以很

2021-05-11 22:26:19 19764 19

原创 STM32属于哈佛结构还是冯诺依曼结构?

目录01、冯·诺依曼体系02、哈佛体系03、arm和哈佛、冯·诺依曼的关系04、实际芯片制造现代的CPU基本上归为冯诺伊曼结构(也成普林斯顿结构)和哈佛结构。冯洛伊曼结构就是我们所说的X86架构,而哈佛结构就是ARM架构。一个广泛用于桌面端(台式/笔记本/服务器/工作站等),一个雄踞移动领域,我们的手持设备(平板\手机用的大多就是他了)。01、冯·诺依曼体系冯·诺依曼体系结构图如下冯·诺依曼体系的特点:A、数据与指令都存储在同一存储区中,取指令与取数据利用同一数据

2021-04-22 22:07:55 6353 2

原创 STM32网络之DMA控制器

STM32网络控制器框图如下:前面的文章我们已经讲解了:①External PHY Intereface:《STM32网络电路设计》②MAC控制器:《STM32MAC控制器》下面我们讲解第③部分,STM32网络的DMA控制器。01、DMA控制器操作DMA具有自主的发送和接收引擎,还有一个CSR(控制和状态寄存器)空间。发送引擎将数据从系统存储器传送到 TxFIFO,而接收引擎将数据从Rx FIFO传送到系统存储器。控制器(也就是DMA)利用描述符有效的将数据从源地址移动到目的

2021-04-06 14:45:03 2483

原创 填坑-关于SysTick定时器

目录01、坑的由来02、填坑03、修改代码验证04、总结本文主要来填坑,更正之前文章的错误。也进一步加深了我对SysTick定时器的理解,希望对你有帮助。01、坑的由来在之前的推文中《STM32延时的四种方法》介绍了使用查询定时器精确延时,使用的就是systick定时器,具体代码如下void delay_us(uint32_t nus){ uint32_t temp; SysTick->LOAD = RCC_Clocks.HCLK_Frequency/100

2021-03-31 12:17:50 2626 2

原创 LWIP初体验-修改ST官方demo

目录01、硬件说明02、修改步骤03、效果显示04、使用中断方式05、Keil工程的修改06、移植TCP客户机代码01、硬件说明为什么要写这篇文章?STM32的网络应用还是个复杂的外设的,拿到一个板子需要验证网络部分是否正常,硬件设计是否有问题,对于很熟悉LWIP的同学可以直接移植LWIP,验证硬件。但快速且方便的办法是修改ST的官方demo来验证硬件。(ST提供了CubeMX工具,如果使用该工具的话,也很方便,不在本文的考虑范围内)。本文的硬件测试环境 主控:ST

2021-03-18 14:28:47 1476 1

原创 RTL8201网络芯片讲解

目录01、基础问题1.1、芯片数据接口1.2、芯片地址1.3、时钟源的选择02、寄存器01、基础问题1.1、芯片数据接口RTL8201E(L)是一种单芯片/单端口快速以太网物理接收器,支持MII接口,RMII接口,SNI接口。MII接口和RMII接口切换在8.1.1章节有讲到,如下图:选择MII接口,把COL/SNI脚拉低。RTL8201E的框图如下和MCU连接的系统框图如下:①RJ45也就是网口,就是我们常见的网口,如下图:②ma

2021-03-10 17:11:31 11125 1

原创 MCU为什么内部不集成晶振

目录01、MCU为什么不集成晶振02、外围电路问题2.1、滤波电容2.2、变压器2.3、电感2.4、TVS管2.5、磁珠上一篇文章《PHY寄存器》提到STM32为什么不兼容PHY,有小伙伴好奇,市面上的MCU为什么没有集成晶振,今天我们就来聊一聊这个话题。01、MCU为什么不集成晶振本文将用STM32代替MCU。原因1:早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了。这个问题主要还是实用性和成本决定的。实用性:如果封装进入STM32内

2021-03-03 19:11:24 2087 2

DUI0499B_system_design_reference.pdf

ARM的《系统和接口设计参考》文档

2021-01-31

DHCP.pcapng

用于分析DHCP过程的Wireshark文件。

2021-01-11

TCP.pcapng

TCP协议抓包分析,包含三次握手,四次挥手等。

2021-01-04

TCP,IP和UDP协议的RFC标准文档,从官网下载。

TCP,IP和UDP协议的RFC标准文档,从官网下载

2021-01-03

udp.pcapng

用于分析UDP协议的wireshark抓包文件。

2020-12-25

Traceroute.pcapng

Traceroute抓包文件,用于分析ICMP的Traceroute的wireshark抓包文件。woreshark抓包文件。woreshark抓包文件。

2020-12-08

ping.pcapng

ping命令的wireshark抓包,用于分析ping使用ICMP协议。ping命令的wireshark抓包,用于分析ping使用ICMP协议。

2020-12-08

arp协议.pcapng

查询IP为192.168.0.103的MAC地址的ARP协议抓包文件,可以使用wireshark打开,用于分析TCP/IP协议簇中的ARP协议。

2020-12-02

IP分片.pcapng

用于分析IP分片的wireshark抓包文件,IP分片解析文章地址:https://blog.csdn.net/Firefly_cjd/article/details/110366657

2020-11-30

外部cs文件操作窗体控件

外部cs文件操作窗体控件,使用自定义的类直接操作主控件

2017-11-28

min usb,micro usb AD封装

三种min usb,micro usb AD封装,可以使用AD直接打开编辑

2017-11-24

用户控件demo

使用VS C#无论是WinForm开发,还是WebForm 开发都会遇到一个问题:在Form布局时,会重复使用相同的一组控件

2017-09-10

unicode全部编码表

unicode全部编码表

2017-08-22

Visual Studio Installer

vs2015社区版没有打包程序的功能,安装此插件就可以实现

2017-08-21

修复Jlink工具

修复Jlink工具

2017-08-18

用C#编写的CRC16校验

用C#编写的CRC16校验,使用visual studio 2015编写

2016-08-12

stm32用IIC驱动PCF8563时钟芯片

stm32用IIC驱动PCF8563时钟芯片的程序,包括所有的宏定义,和PCF8563-CN芯片的中文手册

2016-07-15

空空如也

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

TA关注的人

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