内容概要:本文介绍了如何利用STM32CubeMX工具,在STM32F407平台上,基于HAL库,对常用的以太网芯片DP8384(单网口)以及交换机芯片KSZ8863进行快速开发的方法。通过对这两种不同类型的以太网通信芯片的具体配置步骤演示,帮助开发者快速理解和掌握以太网芯片的底层驱动程序设计技巧。此外,文中还特别提到在实际项目中应注意的问题及解决方案。 适用人群:具有一定嵌入式系统开发经验,并且正在或将要从事于物联网相关领域产品研发的技术人员;对于想要深入了解STM32CubeMX工具使用方法和以太网芯片驱动编程的开发人员。 使用场景及目标:①希望在短时间内搭建起稳定的以太网通讯模块并应用于工业自动化控制系统或其他智能设备;②希望通过本教程加深对以太网芯片内部工作机制的认识,提高解决复杂网络问题的能力。 其他说明:文中强调了数据手册的重要性,并指出大部分遇到的技术难题都能通过查阅数据手册得到答案。同时也指出了若初次接触STM32CubeMX工具,应该先学习其基本用法再深入研究具体的硬件驱动配置。这是一份面向实用性的教程文档,不仅教授具体的操作流程,同时也引导开发者构建良好的开发习惯和技术思维。
2025-12-26 14:08:01 1.22MB 嵌入式开发 STM32 以太网驱动 LWIP
1
STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制 STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率。 STM32 中一般的 DMA 传输方向有内存->内存、外设->内存、内存->外设。通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),在嵌入式开发中一般称为串口,通常用于中、低速通信场景,波特率低有 6400 bps,高能达到 4~5 Mbps。 在 STM32 中使用 DMA 收发数据,可以节约可观的 CPU 处理时间。特别是在高速、大数据量的场景中,DMA 是必须的,而双缓冲区、空闲中断以及 FIFO 数据缓冲区也是非常重要的成分。 在本文中,我们将使用 STM32CubeMX 配置串口,首先使能高速外部时钟,然后设置时钟树。接下来配置串口,选择一个串口,设置模式为 Asynchronous,设置波特率、帧长度、奇偶校验以及停止位长度。然后添加接收和发送的 DMA 配置,注意在 RX 中将 DMA 模式改为 Circular,这样 DMA 接收只用开启一次,缓冲区满后 DMA 会自动重置到缓冲区起始位置,不再需要每次接收完成后重新开启 DMA。 在串口收到数据之后,DMA 会逐字节搬运到 RX_Buf 中。当搬运到一定的数量时,就会产生中断(空闲中断、半满中断、全满中断),程序会进入回调函数以处理数据。全满中断和半满中断都很好理解,就是串口 DMA 的缓冲区填充了一半和填满时产生的中断。而空闲中断是串口在上一帧数据接收完成之后在一个字节的时间内没有接收到数据时产生的中断,即总线进入了空闲状态。 现在网络上大部分教程都使用了全满中断加空闲中断的方式来接收数据,不过这存在了一定的风险:DMA 可以独立于 CPU 传输数据,这意味着 CPU 和 DMA 有可能同时访问缓冲区,导致 CPU 处理其中的数据到中途时 DMA 继续传输数据把之前的缓冲区覆盖掉,造成了数据丢失。所以更合理的做法是借助半满中断实现乒乓缓存。 乒乓缓存是指一个缓存写入数据时,设备从另一个缓存读取数据进行处理;数据写入完成后,两边交换缓存,再分别写入和读取数据。这样给设备留足了处理数据的时间,避免缓冲区中旧数据还没读取完又被新数据覆盖掉的情况。 但是出现了一个小问题,就是 STM32 大部分型号的串口 DMA 只有一个缓冲区,要怎么实现乒乓缓存呢?没错,半满中断。现在,一个缓冲区能拆成两个来用了。看这图我们再来理解一下上面提到的三个中断:接受缓冲区的前半段填满后触发半满中断,后半段填满后触发全满中断;而这两个中断都没有触发,但是数据包已经结束且后续没有数据时,触发空闲中断。 举个例子:向这个缓冲区大小为 20 的程序传送一个大小为 25 的数据包,它会产生三次中断,如下图所示。程序实现原理介绍完成,感谢 ST 提供了 HAL 库,接下来再使用 C 语言实现它们就很简单了。首先开启串口 DMA 接收。 #define RX_BUF_SIZE 20 uint8_t USAR_RX_Buf[RX_BUF_SIZE]; 在上面的例子中,我们定义了一个大小为 20 的缓冲区 USAR_RX_Buf,並将其设置为串口 DMA 的接收缓冲区。然后,我们可以使用 HAL 库提供的函数来开启串口 DMA 接收。 HAL_UART_Receive_DMA(&huart1, USAR_RX_Buf, RX_BUF_SIZE); 在串口收到数据之后,DMA 会逐字节搬运到 RX_Buf 中。当搬运到一定的数量时,就会产生中断(空闲中断、半满中断、全满中断),程序会进入回调函数以处理数据。在回调函数中,我们可以将数据写入 FIFO 中供应用读取。 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { // 将数据写入 FIFO 中 FIFO_Put(USAR_RX_Buf, RX_BUF_SIZE); } 在上面的例子中,我们使用 HAL 库提供的回调函数 HAL_UART_RxCpltCallback 来处理数据。在这个函数中,我们将数据写入 FIFO 中供应用读取。这样,我们就可以轻松地实现高速的串口收发机制。 使用 STM32 HAL 库可以轻松地实现高速的串口收发机制,轻松跑上 2M 波特率。同时,我们还可以使用乒乓缓存和空闲中断来避免数据丢失和提高系统的可靠性。
2025-04-04 19:14:28 1.22MB stm32
1
ESP8266 WIFI模块程序,基于STM32F103C8单片机,采用串口通讯和HAL库实现,带按键控制,程序模块化很好,配合机智云使用,可以实现stm32之esp8266与机智云app云端连接
2024-05-20 17:40:47 7.15MB stm32 wifi esp8266
1
STM32实现MLX90614非接触测温串口显示(标准库与HAL库实现) 博客地址: https://blog.csdn.net/XiaoCaiDaYong/article/details/131789415
2024-04-29 20:46:20 26.57MB stm32 MLX90614
STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)D 博客地址:https://blog.csdn.net/XiaoCaiDaYong/article/details/127771234
2023-07-04 15:09:50 30.93MB STM32F103 JY61P 标准库与HAL库实现 陀螺仪
博客地址:STM32实现光照强度传感器(BH1750)(标准库与HAL库实现) https://blog.csdn.net/XiaoCaiDaYong/article/details/127677513?spm=1001.2014.3001.5502
2023-03-02 23:19:59 32.16MB STM32 BH1750 标准库与HAL库 光照度传感器
实验概述: 本工程实现内容为从SD卡内读取mp3文件进行播放,工程基于原子的VS1053B的例程实现 1.硬件基于野火的STM32F429 V1的开发板 2.软件工程采用CUBEMX生成 软件版本 Version 6.1.2 固件版本 STM32Cube_FW_F4_V1.27.0 3.实现FatFS+SD卡 SD卡使用SDIO接口
2023-01-08 17:22:09 17.17MB VS1053B STM32F429 HAL库MP3
1
薄膜压力传感器应用范围比较广泛,可以实现重量的检测,实现座椅上物体重量检测等. 单片机型号:STM32F103系列. 博客地址:https://blog.csdn.net/XiaoCaiDaYong/article/details/127075281?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127075281%22%2C%22source%22%3A%22XiaoCaiDaYong%22%7D
2022-10-13 22:31:36 29.33MB
1
内容概要:使用STM32F103RET6作为核心,控制RN8302B芯片,基本功能是测试C相电压,借此熟悉RN8302B的操作。 适合人群:具备一定编程基础,工作1-3年的研发人员 能学到什么:①stm32cubeide的使用;②stm32cubeimx如何对芯片STM32F103RCT6进行配置;③如何对printf进行重映射;④如何操作RN8302B芯片。 阅读建议:此资源以开发简单的交流电压采集功能来熟悉RN8302B的操作,其优点是①基于ST官方、正版、免费软件stm32cubeide开发的;②内置的stm32cubemx,引脚配置非常直观,移植非常方便,只需把控制引脚命名相同即可。 移植教程:https://blog.csdn.net/qq_35629563/article/details/126772062
2022-09-29 22:10:53 8.87MB RN8302B STM32
1
详细描述可参考博文: https://blog.csdn.net/yy123xiang/article/details/120042888
2022-08-09 13:52:50 727KB 源码软件
1