需要准备:
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!