STM32H743 RL-TCP(一)基于RTX环境移植硬汉大哥例程(使用阿波罗开发板)

【ThreadX】H743ZI+LAN8720+ThreadX+NetX Duo移植 【自己首发于安富莱】 从晚上6.10下班测到早上来的测试结果我上报的结果截图给大家分享下无间隔,数据随机的ping测试报告H7平台:H743ZIT6PHY芯片:LAN8720---------------- 3149374 有效发送 3149258 有效接收 116 timed out (0.00% 丢失)Ping 最小值0ms, 最大值11ms, 平均值0.01ms成功率: 接近99%感觉还有优化的空间^_^2020/12/23 18:10:51.4... 阅读详情

STM32H743 RL-TCP(一)基于RTX环境移植硬汉大哥例程(使用阿波罗开发板)

由于最近开始学习TCP/IP协议栈,从网上查询资料发现嵌入式端的主流协议栈包括lwip、RL-TCP等。在安富莱电子论坛上能找到lwip和RL-TCP的教程,综合来看,lwip用的人更多,但arm近来主推RL-TCP,在MDK5中使用较为方便,仅需要简单配置。
最终本人选择了RL-TCP。硬汉大哥对RL-TCP有相关的教程,十分详细,但目前来说其教程都是基于安富莱v7开发板。由于手头只有阿波罗板,故需要对此进行适配,折腾了两天,遇到无数的坑,最终简单运行硬汉的demo,故以此文记录如何移植。

1、准备工作

1、硬件:正点原子阿波罗开发板,核心板型号为STM32H743IIT6、烧录器等
2、软件:MDK5.31(目前本人的环境,没尝试过其他版本)、来自硬汉大哥的工程移植模板
在这里插入图片描述
其余环境配置如下
在这里插入图片描述
软件包汇总下载地址
http://www.armbbs.cn/forum.php?mod=viewthread&tid=95609

2、移植

打开工程目录文件,由于之前的步骤按照硬汉大哥的教程即可实现,此处省略,着眼于阿波罗开发板的适配。

2.1 修改网卡驱动

阿波罗板载PHY芯片型号为LAN8720A,但安富莱v7开发板为DM9161。并且根据阿波罗原理图可知,LAN8270A的复位引脚接在了IO扩展芯片PCF8574上,初始化时需要对PCF8574 的 D7 口写0复位。此处很容易犯错!!!!
同时,二者的引脚接法也有所不同。

首先,删除原有网卡DM9161驱动,将PHY_LAN8720.c 和 PHY_LAN8720.h添加进工程。这两个文件在这里。

随后添加复位部分文件,这里需要iic驱动PCF8574,故具有四个文件。pcf8574.c/ pcf8574.h/ myiic.c/ myiic.h

myiic.c(修改自原子的myiic.c)

#include "myiic.h"

//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F429开发板
//IIC驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2016/1/13
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved									  
//////////////////////////////////////////////////////////////////////////////////

void delay_us(uint32_t nus)
{		
    for(int i; i<480*nus; i++)
    {
    }
//	采用此方式是为避免出现systick卡死情况
}
//IIC初始化
void IIC_Init(void)
{
    GPIO_InitTypeDef GPIO_Initure;
    
    __HAL_RCC_GPIOH_CLK_ENABLE();   //使能GPIOH时钟
    
    //PH4,5初始化设置
    GPIO_Initure.Pin=GPIO_PIN_4|GPIO_PIN_5;
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FAST;     //快速
    HAL_GPIO_Init(GPIOH,&GPIO_Initure);
    
    IIC_SDA(1);
    IIC_SCL(1);  
	
}

