W5500--1(准备)

需要准备:

1git拉下W5500的整个工程代码

2基于STM32需要有一点的SPI通信基础 建议先完成W24Q64在做该项目

3需要定时器链表的支持 建议准备好

开始:

做一个对接的模块:

#ifndef _W5500_DRV_H_
#define _W5500_DRV_H_

#include "stdint.h"

void w5500_mutex_exit(void);
void w5500_mutex_enter(void);

void w5500_chip_disable( void );
void w5500_chip_enable( void );

uint8_t w5500_read_byte( void );
void w5500_write_byte( uint8_t txCh);

void w5500_drv_init( void );
void w5500_drv_resert( void );

#endif
#include "w5500_drv.h"
#include "main.h"
#include "spi.h"

void *w5500Port = NULL;

/*本.c完成W5500硬件部分的驱动
需要GPIO支持
需要SPI支持
*/



/*复位:
拉低RST脚 延时2ms 再拉高 延时100ms即可*/
void w5500_drv_resert( void )
{
	HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_RESET);

	HAL_Delay(2);

	HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_SET);

	HAL_Delay(100);
}

/*使能:
就是操作SPI的片选使能和失能
*/
void w5500_chip_enable( void )
{
	  HAL_GPIO_WritePin(SPI3_CS_GPIO_Port , SPI3_CS_Pin , GPIO_PIN_RESET);
}

void w5500_chip_disable( void )
{ 
	  HAL_GPIO_WritePin(SPI3_CS_GPIO_Port , SPI3_CS_Pin , GPIO_PIN_SET);
}

/*写字节;
就是操作SPI发送一个HEX
*/
void w5500_write_byte( uint8_t byte)
{
	uint8_t d_read,d_send=byte;
  if(HAL_SPI_TransmitReceive(&hspi3,&d_send,&d_read,1,0xFFFFFF)!=HAL_OK)
    d_read=0XFF;    
}


/*读字节;
就是操作SPI发送一个0XFF然后同步接收到的那个HEX
*/
uint8_t w5500_read_byte( void )
{
	 uint8_t d_read,d_send=0XFF;
   if(HAL_SPI_TransmitReceive(&hspi3,&d_send,&d_read,1,0xFFFFFF)!=HAL_OK)
    d_read=0XFF;

  return d_read;  
}

/*加锁;
关闭全局中断
*/
void w5500_mutex_enter(void)
{	
    __set_PRIMASK(1);  
}
/*解锁;
开启全局中断
*/
void w5500_mutex_exit(void)
{
    __set_PRIMASK(0);
}



//SPI对接-初始化-已经好了
//复位脚输出高--已经好了
//SPI片选脚
void w5500_drv_init( void )
{
    w5500Port = &hspi3;
    
	  HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_SET);   
}

该模块会很快阵亡,因为韩国公司设计的非常棒!

值得表扬!值得学习!

该模块的函数会直接送给W5500库函数 吃进去!

注意:之前W24Q64写过MX配置SPI的问题 

这里依然也需要注意https://mp.csdn.net/postedit/85319660

否则 无法work!

猜你喜欢

转载自blog.csdn.net/weixin_42381351/article/details/88848057