知晓编程

其他

STM32使用DMA接收串口数据

//清USART_IT_IDLE标志证据如下这一点很坑人,注意。04代码DMA+串口接收的工程代码是开源的,Keil和IAR的工程都有33-USART-DMA-Receive
2021年5月6日
其他

移植LWIP到STM32F207

在上篇文章《LWIP初体验-修改ST官方demo》中我们已经在自己的开发板上实现了简单的TCPsever和TCPclient功能。验证完了硬件,接下来的工作就是优化代码,添加应用程序。有些同学想学习一下,如果下载LWIP的代码,然后移植到自己的代码中,下面我们聊聊移植问题。我们需要的基础工程是已经实现了10ms定时,led灯1s闪烁,实现了串口打印工程。还需要一份LWIP1.4.1的源码,需要STM32F2系列的以太网驱动。移植前和移植后源码资料,还有LWIP的源码下载链接链接:https://pan.baidu.com/s/1u-QZye_HB1PAiBOykFlNqQ提取码:4hiw
2021年3月25日
其他

LWIP初体验-修改ST官方demo

01硬件说明为什么要写这篇文章?STM32的网络应用还是个复杂的外设的,拿到一个板子需要验证网络部分是否正常,硬件设计是否有问题,对于很熟悉LWIP的同学可以直接移植LWIP,验证硬件。但快速且方便的办法是修改ST的官方demo来验证硬件。(ST提供了CubeMX工具,如果使用该工具的话,也很方便,不在本文的考虑范围内)。本文的硬件测试环境主控:STM32F207VCT6,100管脚的封装网络PHY芯片:RTL8201EL,48管脚封装,34和35管脚下拉,也就是芯片地址:0使用的网络接口:MII接口涉及到的硬件原理图和PCB开源,开源地址https://github.com/strongercjd/STM32F207VCT6本文涉及到的修改前代码和修改后代码下载地址链接:https://pan.baidu.com/s/1dr9MzX_pga2SYWOft4lniw提取码:7uqj
2021年3月18日
其他

RTL8201网络芯片讲解