//产生IIC起始信号
void IIC_Start(void)
{
	SDA_OUT();     //sda线输出
	IIC_SDA(1);	  	  
	IIC_SCL(1);
	delay_us(4);
 	IIC_SDA(0);//START:when CLK is high,DATA change form high to low 
	delay_us(4);
	IIC_SCL(0);//钳住I2C总线,准备发送或接收数据 
}	  
//产生IIC停止信号
void IIC_Stop(void)
{
	SDA_OUT();//sda线输出
	IIC_SCL(0);
	IIC_SDA(0);//STOP:when CLK is high DATA change form low to high
 	delay_us(4);
	IIC_SCL(1); 
	IIC_SDA(1);//发送I2C总线结束信号
	delay_us(4);							   	
}
//等待应答信号到来
//返回值:1,接收应答失败
//        0,接收应答成功
uint8_t IIC_Wait_Ack(void)
{
	uint8_t ucErrTime=0;
	SDA_IN();      //SDA设置为输入  
	IIC_SDA(1);delay_us(1);	   
	IIC_SCL(1);delay_us(1);	 
	while(READ_SDA)
	{
		ucErrTime++;
		if(ucErrTime>250)
		{
			IIC_Stop();
			return 1;
		}
	}
	IIC_SCL(0);//时钟输出0 	   
	return 0;  
} 
//产生ACK应答
void IIC_Ack(void)
{
	IIC_SCL(0);
	SDA_OUT();
	IIC_SDA(0);
	delay_us(2);
	IIC_SCL(1);
	delay_us(2);
	IIC_SCL(0);
}
//不产生ACK应答		    
void IIC_NAck(void)
{
	IIC_SCL(0);
	SDA_OUT();
	IIC_SDA(1);
	delay_us(2);
	IIC_SCL(1);
	delay_us(2);
	IIC_SCL(0);
}					 				     
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答			  
void IIC_Send_Byte(uint8_t txd)
{                        
    uint8_t t;   
	SDA_OUT(); 	    
    IIC_SCL(0);//拉低时钟开始数据传输
    for(t=0;t<8;t++)
    {              
        IIC_SDA( (txd&0x80)>>7 );
        txd<<=1; 	  
		delay_us(2);   //对TEA5767这三个延时都是必须的
		IIC_SCL(1);
		delay_us(2); 
		IIC_SCL(0);	
		delay_us(2);
    }	 
} 	    
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
uint8_t IIC_Read_Byte(unsigned char ack)
{
	unsigned char i,receive=0;
	SDA_IN();//SDA设置为输入
    for(i=0;i<8;i++ )
	{
        IIC_SCL(0); 
        delay_us(2);
		IIC_SCL(1);
        receive<<=1;
        if(READ_SDA)receive++;   
		delay_us(1); 
    }					 
    if (!ack)
        IIC_NAck();//发送nACK
    else
        IIC_Ack(); //发送ACK   
    return receive;
}

myiic.h(修改自原子)

#ifndef _MYIIC_H
#define _MYIIC_H

#include "bsp.h"

//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F429开发板
//IIC驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2016/1/13
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved									  
////////////////////////////////////////////////////////////////////////////////// 	
//IO方向设置
#define SDA_IN()  {GPIOH->MODER&=~(3<<(5*2));GPIOH->MODER|=0<<5*2;}	//PH5输入模式
#define SDA_OUT() {GPIOH->MODER&=~(3<<(5*2));GPIOH->MODER|=1<<5*2;} //PH5输出模式
//IO操作
#define IIC_SCL(a)   	if(a)	HAL_GPIO_WritePin(GPIOH,GPIO_PIN_4,GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOH,GPIO_PIN_4,GPIO_PIN_RESET);//SCL
#define IIC_SDA(a)  	if(a)	HAL_GPIO_WritePin(GPIOH,GPIO_PIN_5,GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOH,GPIO_PIN_5,GPIO_PIN_RESET);//SCL
#define READ_SDA  		HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_5)

void delay_us(uint32_t nus);
//IIC所有操作函数
void IIC_Init(void);                //初始化IIC的IO口				 
void IIC_Start(void);				//发送IIC开始信号
void IIC_Stop(void);	  			//发送IIC停止信号
void IIC_Send_Byte(uint8_t txd);			//IIC发送一个字节
uint8_t IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
uint8_t IIC_Wait_Ack(void); 				//IIC等待ACK信号
void IIC_Ack(void);					//IIC发送ACK信号
void IIC_NAck(void);				//IIC不发送ACK信号

void IIC_Write_One_Byte(uint8_t daddr,uint8_t addr,uint8_t data);
uint8_t IIC_Read_One_Byte(uint8_t daddr,uint8_t addr);	 


#endif



···

pcf8574.c
#include "pcf8574.h"

//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F429开发板
//PCF8574驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2016/1/13
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved									  
////////////////////////////////////////////////////////////////////////////////// 	

