首先是创建Tx和Rx描述符的第一参数:DMARxDscrTab[ETH_RXBUFNB]和DMATxDscrTab[ETH_TXBUFNB]为两个结构体数组,数组的成员为描述符列表的成员,也就是说创建了有4个节点Rx描述符链表和4个节点Dx描述符链表。 //stm32f4x7_eth.c #ifdef CUSTOM_DRIVER_BUFFERS_CONFIG /* Redefinition of the Ethernet driver ...
在stm32f4x7_eth.c文件中定义两个DMA描述符数组,一个用DMA接收一个用于DMA发送,代码如下: __align(4) ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB];/* Ethernet Rx MA Descriptor */ __align(4) ETH_DMADESCTypeDef DMATxDscrTab[ETH_TXBUFNB];/* Ethernet Tx DMA Descriptor */ __align(4) uint...
ST官方以太网库stm32f2x7中使用链接结构的DMA描述符,那么在以太网描述符结构体ETH_DMADESCTypeDef中Buffer1Addr就是缓冲区的地址,Buffer2NextDescAddr就是下一个描述符的地址, 如下图。 在stm32f2x7_eth.c中定义了两个DMA描述符数组,一个用于DMA接收,一个用于DMA发送,如下: 接收和发送描述的大小通过宏ETH_RXB...
DMA描述符如下图,左边是环形结构,右边是链式结构。 02、DMA描述符 在ST提供的以太网驱动库stm32f2x7_eth.c中使用是链接结构,链接结构如下: 描述符注意事项: 1、一个以太网数据包可以跨越一个或多个DMA描述符 2、一个DMA描述符只能用于一个以太网数据包 3、DMA描述符列表中的最后一个描述符指向第一个,形成...
描述符的本质就是我们自己用结构体来实现这个描述符,然后将描述符的首地址写入到【ETH_DMATDLAR】寄存器中,STM32就知道这片内存是用来作为发送描述符了。 常规描述符和增强描述符又有发送描述符和接收描述符两种。 下图是常规TxDMA描述符: TDES0主要用来表示描述符的状态和控制信息。
DMA描述符如下图,左边是环形结构,右边是链式结构。 02DMA描述符 在ST提供的以太网驱动库stm32f2x7_eth.c中使用是链接结构,链接结构如下: 描述符注意事项: 1、一个以太网数据包可以跨越一个或多个DMA描述符 2、一个DMA描述符只能用于一个以太网数据包 ...
RxDesc[i].Status = ETH_DMARXDESC_OWN; // 将描述符所有权交给DMA } 4. 中断处理 使能接收中断: ETH->DMAIER |= ETH_DMAIER_RIE; // 使能接收完成中断 中断服务函数中及时处理: void ETH_IRQHandler() { if (ETH->DMASR & ETH_DMASR_RS) { // 接收中断标志 ...
ETH_DMADESCTypeDef *dma_rx_desc_tab = NULL;//定义DMA接收描述符指针 uint8_t *tx_buff = NULL;//DMA描述符发送缓存区的指针 uint8_t *rx_buff = NULL;//DMA描述符接收缓存区的指针 extern ETH_DMADESCTypeDef *DMATxDescToSet;//引用追踪发送描述符的指针 ...
可使用看门狗定时器(请参见ETH_DMARSWTR 寄存器)灵活控制RS 位(ETH_DMASR寄存器)。当此看门狗定时器使用非零值编程时,看门狗定时器激活,只要RXDMA完成发送一个接收的数据帧到系统存储,在没有触发接收状态,因为它不是使能的在相应的接收描述符(RDES1[31])(也就是:未在相应接收描述符(RDES1[31])使能接收状态)...
HAL_ETH_ReleaseRxFrame(&heth); } } 五、常见问题排查 物理层问题: 检查PHY_LED指示灯状态 使用示波器测量REF_CLK信号 确认PHY寄存器配置正确 数据接收失败: // 检查DMA描述符状态 if (RxDescriptors[rx_index].Status & ETH_DMARXDESC_OWN) {