01基础问题1.1、芯片数据接口RTL8201E(L)是一种单芯片/单端口快速以太网物理接收器,支持MII接口,RMII接口,SNI接口。MII接口和RMII接口切换在8.1.1章节有讲到,如下图:选择MII接口,把COL/SNI脚拉低。RTL8201E的框图如下和MCU连接的系统框图如下:①RJ45也就是网口,就是我们常见的网口,如下图:②magnetics,直译磁性元件,这里的通常叫法为:网络变压器。网络变压器又名网络隔离变压器、以太网变压器、网络滤波器,主要有信号传输、阻抗匹配、波形修复、信号杂波抑制和高电压隔离等作用。如下图③PHY芯片,中文可称之为端口物理层,PHY连接一个数据链路层的设备(MAC)到一个物理媒介,如光纤、铜缆线或网线等。也就是本文重点讲解的内容,如下图④MAC部分,主要是STM32的ETH外设部分,这方面之前的文章已经讲解过了涉及到的文章有《STM32网络之SMI接口》《STM32网络之MII和RMII接口》《STM32网络电路设计》《STM32网络之MAC控制器》《STM32网络之DMA控制器》《STM32网络之中断》。1.2、芯片地址MCU如何选择PHY芯片的地址,参看芯片的SMI接口RTL8201的PHY地址经过两个管脚配置的在这里我们看出,这两个管脚和LED灯的管脚是复用的为了减少RTL8201EL的引脚数,LED引脚和PHY地址引脚复用。额外的捆绑考虑和LED使用必须被考虑,为了避免争用。具体的来说,当LED的输出被直接用来驱动LED时,每一个输出驱动的活跃状态依赖于相应的PHAD输入在上电和复位采样的逻辑电平。例如,如图6(左侧)显示,如果一个给定的输入电阻PHYAD拉高,那么相应的输出将被配置为低电平驱动。在右边,我们可以看到,如果一个给定的输入电阻拉低PHYAD然后相应的输出将被配置为一个高电平驱动。PHY地址配置脚不应该直接和VCC或GND相连,但是一个电阻(比如5.1KΩ)拉高或拉低。如果没有LED指示灯,LED的路径组件(LED+
2021年3月10日
其他

MCU为什么内部不集成晶振

上一篇文章《PHY寄存器》提到STM32为什么不兼容PHY,有小伙伴好奇,市面上的MCU为什么没有集成晶振,今天我们就来聊一聊这个话题。01MCU为什么不集成晶振本文将用STM32代替MCU。原因1:早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了。这个问题主要还是实用性和成本决定的。实用性:如果封装进入STM32内部,不利于不同客户更换不同频率晶振。成本:把晶振封装进STM32内部成本提高,售价提升,不利于产品竞争力。原因2:封装进STM32内部,必将使芯片面积增大。芯片面积大小也是厂商考虑的一个因素,在各方面考虑的情况下,芯片要尽可能的小一些。原因3:STM32内部是有“晶振”的,与其说是晶振,不如说是RC振荡电路。在《STM32F207时钟系统解析》文中,提到高速内部时钟和低速内部时钟。详细信息请看《STM32F207时钟系统解析》文章。在时钟树中的位置。STM32F207内部已经提供了32.768KHz的低速内部时钟,一般用于RTC。还有一个16MHz的高速内部时钟,这个时钟精度较差,但是一些应用场景,使用高速内部时钟驱动芯片是足够的。所以基于实用性和成本考虑,STM32并不会将晶振集成进入芯片内部。02外围电路问题看了上文,大家对于芯片外围电路不集成进入芯片内部的原因,大概了解了。除了上文提到的原因,还有一些其他原因导致外围电路不能集成进入IC内部。下面简单举几个常见的例子说明一下。2.1、滤波电容滤波电容的大小从几百nF~2000uF不等。由于一般电源为中高压(不是1.xV),所以如果在芯片内部实现,大致有MV_MOSCAP/MOM/
2021年3月3日
其他

PHY寄存器

在之前的文章,我们讲解了STM32的网络外设部分。文章有《STM32网络电路设计》《STM32网络之MAC控制器》《STM32网络之DMA控制器》《STM32网络之中断》。STM32只有网络外设时不能进行网络通信的,因为STM32只提供了SMI接口,MII和RMII接口。我们还需要与之通信的外部网络芯片,简称PHY芯片。我熟悉的PHY型号有:RTL8201F,RTL8201E,RTL8201G,DP83848,YT8512C等,原计划讲解RTL8201F的,但是内容太多,先把PHY寄存器拿出来讲一下。为什么STM32不集成PHY呢?PHY(PortPhysical
2021年2月26日
其他

STM32网络之中断

长按二维码识别关注技术共享|资料共享|沟通交流之前的推文已经将STM32网络的三大件讲完了①PHY接口,《STM32网络电路设计》②MAC控制器,《STM32网络之MAC控制器》③DMA控制器,《STM32网络之DMA控制器》本文将聚焦STM32网络的中断系统,简单聊一下中断系统和用法。01简介网络中断向量:一个用于正常的网络操作,另一个当它映射到EXIT线路19的时候,用于以太网唤醒事件(带有唤醒帧或魔术数据包检测)第一个网络中断保留为MAC和DMA产生的中断,正如在MAC中断和DMA中断部分。第二个中断保留为唤醒事件时PMT产生的中断。唤醒事件对EXIT线路19的映射是造成STM32F20X和STM32F21X退出低功耗模式,并且产生中断。当映射到EXIT线路19的以太网唤醒事件发生和,MACPMT中断使能并且有一个上升沿的EXIT线路19中断也被使能,他们都能唤醒中断。可使用看门狗定时器(请参见ETH_DMARSWTR
2021年2月5日
其他

STM32网络之DMA控制器

/**--------------------------------------------------------------------------**//**
2021年2月3日
其他

关于JTAG,你知道的和不知道的都在这里

Boundary-ScanArchitecture,这就是大名鼎鼎的JTAG了。JTAG的三大功能你知道吗,响当当的:1.下载器,即下载软件到FLASH里。2.
2021年2月1日
其他

STM32网络之MAC控制器

长按二维码识别关注技术共享|资料共享|沟通交流之前的文章主要介绍了STM32的ExternalPHY
2021年1月27日
其他

电子工程师,你真的了解Type-C吗?

长按二维码识别关注技术共享|资料共享|沟通交流本文主要是站在电子工程师的角度看待Type-C,而不是消费电子的角度。在讲述Type-C接口之前,我们先聊聊USB的发展。01USB概述从1996年1月USB1.0正式发布至今(2017年9月USB3.2发布),USB已经走过了21个年头。在这21年的时间了,USB标准化组织(USB
2021年1月25日
其他

STM32网络电路设计

长按二维码识别关注技术共享|资料共享|沟通交流在之前的推文中《STM32网络之SMI接口》《STM32网络之MII和RMII接口》,介绍了STM32以太网和外部PHY的所有接口。在之前的推文中《STM32网络之SMI接口》《STM32网络之MII和RMII接口》,介绍了STM32以太网和外部PHY的所有接口。如果有同学对SMI,MII和RMII接口不熟悉,建议看一下上面提到的两篇文章,不然可能看不太懂下文。区域1:我们称为SMI接口,用于配置外部PHY芯片。区域2:是数据交换接口,也就是上面我们说的MII接口和RMII接口。利用这些接口可以有多种不同的网络电路设计方案,这里我来总结下。01MII接口方案MII接口在文章《STM32网络之MII和RMII》已经详细介绍过了,从中得知,需要一个25MHz的时钟。对于MII接口,最常用的方案是,STM32外接25MHz的晶振。内部的PLL配置HCLK,提供给内核和外设等。外部PHY连接提供了25MHz的MCO脚。此方案适合STM32F107/2x7/4x7。02RMII接口方案RMII接口在文章《STM32网络之MII和RMII》已经详细介绍过了,从中得知,需要一个50MHz的时钟。2.1、外部晶振(2个晶振)这个方案需要外接连里两个晶振。外接25MHz晶振,内部的PLL配置HCLK,提供给内核和外设等。外接50MHz晶振,输出50MHz时钟,提供给MAC控制器和外部PHY。此方案适合STM32F107/2x7/4x7。2.2、外部晶振(1个晶振)这种方案外部只需要接1个50M晶振。一个晶振同时给STM32和外部PHY提供时钟,这样可以省成本。重点:STM32F2X7不能使用这种方案,只适用于STM32F107/4x7。大家注意上图的区别这是因为,将HSE的OSC部分滤除掉,通过HSE的bypass,已经将50MHz的时钟通过OSCIN输入到PLL,再通过PLL产生提供内核和外设的时钟。2.3、需要强力PHY这个方案也使用一个25MHz的晶振,但是需要一个功能强大的PHY芯片,这颗PHY可以将输入的25MHz的时钟内部倍频到50MHz时钟,然后输出给STM32的MAC控制模块。外接25MHz晶振,内部的PLL配置HCLK,提供给内核和外设等。STM32通过MCO引脚提供25MHz时钟给外部PHY。外部PHY内部生成50MHz的时钟提供给STM32的MAC控制模块。此方案适合STM32F107/2x7/4x7。个人不建议这种方案,不利于后期更换物料。END☛STM32
2021年1月22日
其他

STM32网络之MII和RMII接口

长按二维码识别关注技术共享|资料共享|沟通交流在上篇文章《STM32网络之SMI接口》中,我们介绍了STM32网络控制器的SMI接口,SMI接口主要是用于和外部PHY芯片通信,配置PHY寄存器用的。真正网络通信的数据流并不是通过SMI接口传输的,是通过MII接口或者RMII通信的。1MII接口介质独立接口(MII)
2021年1月21日
自由知乎 自由微博
其他

STM32网络之SMI接口

长按二维码识别关注技术共享|资料共享|沟通交流01以太网简介STM32F20X和STM32F21的以太网外设可接受和发送数据按照IEE802.3-2002标准。以太网提供一个完整的、灵活的外设去满足不同应用和要求。它支持与外部相连(PHY)的两个标准的工业接口:默认情况使用在IEEE802.3规范中定义的独立介质接口(MII)和精简介质独立接口(RMII)。它可以被用于大量的需求,例如开关(交换机)、网络接口卡等等。以太网满足下列标准:●
2021年1月20日
其他

我是如何使用wireshark软件的

长按二维码识别关注技术共享|资料共享|沟通交流01简介这篇文章介绍一个好用的抓包工具Wireshark,
2021年1月14日
其他

我是如何查找官方资料的

关注、星标公众号,不错过精彩内容01关于TCP协议头中保留位读者疑问:部分读者对上一篇《TCP协议详解》中的保留字节和标志位有疑问。关于这一点,详细说下,大部分同学看过1999年译的《TCP/IP详解卷1:协议》,这本书中TCP部分保留位为6位,如下:TCP/IP详解卷-第一版-此书里面明确讲解了,TCP协议头有6个保留字节。这本书讲的没有错,因为在TCP标准文档(RFC793)中也是这样描述的。Request
2021年1月5日
其他

1万字30张图说清TCP协议

关注、星标公众号,不错过精彩内容本篇文章较长,大家先看下目录1、简介2、TCP协议头3、TCP 数据包的编号(SEQ)4、三次握手建立连接5、四次挥手断开连接6、TCP可靠性的保证7、滑动窗口技术9、窗口滑动的数据重发9、TCP 流控制10、网线“断”了怎么办01简介TCP(Transmission
2021年1月4日
其他

UDP协议详解

Length占用2个字节,标识UDP头的长度,包括首部长度和数据长度。可以有65535字节那么长。但是一般网络在传送的时候,一次一般传送不了那么长的协议(涉及到MTU的问题),就只好对数据分片。
2020年12月23日
其他

链表在STM32中的应用

//链表的头指针由于在定义的时候,只定义了一个头指针,那么它也只是个指向了Area_List_Inf_Typedef也就是链表结构体的指针,同样没有内存空间,在没有创建新增链表之前,它是一个野指针。
2020年12月11日
其他

互联网医生-ICMP协议

查询报文用于一台主机向另一台主机查询特定的信息,通常查询报文都是成对出现的,即源主机发起一个查询报文,在目的主机收到该报文后,会按照查询报文约定的格式为源主机返回一个应答报文。
2020年12月9日
其他

TCP/IP协议簇中ARP协议

还记得数据链路层的以太网的协议中,每一个数据包都有一个MAC地址头么?我们知道每一块以太网卡都有一个MAC地址,这个地址是唯一的,那么IP包是如何知道这个MAC地址的?这就是ARP协议的工作。
2020年12月3日
其他

5000字“肝”了这篇IP协议

标志(Flag):1bit保留,2bit意思是“不能分片”。只有当DF=0时才允许分片。3bit意思是MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
2020年11月30日
其他

802.3?以太网?看完你就懂了

802.3标准定义的帧和以太网的帧都有最小长度要求。802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。
2020年11月24日
其他

以太网数据包架构

实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。
2020年11月17日
其他

一文了解串口打印

在STM32的应用中,我们常常对printf进行重定向的方式来把打印信息printf到我们的串口助手。在MDK环境中,我们常常使用MicroLIB+fputc的方式实现串口打印功能,即:串口重映射
2020年11月10日
其他

STM32 串口详解

在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0
2020年11月6日
其他

SD卡?TF卡?傻傻分不清楚?

一般10脚是检测卡是否插入,11脚是卡写保护的检测,再有其它引脚就是用于固定卡座的脚了,其实简单应用这两个脚都可以不要管的,这就是为什么SD卡原理图中的引脚版本不同引脚数目也不同了。
2020年10月20日
其他

STM32 触摸按键

本文将使用STM32F207定时器12的捕获通道1实现触摸按键功能,将运用到输入捕获功能,具体请看之前的文章《STM32输入捕获功能》,代码和电路设计参看正点原子的开发板。
2020年9月4日
其他

STM32 输入捕获功能

输入阶段采样对应的对输入TIx,去产生滤波后的信号TIxF。然后极性选择边沿检测器产生一个信号(TIxFPx),这个信号可以被用于服务模式控制器的触发输入或在作为捕获命令。在捕获寄存器前被预分频。
2020年9月2日
其他

STM32 PWM输出

STM32没有专门的PWM引脚,所以使用IO口的复用模式。首先确认PWM功能的输出管脚,使用定时器9。从下面的框图中得知,timer9只有两个输出通道,所以timer9只能输出两路PWM。
2020年8月21日
其他

STM32 影子寄存器

从上面两图看出,向上计数,还没有到达0x36,就把自动重载预装载寄存器修改为0x36,就不会在计数到0x36时产生动作,会在这个时将自动重载预装载寄存器值赋给自动重载影子寄存器。
2020年8月19日
其他

STM32基础定时器详解

自动重载寄存器是预装载的。从自动重载寄存器写入或读取会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件(UEV)时传送到影子寄存器,这取决于TIMx_CR1
2020年8月17日
其他

STM32 看门狗详解

如果窗口看门狗启动(WWDG_CR寄存器的WDGA位置1),7位向下计数器从0X40向0x3F滚动(T6已经清零),会导致一个复位。如果软件重载计数器,当计数器值大于窗口所存储的值时,就会产生复位。
2020年8月7日
其他

STM32 DMA详解

传输,我们可以按照寄存器的地址偏移直接设置地址:0x40011004,也可以直接使用ST提供库的表示方法:&USART1->DR。DMA_Memory0BaseAddr
2020年8月4日
其他

STM32 IIC详解

Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司(后被NXP收购)在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS)
2020年7月27日
其他

STM32 SPI详解

Trailingedge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;
2020年7月23日
其他

STM32 位段详解

;这样就把P1口的第三个脚(bit2)置0置1。而STM32的位段、位带别名区最重要的就为了实现这样的功能。
2020年7月13日
其他

STM32 GPIO详解

只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)
2020年7月9日
其他

STM32驱动LCD实战

FSMC_WaitSignalActive_BeforeWaitState;FSMC_NORSRAMInitStructure.FSMC_WriteOperation
2020年7月6日
其他

STM32的FSMC外设简介

FSMC_WriteBurst:对于处于成组传输模式的闪存存储器,这一位允许/禁止通过NWAIT信号插入等待状态。读操作的同步成组传输协议使能位是FSMC_BCRx寄存器的BURSTEN位。
2020年7月3日
其他

STM32驱动LCD原理

8080中:有RD(read),WR(Write)脚,RD,WR可以同时为高,不能同时为低!!RD为低时表示要从LCD中读出数据在D0-D7脚上,WR为低时表示:将当前D0-D7上的数据写入LCD
2020年6月29日
其他

STM32F207时钟系统解析

HSI的RC振荡器的优势是:在最小成本(没有外部器件)情况下提供一个时钟源。它的启动速度要比HSE晶体振荡器更快,但是即使校准频率后,它的精度仍然小于外部晶体振荡器或陶瓷谐振器。
2020年6月16日
其他

​STM32延时函数的四种方法

SYSTICK的时钟固定为HCLK时钟的1/8,在这里我们选用内部时钟源120M,所以SYSTICK的时钟为(120/8)M,即SYSTICK定时器以(120/8)M的频率递减。SysTick
2020年6月11日
其他

​复位电路的设计

MAX809有低电平有效的复位输出。而MAX810有高电平有效的复位输出典型值是17μA的低电源电流使MAX809/MAX810能理想地用于便携式,电池供电的设备。
2020年6月4日
其他

晶振原理解析

前几天我写了一篇《MCU的心脏-晶振》,部分同学表示,读后还是对有源晶振和无源晶振的区别并没有深入理解,觉得只是科普了晶振的类别和参数,下文将进一步讲解晶振的原理,以及晶振和STM32的关系。
2020年6月1日
其他

MCU的心脏-晶振

Capacitance)。负载电容是晶振的工作条件,即电路设计时要满足负载电容等于或接近晶振数据手册给出的数值才能使晶振按预期工作。
2020年5月28日
其他

开发板设计

④表示VDDA连接VDDA,VDDA和VSSA,那么就是他们给ADC等模块供电,没有的话,就是VDD和VSS供电。其中Vref+和Vref-是ADC模块基准电压,可以直接连VDDA和VSSA;
2020年5月25日