//初始化PCF8574
uint8_t PCF8574_Init(void)
{
    uint8_t temp=0;
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_GPIOB_CLK_ENABLE();           //使能GPIOB时钟
	
    GPIO_Initure.Pin=GPIO_PIN_12;           //PB12
    GPIO_Initure.Mode=GPIO_MODE_INPUT;      //输入
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);     //初始化
    IIC_Init();					            //IIC初始化 	
	//检查PCF8574是否在位
    IIC_Start();    	 	   
	IIC_Send_Byte(PCF8574_ADDR);            //写地址			   
	temp=IIC_Wait_Ack();		            //等待应答,通过判断是否有ACK应答,来判断PCF8574的状态
    IIC_Stop();					            //产生一个停止条件
    PCF8574_WriteOneByte(0XFF);	            //默认情况下所有IO输出高电平
    
    PCF8574_WriteBit(ETH_RESET_IO,0);
    HAL_Delay(100);
    
	return temp;
}

//读取PCF8574的8位IO值
//返回值:读到的数据
uint8_t PCF8574_ReadOneByte(void)
{				  
	uint8_t temp=0;		  	    																 
    IIC_Start();    	 	   
	IIC_Send_Byte(PCF8574_ADDR|0X01);   //进入接收模式			   
	IIC_Wait_Ack();	 
    temp=IIC_Read_Byte(0);		   
    IIC_Stop();							//产生一个停止条件	    
	return temp;
}
//向PCF8574写入8位IO值  
//DataToWrite:要写入的数据
void PCF8574_WriteOneByte(uint8_t DataToWrite)
{				   	  	    																 
    IIC_Start();  
    IIC_Send_Byte(PCF8574_ADDR|0X00);   //发送器件地址0X40,写数据 	 
	IIC_Wait_Ack();	    										  		   
	IIC_Send_Byte(DataToWrite);    	 	//发送字节							   
	IIC_Wait_Ack();      
    IIC_Stop();							//产生一个停止条件 
	HAL_Delay(10);	 
}

//设置PCF8574某个IO的高低电平
//bit:要设置的IO编号,0~7
//sta:IO的状态;0或1
void PCF8574_WriteBit(uint8_t bit,uint8_t sta)
{
    __IO uint8_t data;
    data=PCF8574_ReadOneByte(); //先读出原来的设置
    if(sta==0)data&=~(1<<bit);     
    else data|=1<<bit;
    PCF8574_WriteOneByte(data); //写入新的数据
}

//读取PCF8574的某个IO的值
//bit:要读取的IO编号,0~7
//返回值:此IO的值,0或1
uint8_t PCF8574_ReadBit(uint8_t bit)
{
    uint8_t data;
    data=PCF8574_ReadOneByte(); //先读取这个8位IO的值 
    if(data&(1<<bit))return 1;
    else return 0;   
}  
    

pcf8574.h
#ifndef __PCF8574_H
#define __PCF8574_H
#include "myiic.h"
//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F429开发板
//PCF8574驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2016/1/13
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved									  
////////////////////////////////////////////////////////////////////////////////// 	

#define PCF8574_INT  PBin(12) //PCF8574 INT脚

#define PCF8574_ADDR 	0X40	//PCF8574地址(左移了一位)

//PCF8574各个IO的功能
#define BEEP_IO         0		//蜂鸣器控制引脚  	P0
#define AP_INT_IO       1   	//AP3216C中断引脚	P1
#define DCMI_PWDN_IO    2    	//DCMI的电源控制引脚	P2
#define USB_PWR_IO      3    	//USB电源控制引脚	P3
#define EX_IO      		4    	//扩展IO,自定义使用 	P4
#define MPU_INT_IO      5   	//MPU9250中断引脚	P5
#define RS485_RE_IO     6    	//RS485_RE引脚		P6
#define ETH_RESET_IO    7    	//以太网复位引脚		P7

uint8_t PCF8574_Init(void); 
uint8_t PCF8574_ReadOneByte(void); 
void PCF8574_WriteOneByte(uint8_t DataToWrite);
void PCF8574_WriteBit(uint8_t bit,uint8_t sta);
uint8_t PCF8574_ReadBit(uint8_t bit);
#endif



将此四个文件添加至工程,如下图所示
在这里插入图片描述

2.2 修改引脚约束

二者的引脚约束不同,需重新对应并修改。

2.2.1 网卡引脚

在ETH_Init.c文件中,将函数HAL_ETH_MspInit修改为如下所示,注意几个引脚初始化位置的改动。

