![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32F207教程
文章平均质量分 93
strongercjd
资深嵌入式软件开发工程师,分享嵌入式软硬件方面知识。
展开
-
表驱动法在STM32中的应用
所谓表驱动法(Table-Driven Approach)简而言之就是用查表的方法获取数据。此处的“表”通常为数组,但可视为数据库的一种体现。根据字典中的部首检字表查找读音未知的汉字就是典型的表驱动法,即以每个字的字形为依据,计算出一个索引值,并映射到对应的页数。相比一页一页地顺序翻字典查字,部首检字法效率极高。具体到编程方面,在数据不多时可用逻辑判断语句(if…else或switch…case)来获取值;但随着数据的增多,逻辑语句会越来越长,此时表驱动法的优势就开始显现。原创 2022-11-05 23:48:32 · 3343 阅读 · 2 评论 -
关于软件定时器的一些讨论
这里先介绍下软件定时器和硬件定时器的区别:CPU内部自带的定时器模块,通过初始化、配置可以实现定时,定时时间到以后就会执行相应的定时器中断处理函数。硬件定时器一般都带有其它功能,比如PWM输出、输入捕获等等功能。但是缺点是硬件定时器数量少!!:软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,简而言之,当定时器的定时周期到了以后就会执行回调函数。原创 2022-09-26 21:35:28 · 1648 阅读 · 2 评论 -
回调函数在命令解析中的应用
1、回调函数关于回调函数,在之前的文章《回调函数》已经详解讲解过了,这个文章不再讲解,不太懂的同学请看之前的文章《回调函数》。在之前讲解回调函数中就使用串口作为示例,使用回调函数可以方便封装通讯库,芯片/模块厂家的SDK和部分开源库经常这样做,这样可以实现模块间的解耦,模块化编程。这篇文章主要讲解回调函数在命令解析中的应用,一般命令中都会有功能码,用于区分这条命令到底执行的什么动作,命令字后面的数据的意义。在这种场景中,使用回调函数是一个不错的选择。2、经典写法在命令解析中,经典的写法使用s原创 2022-05-08 22:56:34 · 728 阅读 · 0 评论 -
STM32网络ETH
芯片是:STM32F207VCT6本人主要介绍STM32F207VCT6的ETH部分,基本是把ETH部分英文翻译一下,加上自己的理解。欢迎查看本文所在的系列,STM32的LWIP应用,点击跳转1、基础介绍通过DMA控制器进行介质访问控制这部分内容应用于STM32F20X和STM32F21系列,其他的 不适用28.1 以太网简介部分版权 2004 2005 新思科技(美国公司)。所有权利保留,使用需...原创 2018-04-06 12:01:52 · 27842 阅读 · 0 评论 -
单片机中volatile的应用
01、简述一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。简单来说,如果这变量很重要,且你不想它被编译器优化,就用volatile修饰。02、用处关于编译器优化如果你在编译器器开了优化原创 2022-03-01 22:12:32 · 1364 阅读 · 2 评论 -
联合体在单片机编程中的应用
1、联合体之前的文章《枚举和结构体的结合》文中提到,结构体就像是打包封装,把一些有共同特征的变量封装在内部。结构体是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语言中,还有另外一种和结构体非常类似的语法,叫做联合体(Union)(有些地方也叫做共用体)。联合体举例如下union data{ char n; char ch; char f;};union data a, b, c;结构体和联合体的区别在于:结构体的各个成员会占用不同的内存,互相之间没原创 2022-01-27 22:07:46 · 2609 阅读 · 0 评论 -
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 · 1340 阅读 · 0 评论 -
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 · 2100 阅读 · 0 评论 -
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 · 2841 阅读 · 1 评论 -
教你如何在STM32中使用DSP指令
01、DSP简介提到DSP,作为电子专业的学生,大部分第一时间想到的是DSP芯片,DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。实际上,DSP的全称是数字信号处理(DigitalSignalProcessing,简称DSP)。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛DSP技术图解的应用。如下面ARM官方描述的,ARM处理器是支持DSP的。主要是在cortex-R原创 2021-09-06 23:04:57 · 3919 阅读 · 0 评论 -
STM32“隐藏的定时器”-DWT
01、前言在之前的文章在《STM32延时函数的四种方法》使用定时器延时,在《如何测量代码运行时间》中提到使用定时器外设计算代码运行时间。文中提到这种方法的明显缺点就是需要占用一个定时器,一些MCU在特定应用场景下定时器外设资源是十分稀缺的。在留言区有位大佬提到可以使用DWT,我就研究了一番。02、DWT在Cortex-M里面有一个外设叫DWT(DataWatchpoint andTrace),是用于系统调试及跟踪,DWT的中文名字应该是:数据观察点触发。在STM32用户手册的第32章节Deb原创 2021-08-31 00:03:48 · 3100 阅读 · 1 评论 -
如何测量代码运行时间
01、示波器测量一段代码运行时间第一时间想到的当然是示波器了,在测量开始的代码前面拉高某个GPIO,在结束测量的位置拉低这个GPIO,直接使用示波器查看这个GPIO的高电平时间长度即可,就是我们要测量的这段代码的运行时间。那么直接上示例,为了模拟代码运行一段时间,这里我直接采用之前文章《STM32的四种延时方法》直接延时。 while (1) { GPIO_SetBits(GPIOE,GPIO_Pin_4); //熄灭LED灯原创 2021-08-25 21:56:24 · 1798 阅读 · 0 评论 -
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 · 4093 阅读 · 0 评论 -
填坑-关于IIC通讯
01、概述在之前的文章中《STM32IIC详解》中详细讲解了IIC协议,并且使用是NXP的官方手册,demo示例使用IIC读取RTC芯片,运行正常,没有任何问题。并且更新了《IIC踩过的坑》,讲述了在使用IIC读取RTC芯片时遇到的问题,并成功解决。我以为我已经完全学会了IIC,但现实却打了脸,我在使用《STM32IIC详解》文中的IIC驱动,去驱动MPU6050时,总是读取失败。这个驱动明明是验证过的,为什么会有问题。让我一度很是郁闷。02、问题所在不卖关子,直接说问题,是我之前的IIC驱原创 2021-08-04 00:07:39 · 948 阅读 · 0 评论 -
用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 · 2432 阅读 · 3 评论 -
STM32串口开发之环形缓冲区
01、简介在之前的文章《stm32 串口详解》中,我们讲解了串口的基本应用,使用串口中断接收数据,串口中断发送回包(一般可以使用非中断形式发送回包,在数据接收不频繁的应用中。串口接收中断保证串口数据及时响应,使用非中断方式发送回包即可)。后面的文章《STM32使用DMA接收串口数据》和《STM32使用DMA发送串口数据》讲解了如何使用DMA辅助串口收发数据,使用DMA的好处在于不用CPU即可完成串口收发数据,减轻CPU负担,在串口通信频繁且不想频繁中断的应用中非常有用。除了上述两种场景,还有一种原创 2021-07-07 00:14:40 · 6037 阅读 · 13 评论 -
STM32使用DMA发送串口数据
上一篇文章《STM32使用DMA接收串口数据》讲解了如何使用DMA接收数据,使用DMA外设和串口外设,使用的中断是串口空闲中断。本篇文章主要讲解使用DMA发送数据,不会讲解基础的串口和DMA知识,直接上代码,如果有同学对DMA和串口都不熟悉,建议看一下上篇文章《STM32使用DMA接收串口数据》。使用DMA发送数据,首先我们要确认使用的串口有没有DMA。我们使用USART1串口外设,从数据手册中可以查到,USART1的发送和接收都是支持DMA的,使用的是DMA2.接下来就是撸代码的时刻了原创 2021-06-09 22:39:28 · 4184 阅读 · 1 评论 -
STM32使用DMA接收串口数据
目录01、概述02、DMA接收03、中断04、代码01、概述在之前的文章里《STM32串口详解》和《STM32 DMA详解》文章中,详细讲解了STM32的串口和DMA外设,本篇文章将不在细述串口和DMA的知识。在串口讲解的文章中,示例代码采用中断方式接收和发送数据,中断的好处在于可以及时响应,快速接收到数据,但缺点也很明显,那就是频繁中断,接收1000个字节需要中断1000次,频繁中断就意味着会打断其他代码的执行,对一些应用场景是不允许的。这个时候,使用DMA+串口的组合就可以很原创 2021-05-11 22:26:19 · 20592 阅读 · 19 评论 -
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 · 2552 阅读 · 0 评论 -
填坑-关于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 · 3106 阅读 · 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 · 1540 阅读 · 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 · 11549 阅读 · 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 · 2115 阅读 · 2 评论 -
PHY寄存器
在之前的文章,我们讲解了STM32的网络外设部分。文章有《STM32网络电路设计》《STM32网络之MAC控制器》《STM32网络之DMA控制器》《STM32网络之中断》。STM32只有网络外设时不能进行网络通信的,因为STM32只提供了SMI接口,MII和RMII接口。我们还需要与之通信的外部网络芯片,简称PHY芯片。我熟悉的PHY型号有:RTL8201F,RTL8201E,RTL8201G,DP83848,YT8512C等,原计划讲解RTL8201F的,但是内容太多,先把PHY寄..原创 2021-02-26 09:49:05 · 6823 阅读 · 1 评论 -
STM32网络之中断
之前的推文已经将STM32网络的三大件讲完了①PHY接口,《STM32网络电路设计》②MAC控制器,《STM32网络之MAC控制器》③DMA控制器,《STM32网络之DMA控制器》本文将聚焦STM32网络的中断系统,简单聊一下中断系统和用法。01、简介网络中断向量:一个用于正常的网络操作,另一个当它映射到EXIT线路19的时候,用于以太网唤醒事件(带有唤醒帧或魔术数据包检测)第一个网络中断保留为MAC和DMA产生的中断,正如在MAC中断和DMA中断部分。第二个中断保.原创 2021-02-05 15:29:59 · 8034 阅读 · 5 评论 -
STM32网络之MAC控制器
目录01、STM32的MAC概述02、MAC地址过滤03、有效载荷检查04、Checksum校验和之前的文章主要介绍了STM32的ExternalPHY Intereface部分,《STM32网络电路设计》也就是下图区域1。本文将重点讲解STM32的MAC控制器,也就是下图区域2。01、STM32的MAC概述STM32的MAC控制器全称是:MediaAccess Control。STM32F207的MAC控制器支持的模式 符合IEEE 802.3 MAC原创 2021-01-28 09:23:45 · 11718 阅读 · 1 评论 -
STM32网络电路设计
目录01、MII接口方案02、RMII接口方案2.1、外部晶振(2个晶振)2.2、外部晶振(1个晶振)2.3、需要强力PHY在之前的推文中《STM32网络之SMI接口》《STM32网络之MII和RMII接口》,介绍了STM32以太网和外部PHY的所有接口。如果有同学对SMI,MII和RMII接口不熟悉,建议看一下上面提到的两篇文章,不然可能看不太懂下文。区域1:我们称为SMI接口,用于配置外部PHY芯片。区域2:是数据交换接口,也就是上面我们说的MII接口和RMII接原创 2021-01-22 17:44:19 · 10721 阅读 · 0 评论 -
STM32F207时钟系统解析
在前几天的文章《晶振原理解析》中介绍了晶振如何产生时钟的,板子使用的是25M无源晶振,下文将介绍STM32F207的时钟系统如何将25M晶振时钟转换为120M系统主频时钟的。01、时钟系统介绍 ▲时钟系统专业名词缩写时钟系统关键组成部分01 内部高速时钟(HSI)HSI时钟信号可以通过内部16MHZ的RC振荡器产生,可以直接用于系统时钟或者用于PLL输...原创 2020-06-18 09:20:44 · 10658 阅读 · 1 评论 -
以太网头数据和802.3的区别
如果您想要了解相关内容,可以点击跳转本文所在的系列的检索目录,点击跳转网络数据分两种:IEEE 802.2/802.3(RFC 1042)和以太网的封装格式(RFC 894)我们这里只讲以太网的封装格式(RFC 894)以太网头三部分组成 :源MAC Address | 目的 MAC Address | 所使用的协议.特别说明:上面的目的地址和源地址是MAC,不是IP!!!!长度/类型有两个意义...原创 2018-02-28 15:09:45 · 5495 阅读 · 0 评论 -
STM32网络之MII和RMII接口
在上篇文章《STM32网络之SMI接口》中,我们介绍了STM32网络控制器的SMI接口,SMI接口主要是用于和外部PHY芯片通信,配置PHY寄存器用的。真正网络通信的数据流并不是通过SMI接口传输的,是通过MII接口或者RMII通信的。1、MII接口介质独立接口(MII)定义了10 Mbit/s和100 Mbit/s的数据传输速率下MAC子层与PHY之间的互连。管脚定义介绍: MII_TX_CLK:连续时钟信号。该信号提供进行TX数据传输时的参考时序。标称频率为:速率...原创 2021-01-21 09:52:00 · 26666 阅读 · 2 评论 -
STM32网络之SMI接口
目录01、以太网简介02、STM32F207的ETH介绍03、SMI接口3.1、站管理接口:SMI3.2、SMI帧结构3.3、SMI写操作3.4、SMI读操作3.5、SMI时钟选择04、代码01、以太网简介STM32F20X和STM32F21的以太网外设可接受和发送数据按照IEE802.3-2002标准。以太网提供一个完整的、灵活的外设去满足不同应用和要求。它支持与外部相连(PHY)的两个标准的工业接口:默认情况使用在IEEE802.3规范中定义的独立介质接口原创 2021-01-20 09:13:44 · 12833 阅读 · 0 评论 -
谈谈DHCP协议
目录01、DHCP协议简介02、DHCP工作原理03、Wireshark抓包分析04、DHCP缺点01、DHCP协议简介DHCP(DynamicHost ConfigurationProtocol),动态主机配置协议,是一个应用层协议,具体可以参考《TCP/IP四层模型》文章。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。DHCP的几个概念:DHCPClient:DHCP客户端,通过DHCP协原创 2021-01-12 13:04:42 · 2121 阅读 · 0 评论 -
1万字30张图说清TCP协议
目录01、简介02、TCP协议头03、TCP数据包的编号(SEQ)04、三次握手建立连接05、四次挥手断开连接06、TCP可靠性的保证07、滑动窗口技术08、窗口滑动的数据重发09、TCP流控制10、网线“断”了怎么办01、简介TCP(Transmission Control Protocol传输控制协议)是一种基于IP的传输层协议,TCP协议面向连接、正面确认与重传、缓冲机制、流量控制、差错控制、拥塞控制,可保证高可靠性(数据无丢失、数据无失序、数据无错误.原创 2021-01-04 09:12:47 · 7612 阅读 · 0 评论 -
UDP协议详解
目录1、简介2、UDP协议3、端口4、UDP和ARP之间的交互5、UDP适用场景6、UDP洪水1、简介UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。UDP使用具有最小协议机制的简单无连接通信模型。UDP提供数据原创 2020-12-25 14:39:47 · 17499 阅读 · 1 评论 -
链表在STM32中的应用
目录1、为何引入链表2、链表实现3、测试函数、为何引入链表在程序中经常面临一个问题,我们需要保存一定数量的对象,但是对象数目是不确定的,或者说是随时增加或减少的。这时候最简单的方法是创建一个足够大的数组,用来存储这些对象。我最近开发一个项目就遇到类似的问题,下面我把问题简化一下。需求:通过PC下发一些矩形的坐标和宽高信息,每个区域有个ID编号,并在这些矩形内填充一定的数据。通常情况下,最简单易懂的做法是,限制最多5个区域,每个区域存储1K数据。因此设置了这样的一个结构体(类似于面原创 2020-12-11 09:30:49 · 14795 阅读 · 5 评论 -
互联网医生-ICMP协议
目录01、简介02、协议结构03、差错报文3.1、目的站不可到达3.2、数据报超时04、查询报文4.1、ping4.2、Traceroute05、ICMP洪水1、简介在《IP协议详解》入门文章中,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是网际报文控制协议(InternetControl Message ProtocoL,ICMP )。首先说明,ICMP只是保证数据被送达的一个原创 2020-12-09 10:18:11 · 4150 阅读 · 0 评论 -
TCP/IP协议簇中ARP协议
目录1、ARP协议简介2、ARP协议结构3、wireshark抓包分析4、ARP协议分类5、ARP协议应用6、ARP攻击1、ARP协议简介在《IP协议》中我们讲解了IP地址相关内容,IP协议中包含了目的IP地址和源IP地址,但是当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。还记得数据链路层的以太网的协议中,每一个数据包都有一个MAC地址头么?我们知道每一块以太网卡原创 2020-12-03 09:39:54 · 3937 阅读 · 0 评论 -
5000字“肝”了这篇IP协议
目录01、IP地址1.1、简介1.2、IP地址的组成1.3、IP地址分类1.4、特殊IP地址1.5、子网掩码02、IP数据包组成03、IP分片解析04、IP分片攻击之前的文章《以太网数据包结构》可以看出图表示IP协议的数据结构IP协议(Internet Protocol)又称之为网际协议,IP协议处于IP层工作,它是整个TCP/IP协议栈的核心协议之一,上层协议都要依赖IP协议提供的服务,IP协议负责将数据报从源主机发送到目标主机,通过IP地址作为唯一识别码。原创 2020-11-30 09:02:29 · 19594 阅读 · 11 评论 -
以太网数据包架构
以太网数据包架构如果您想要了解相关内容,可以点击跳转本文所在的系列的检索目录,点击跳转 互连网早期的时候,主机间的互连使用的是NCP协议。这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能。为了改善这种缺点,大牛弄出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。TCP/IP不是一个单一协议,而是一个协议族的统称。里面包括了IP协议,IMC...原创 2018-02-28 14:40:04 · 6948 阅读 · 2 评论 -
一文了解串口打印
目录01、硬件打印02、IDE打印2.1、IAR2.2、Keil之前的文章《STM32 串口详解》介绍了串口驱动,串口在嵌入式领域不仅是一个通讯接口,还是一种调试工具,其好用程度不亚于硬件仿真。有些环境不方便连接Jlink进行硬件仿真,或者并不是必现的问题,我们需要定位出现问题的地方,可以选择保存log的方式,但是需要后续读取,且受到Flash大小的限制,如果可以放置一台计算机到现场,使用串口打印无疑是最好的办法,在C语言中printf函数输出各种类型的数据,使用格式控制输出各种长度的.原创 2020-11-10 09:16:34 · 10467 阅读 · 4 评论