/*
*********************************************************************************************************
*	函 数 名: HAL_ETH_MspInit
*	功能说明: 以太网初始化调用的底层回调,用于初始化IO,时钟和中断
*	形    参: ---
*	返 回 值: 无
*********************************************************************************************************
*/
void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)
{
	GPIO_InitTypeDef GPIO_InitStruct;

	/*
		PC1     ------> ETH_MDC
		PA1     ------> ETH_REF_CLK
		PA2     ------> ETH_MDIO
		PA7     ------> ETH_CRS_DV
		PC4     ------> ETH_RXD0
		PC5     ------> ETH_RXD1
		PB11    ------> ETH_TX_EN
		PG13    ------> ETH_TXD0
        PG14    ------> ETH_TXD1    
	*/
	if(heth->Instance==ETH)
	{
		/* 使能外设时钟 */
		__HAL_RCC_ETH1MAC_CLK_ENABLE();
		__HAL_RCC_ETH1TX_CLK_ENABLE();
		__HAL_RCC_ETH1RX_CLK_ENABLE();

		/* 使能时钟 */
		__HAL_RCC_GPIOA_CLK_ENABLE();
		__HAL_RCC_GPIOB_CLK_ENABLE();
		__HAL_RCC_GPIOC_CLK_ENABLE();
		__HAL_RCC_GPIOG_CLK_ENABLE();

		
		/* 配置PA1, PA2 , PA7 */
		GPIO_InitStruct.Pin =  GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7;
		GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
		GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
		GPIO_InitStruct.Pull = GPIO_NOPULL ; 
		GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
		HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

		/* 配置PB11 */
		GPIO_InitStruct.Pin = GPIO_PIN_11;
		HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

		/* 配置PC1, PC4和PC5 */
		GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5; 
		HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);	

		/* 配置G13和PG14 */
		GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14;
		HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

		/* 设置中断优先级 */
		HAL_NVIC_SetPriority(ETH_IRQn, 3, 0);
		HAL_NVIC_EnableIRQ(ETH_IRQn);	
	}
}

2.2.2 其他冲突引脚

初始化时如果发生冲突,引脚将无法正常工作。此部分包含 按键(key) 串口3 。

2.2.2.1 KEY

打开bsp_key.c, 注意到按键的K3与iic引脚PH4冲突,需要修改成如下所示,注意,由于阿波罗板没有JOY摇杆,需要将其注释并修改按键数目。

#include "bsp.h"

#define HARD_KEY_NUM	    3	   						/* 实体按键个数 */
#define KEY_COUNT   	 	(HARD_KEY_NUM + 2)	/* 8个独立建 + 2个组合按键 */

/* 使能GPIO时钟 */
//#define ALL_KEY_GPIO_CLK_ENABLE() {	\
//		__HAL_RCC_GPIOB_CLK_ENABLE();	\
//		__HAL_RCC_GPIOC_CLK_ENABLE();	\
//		__HAL_RCC_GPIOG_CLK_ENABLE();	\
//		__HAL_RCC_GPIOH_CLK_ENABLE();	\
//		__HAL_RCC_GPIOI_CLK_ENABLE();	\
//	};
#define ALL_KEY_GPIO_CLK_ENABLE() {	\
		__HAL_RCC_GPIOC_CLK_ENABLE();	\
		__HAL_RCC_GPIOH_CLK_ENABLE();	\
	};


/* 依次定义GPIO */
typedef struct
{
	GPIO_TypeDef* gpio;
	uint16_t pin;
	uint8_t ActiveLevel;	/* 激活电平 */
}X_GPIO_T;

/* GPIO和PIN定义 */
static const X_GPIO_T s_gpio_list[HARD_KEY_NUM] = {
	{GPIOH, GPIO_PIN_3, 0},		/* K1 */
	{GPIOH, GPIO_PIN_2, 0},	    /* K2 */
	{GPIOC, GPIO_PIN_13, 0},    /* K3 */
//	{GPIOG, GPIO_PIN_2, 0},		/* JOY_U */	
//	{GPIOB, GPIO_PIN_0, 0},		/* JOY_D */
//	{GPIOG, GPIO_PIN_3, 0},		/* JOY_L */	
//	{GPIOG, GPIO_PIN_7, 0},		/* JOY_R */	
//	{GPIOI, GPIO_PIN_11, 0},	/* JOY_OK */
};

还有一个地方需要修改否则无法正常使用按键,就是在函数bsp_InitKeyVar中需要注释如下几行

	/* 摇杆上下左右,支持长按1秒后,自动连发 */
//	bsp_SetKeyParam(KID_JOY_U, 100, 6);
//	bsp_SetKeyParam(KID_JOY_D, 100, 6);
//	bsp_SetKeyParam(KID_JOY_L, 100, 6);
//	bsp_SetKeyParam(KID_JOY_R, 100, 6);
2.2.2.2 串口

此处串口默认打开USART3,与PB11冲突,需要将头文件 bsp_uart_fifo.h中的 宏定义UART3_FIFO_EN改为0

#define	UART3_FIFO_EN	0

3、添加网口复位代码

打开bsp.h,添加头文件引用#include "pcf8574.h"

打开bsp.c,找到函数bsp_Init,修改为

void bsp_Init(void)
{
	bsp_InitDWT();      /* 初始化DWT时钟周期计数器 */       
	bsp_InitKey();    	/* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */
	bsp_InitUart();		/* 初始化串口 */
    PCF8574_Init();
	bsp_InitExtIO();	/* 初始化FMC总线74HC574扩展IO. 必须在 bsp_InitLed()前执行 */	
	bsp_InitLed();    	/* 初始化LED */	
	bsp_InitTimer();  	/* 初始化滴答定时器 */
}

随后打开pcf8574.c
在函数PCF8574_Init末尾添加如下代码,将P7拉低

    PCF8574_WriteBit(ETH_RESET_IO,0);
    HAL_Delay(100);

4、测试

编译下载到板上,可以正常ping通。注意计算机网口如果没开DHCP服务器,需要将开发板设置为静态IP。具体参见安富莱_STM32-V7开发板_RL-TCPnet V7.X网络教程(V0.4).pdf
在这里插入图片描述

最终结果
在这里插入图片描述

致谢

十分感谢原子哥和硬汉哥对于嵌入式开发入门的帮助。

STM32H743以太网RMII调试问题及解决方法汇总 标题STM32H743以太网RMII调试问题及解决方法汇总 了解IP179芯片 我使用IP179的此应用形式,是8 port+1 RMII,其中RMII和MCU是通过MAC通信的,PHY1不能使用。 应用形式对应的接线关系如下。 调试过程中发现743可以发送出数据,但对方收不到,且监听广播包也没有743发送的包,技术支持说硬件的TEST1\0管脚不要接地,悬空即可。修改硬件后可以监听到743的广播包,原因未知。 问题1:通过发送描述符DESC0查询DMA发送缓存地址的数据,数据正常,但发送不出去。 解 阅读详情

相关推荐

STM32H743xx基本定时器TIM17

STM32H743xx基本定时器TIM17

RaphaelCeo的博客 1899

【LWIP】(补充)STM32H743(M7内核)CubeMX配置LWIP并ping通

前言 之前我写了一个用CubeMX配置LWIP以太网通讯的博客: 【LWIP】stm32用CubeMX配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分) 当时用的是F207、F407加上LAN8720、DP83848做了测试,效果都是很好的。但是当我第一次在STM32H743的时候突然傻眼了,H743用CubeMX配置以太网方法与其他内核的芯片有很大不同,估计很多同学在从F1\F2\F4转到STM32 M7系列配置以太网的时候都和我一样,一开始信心满满,然后一头雾水。

lrqblack的博客 2万+

STM32H743的以太网配置融合到CubeMx生成的底层中

摘要:本文详细介绍了基于STM32H743IITx单片机的以太网与CAN通讯配置方案。通过CubeMX生成底层工程(不含以太网),手动移植正点原子开发的以太网驱动库。硬件采用YT8512C百兆PHY芯片和TJA1051 CAN芯片,配置时钟树使系统主频达480MHz,CAN波特率500kbps。关键步骤包括替换HAL库文件、添加LWIP协议栈、配置工程路径等。特别说明需使用AC5编译器以避免兼容性问题,并提供了以太网数据收发接口的实现方法。该方案实现了CubeMX生成工程与手动配置以太网的融合,为工业通信应

qq_36625174的博客 1462

手把手教你用STM32cube调通STM32H743以太网通信并实现TCP客户端

STM32H7内核是Cortex-M7,目前接触到与M4最大的区别就是CACHE,M7有两个CACHE,DCACHE和ICACHE。因为这个CACHE踩了很多坑。 本例程软硬件配置为:FreeRTOS+LwIP+LAN8720,在正点原子阿波罗开发板上测试 1. Cube配置 RCC都使用外部晶振,因为后面要用到FreeRTOS,cube会建议使用TIM1作为SYS时钟源 系统 不考虑功...

LKAYA的博客 3万+

STM32H743与DP83848以太网通信项目实战:集成LWIP协议栈

STM32H743是STMicroelectronics(意法半导体)生产的一款高性能的ARM Cortex-M7微控制器。本章节将带您一窥这款微控制器的核心功能和优势,为进一步深入学习和应用打下坚实的基础。DP83848 的引脚设计考虑到与多种微控制器的兼容性,常见的引脚定义如下:TX_CLK:发送时钟信号,当工作在MII模式时使用;TX_EN:发送使能信号,表明数据在TXD线上有效;TXD[3:0]:发送数据信号,用于发送数据到PHY芯片;RX_CLK。

weixin_42514540的博客 1336

STM32H743 基础例程代码

STM32H743 基础例程代码 包括GPIO 输入中断 看门狗 定时器 PWM PWM捕获LCD SRAM等集合

RL-TCPNet的移植与使用简介

本文阅读前提:         1.  OSI七层模型和TCP/IP协议结构         2.  一些ARM开发经验,特别是MDK的         3. MII/RMII/SLIP相关概念          在互联网/物联网时代,嵌入式产品接入网络已经不是什么新鲜概念或高端技术了。 通过网络对产品进行远程管理是一种流行而又高效的方法,常见的方法有Telnet(TCP)、SNM

非著名码农的专栏 1万+

STM32H743串口、CAN、以太网通讯

#资源达人分享计划# CUBEMX编写

STM32CubeMX新建STM32H743工程

启用的Cache起始地址为0x24000000与内存块IRAM2冲突,需要取消勾选。:正点原子阿波罗STM32H743、JlinkV9(V8不支持)、STLink。选需求芯片,若有弹窗默认即可,最后生成图形配置界面。控制2个LED闪烁,配置PB0与PB1为输出模式。原理图上使用PH0、PH1,使用外部高速时钟。注意:Debug内建议根据不同烧录器检查下。默认是有优化等级的,个人习惯使用Lv0。便于右键define查定义,非必须。主要就是工程命名以及选择IDE。生成代码包含必须的库文件即可。

horse_2007s的博客 1940

STM32F407 + mbed + lwIP + LAN8720 例程

本资源提供了针对STM32F407微控制器的网络通信示例程序,利用了mbed平台的强大功能,并结合lwIP轻量级TCP/IP协议栈,实现了以太网通讯功能。特别适用于那些希望快速集成网络功能到STM32F407项目中的开发者。该例程已经成功应用于NUCLEO-F446RE开发板上,并通过LAN8720以太网PHY芯片进行网络连接,保证了良好的稳定性和实用性。

3D识别建模 — 基于ReconstructMe和EAGLE EYES SCANNER的实现

3D实体识别建模,作为3D打印反向工程的一个重要环节,今天就让我们利用ReconstructMe和EAGLE EYES SCANNER来了解一下。 第一步、软件和硬件准备就绪 ReconstructMe下载并安装 http://reconstructme.net/?wpdmdl=160 EAGLE EYES SCANNER直接将相应USB插入电脑接口即OK,之后在    中点击搜索“设备管理...

qq_40013290的博客 881

基于STM32CubeMX创建的STM32H743+DP83848+LWIP网络通信程序调试_20221127算是胎教级教程了

基于STM32CubeMX软件,编写一个能够应用在STM32H743单片机上的网络通信程序调试,PHY芯片为DP83848,通信协议栈采用LWIP。

博大博的博客 8574

JSAPI微信支付(小程序)V3版本JAVA代码实战源码

1.1、商户通过JSAPI/小程序下单接口获取到发起支付的必要参数prepay_id后,再通过微信小程序调起微信支付收银台JSAPI/小程序下单_JSAPI支付|微信支付商户文档中心1.3、微信H5发起类似,结合文档,细微调整,前端返回类似,参考文档修改为微信内置浏览器调起支付即可。

java web 707

STM32H743_ETHERNET+CubeMX+OS+TCP&UDP_ECHO

小白入门级STMH743以太网CubeMX配置

W1062998292的博客 2689

Python多进程实战:用BaoStock高效下载股票历史数据的5个优化技巧

本文详细介绍了使用Python多进程技术通过BaoStock高效下载股票历史数据的5个优化技巧。从理解BaoStock的数据获取机制到进程池配置、智能任务分片、异常处理及性能监控,帮助开发者显著提升数据下载效率,特别适合量化交易领域的数据采集需求。

weixin_30369041的博客 458

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

zerorzeror的博客 3118

【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)

第9章 RL-TCPnet网络协议栈移植(uCOS-III) 本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文件、配置文件和驱动文件即可。另外,RL-TCPnet移植到uCOS-III要重新配置RL-TCPnet的接口函数,以此来支持RL-TCPent多任务运行。使...

weixin_30312557的博客 304

土壤数据库辅助工具SPAW计算土壤导水率

首先点击打开根据之前的1比100土壤数据查表得到各个组分含量其中Field Capacity是田间持水量Matric Bulk Density是基质粒密度。

所有专家都曾始于新手 3443

开发板学习日记之STM32H743-02 基础例程

由于我已经是从STM32F4过来的老鸟了,现在学STM32H7不再需要一步一步的学起,就是原先使用的是标准库现在需要熟悉HAL库的使用。 我将部分基础例程直接合并到一起,在自己新建的工程里面实现了这些功能: 当然 还是想吐槽一下正点原子的代码格式真是乱的一塌糊涂, 做项目还是要像安富莱那样写代码,等你工作了你就会知道,好的代码可以提高工作效率。建议大家读一读《代码的整洁之道》,好我们接下来开始讲解工程: 1.初始化流程 void Init_Pro(void) { /* 使能L1 Cach...

liangwu5582066930的专栏 3974

PCL Fast Global Registration 快速全局配准(源码版)

Fast Global Registration(FGR)是一种经典的点云粗配准算法,已集成到Open3D和CloudCompare等软件中。本文介绍了该算法的源码实现及优化方法,包括如何通过修改源码直接读取点云进行配准,而不依赖文件中读取特征描述子。文章还提供了关键参数设置(如最大迭代次数、匹配距离等)。算法实现简单高效,未来计划发布基于纯PCL的版本。源码和论文链接已附上,供开发者参考。

点云侠的博客 383

初学者入门YOLO目标检测:从懵圈到上手,这篇文章讲透所有核心(附学习路径+避坑指南)

目标:比如训练一个“检测苹果和橘子”的模型,或者“检测人脸”的模型;任务:学会用LabelImg标注数据,制作YOLO格式的数据集,用命令行训练模型;关键:不用追求高精度,能训练出一个能检测出目标的模型就行。很多初学者卡在入门阶段,不是因为智商不够,而是因为“想太多,做太少”——总觉得要把所有原理搞懂才能动手,结果越想越怕,最后放弃。先动手,再动脑。先跑通一个案例,获得成就感;再制作自定义数据集,训练简单模型;最后再回头去理解原理,优化模型。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 690

【亲测免费】 探索高效网络通信:STM32H743以太网TCP客户端实现

探索高效网络通信:STM32H743以太网TCP客户端实现 【下载地址】STM32H743以太网通信TCP客户端实现IAR 本项目是针对STM32H743芯片,利用STM32CubeMX配置生成的基础代码框架,并结合特定的DCache管理代码,实现了以太网通信中的TCP客户端功能。特别适合那些需要在STM32高性能平台上...

gitblog_09801的博客 1194

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【亲测免费】 STM32H743 寄存器版本标准例程

STM32H743 寄存器版本标准例程 【下载地址】STM32H743寄存器版本标准例程 本仓库提供了一系列基于STM32H743微控制器的寄存器版本标准例程,涵盖了从基础到高级的各种实验项目。这些例程旨在帮助开发者快速上手STM32H743的开发,并通过实际操作掌握各种外设的使用方法。 ...

gitblog_09775的博客 925

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

使用RL_TCPnet创建TCP SERVER笔记

一、使用BSD Socket创建TCP SERVER #define SOCK_PORT 1001 #define IP4_ENABLE 1 /// Stream socket server thread static void Stream_Server (void *arg) { int32_t sock, sd, retv; char dbuf[4]; while (1) ...

qq_18204721的博客 374

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

STM32H743(M7内核)通过CubeMX搭建工程,移植TreadX和NetXDUO(一)

threadx移植

weixin_45469765的博客 2906
上一篇: ESP32学习资料收集
下一篇: 通信原理SNR EbN0 EsN0理解
Onelasttime
博客等级 码龄8年 4粉丝 10原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值