久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
前兩天做W5500的小項(xiàng)目,自己寫了驅(qū)動(dòng)和庫,有詳細(xì)的注釋,模式SPI與硬件SPI都有
[打印本頁]
作者:
達(dá)達(dá)達(dá)
時(shí)間:
2019-7-26 17:01
標(biāo)題:
前兩天做W5500的小項(xiàng)目,自己寫了驅(qū)動(dòng)和庫,有詳細(xì)的注釋,模式SPI與硬件SPI都有
代碼親測(cè)有用,注釋詳細(xì),可放心食用
0.png
(44.53 KB, 下載次數(shù): 94)
下載附件
2019-7-27 00:55 上傳
STM32單片機(jī)源程序如下:
#include "bsp_w5500.h"
#include "bsp_spi.h"
#include "bsp_systick.h"
#include "bsp_w5500_int.h"
/***********************-CS引腳與RST引腳配置-****************************/
static void W5500_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(W5500_CS_CLK|W5500_RST_CLK,ENABLE);
/*CS引腳配置*/
GPIO_InitStruct.GPIO_Pin=W5500_CS_Pin;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(W5500_CS_Port,&GPIO_InitStruct);
/*RST引腳配置*/
GPIO_InitStruct.GPIO_Pin=W5500_RST_Pin;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(W5500_RST_Port,&GPIO_InitStruct);
W5500_CS_High();
}
/*****************************************************************************
*@brief : W5500硬件復(fù)位
*@param :
*@retval : none
*****************************************************************************/
static void W5500_HardWare_Reset(void)
{
W5500_RST_Low();
delay_ms(5);
W5500_RST_High();
delay_ms(5);
}
/*****************************************************************************
*@brief : 向W5500公共寄存器寫一個(gè)字節(jié)數(shù)據(jù)
*@param : offest: 是基于公共寄存器基地址的偏移量
*@param : data : 將要向寄存器寫入的數(shù)據(jù)
*@retval : none
*****************************************************************************/
void W5500_Write1Byte_common(uint16_t offest,uint8_t data)
{
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((uint8_t) (COMMON_R|RWB_WRITE|VDM)); /*發(fā)送控制字節(jié)*/
SPI1_Send_Byte(data); /*發(fā)送8位數(shù)據(jù)*/
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
}
/*****************************************************************************
*@brief : 向W5500公共寄存器寫兩個(gè)字節(jié)數(shù)據(jù)
*@param : offest: 是基于公共寄存器基地址的偏移量
*@param : data : 將要向寄存器寫入的數(shù)據(jù)
*@retval : none
*****************************************************************************/
void W5500_Write2Byte_common(uint16_t offest,uint16_t data)
{
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((uint8_t) (COMMON_R|RWB_WRITE|VDM)); /*發(fā)送控制字節(jié)*/
SPI1_Send_Byte((uint8_t)(data/256)); /*發(fā)送高8位數(shù)據(jù)*/
SPI1_Send_Byte((uint8_t)(data%256)); /*發(fā)送低8位數(shù)據(jù)*/
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
}
/*****************************************************************************
*@brief : 向W5500公共寄存器寫N個(gè)字節(jié)數(shù)據(jù)
*@param : offest: 是基于公共寄存器基地址的偏移量
*@param : addr : 將要向寄存器寫入的數(shù)據(jù)的地址
*@param : size : 將要向寄存器寫入的數(shù)據(jù)字節(jié)數(shù)
*@retval : none
*****************************************************************************/
void W5500_WriteNByte_common(uint16_t offest,uint8_t *addr,uint8_t size)
{
uint8_t i;
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((uint8_t) (COMMON_R|RWB_WRITE|VDM)); /*發(fā)送控制字節(jié)*/
for(i=0;i<size;i++) /*發(fā)送數(shù)據(jù)*/
{
SPI1_Send_Byte(*addr++);
}
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
}
/*****************************************************************************
*@brief : 讀W5500 common寄存器 1個(gè)字節(jié)數(shù)據(jù)
*@param : offest: 是基于公共寄存器基地址的偏移量
*@retval : 一個(gè)字節(jié)的數(shù)據(jù)
*****************************************************************************/
uint8_t W5500_Read1Byte_common(uint16_t offest)
{
uint8_t i;
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte(COMMON_R|RWB_READ|VDM); /*發(fā)送控制字節(jié)*/
i=SPI1_Read_Byte(); /*接收數(shù)據(jù)*/
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
return i;
}
/*****************************************************************************
*@brief : 讀W5500 common寄存器 2個(gè)字節(jié)數(shù)據(jù)
*@param : offest: 是基于公共寄存器基地址的偏移量
*@retval : 一個(gè)字節(jié)的數(shù)據(jù)
*****************************************************************************/
uint16_t W5500_Read2Byte_common(uint16_t offest)
{
uint16_t i;
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte(COMMON_R|RWB_READ|VDM); /*發(fā)送控制字節(jié)*/
i=SPI1_Read_Byte(); /*接收數(shù)據(jù)*/
i*=256;
i|=SPI1_Read_Byte();
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
return i;
}
/*****************************************************************************
*@brief : 向W5500 socket_n 寄存器寫1個(gè)字節(jié)數(shù)據(jù)
*@param : n : 選擇socket_n寄存器,取值范圍0—7
*@param : offest: 是基于socket_n寄存器基地址的偏移量
*@param : data : 將要向寄存器寫入的數(shù)據(jù)
*@retval : none
*****************************************************************************/
void W5500_Write1Byte_socket_n(uint8_t n,uint16_t offest,uint8_t data)
{
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((uint8_t) (n*0x20+0x08|RWB_WRITE|VDM));/*發(fā)送控制字節(jié)*/
SPI1_Send_Byte(data); /*發(fā)送8位數(shù)據(jù)*/
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
}
/*****************************************************************************
*@brief : 向W5500 socket_n 寄存器寫2個(gè)字節(jié)數(shù)據(jù)
*@param : n : 選擇socket_n寄存器,取值范圍0—7
*@param : offest: 是基于socket_n寄存器基地址的偏移量
*@param : data : 將要向寄存器寫入的數(shù)據(jù)
*@retval : none
*****************************************************************************/
void W5500_Write2Byte_socket_n(uint8_t n,uint16_t offest,uint16_t data)
{
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((uint8_t) (n*0x20+0x08|RWB_WRITE|VDM));/*發(fā)送控制字節(jié)*/
SPI1_Send_Byte((uint8_t)(data/256)); /*發(fā)送高8位數(shù)據(jù)*/
SPI1_Send_Byte((uint8_t)(data%256)); /*發(fā)送低8位數(shù)據(jù)*/
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
}
/*****************************************************************************
*@brief : 向W5500 socket_n 寄存器寫N個(gè)字節(jié)數(shù)據(jù)
*@param : n : 選擇socket_n寄存器,取值范圍0—7
*@param : offest: 是基于socket_n寄存器基地址的偏移量
*@param : addr : 寫入數(shù)據(jù)的地址
*@param : size : 寫入的數(shù)據(jù)字節(jié)數(shù)
*@retval : none
*****************************************************************************/
void W5500_WriteNByte_socket_n(uint8_t n,uint16_t offest,uint8_t* addr,uint8_t size)
{
uint8_t i;
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((uint8_t) (n*0x20+0x08|RWB_WRITE|VDM));/*發(fā)送控制字節(jié)*/
for(i=0;i<size;i++) /*發(fā)送數(shù)據(jù)*/
{
SPI1_Send_Byte(*addr);
addr++;
}
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
}
/*****************************************************************************
*@brief : 讀socket_n寄存器 1個(gè)字節(jié)數(shù)據(jù)
*@param : n : 選擇socket,取值0-7
*@param : offest: 是基于公共寄存器基地址的偏移量
*@retval : 一個(gè)字節(jié)的數(shù)據(jù)
*****************************************************************************/
uint8_t W5500_Read1Byte_socket_n(uint8_t n,uint16_t offest)
{
uint8_t i;
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((n*0x20+0x08)|RWB_READ|VDM); /*發(fā)送控制字節(jié)*/
i=SPI1_Read_Byte(); /*接收數(shù)據(jù)*/
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
return i;
}
/*****************************************************************************
*@brief : 讀socket_n寄存器 2個(gè)字節(jié)數(shù)據(jù)
*@param : n : 選擇socket,取值0-7
*@param : offest: 是基于公共寄存器基地址的偏移量
*@retval : 兩個(gè)字節(jié)的數(shù)據(jù)
*****************************************************************************/
uint16_t W5500_Read2Byte_socket_n(uint8_t n,uint16_t offest)
{
uint16_t i;
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((n*0x20+0x08)|RWB_READ|VDM); /*發(fā)送控制字節(jié)*/
i=SPI1_Read_Byte(); /*接收數(shù)據(jù)*/
i*=256;
i|=SPI1_Read_Byte();
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
return i;
}
/*****************************************************************************
*@brief : 讀socket_n寄存器 n個(gè)字節(jié)數(shù)據(jù)
*@param : n : 選擇socket,取值0-7
*@param : offest: 是基于公共寄存器基地址的偏移量
*@param : addr : 讀取到的數(shù)據(jù)保存的地址
*@param : size : 讀取的字節(jié)數(shù)
*@retval : 一個(gè)字節(jié)的數(shù)據(jù)
*****************************************************************************/
void W5500_ReadNByte_socket_n(uint8_t n,uint16_t offest,uint8_t* addr,uint8_t size)
{
uint8_t i;
W5500_CS_Low(); /*CS片選置底,開始SPI通訊*/
SPI1_Send_Short(offest); /*發(fā)送16位地址*/
SPI1_Send_Byte((n*0x20+0x08)|RWB_READ|VDM); /*發(fā)送控制字節(jié)*/
for(i=0;i<size;i++) /*接收數(shù)據(jù)*/
{
*addr=SPI1_Read_Byte();
addr++;
}
W5500_CS_High(); /*片選拉高,關(guān)閉SPI通訊*/
}
/*****************************************************************************
*@brief : W5500軟件復(fù)位
*@param :
*@retval : none
*****************************************************************************/
static void W5500_Soft_Reset()
{
W5500_Write1Byte_common(MR,RST);
delay_ms(5);
}
void W5500_Init()
{
SPI_Config();
W5500_GPIO_Config();
W5500_INT_GPIO_Config();
W5500_HardWare_Reset();
W5500_Soft_Reset();
}
復(fù)制代碼
所有資料51hei提供下載:
W5500代碼及英文數(shù)據(jù)手冊(cè).7z
(1.46 MB, 下載次數(shù): 221)
2019-7-27 00:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
jemery1030
時(shí)間:
2019-8-19 22:03
測(cè)試可用
非常感謝
作者:
wdliming
時(shí)間:
2019-11-22 20:49
謝謝分享
作者:
NJGWNZ
時(shí)間:
2019-12-13 09:06
正在學(xué)習(xí),非常謝謝
作者:
ruaaa
時(shí)間:
2020-4-25 14:14
感謝大佬
作者:
dcc024
時(shí)間:
2024-4-17 14:49
感謝,正好我調(diào)不通SPI2
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品久久久久久久成人午夜
|
91午夜精品亚洲一区二区三区
|
欧美一区二区三
|
www.欧美精品
|
免费看黄色小视频
|
欧美福利在线
|
国产精品视频专区
|
啪啪综合网
|
色婷婷av一区二区三区之e本道
|
日韩精品久久久久久免费
|
手机在线看片1024
|
99视频
|
麻豆av在线免费观看
|
午夜成人免费视频
|
一区视频
|
国产精选av
|
亚洲精品乱码久久久久久动漫
|
青青国产视频
|
欧美日韩成人一区二区三区
|
老司机精品福利视频
|
av在线免费观看网站
|
97人人看
|
www.狠狠操
|
av片在线观看
|
欧美一区二区三区不卡
|
久久久久久久影院
|
国产日韩欧美综合
|
五月综合色
|
日韩欧美视频一区
|
一级看片免费视频
|
国产福利在线观看
|
日韩av免费播放
|
激情综合网五月
|
美女黄色免费网站
|
天天爱天天色
|
亚洲一级特黄
|
色综合天天综合网国产成人网
|
九九综合网
|
天天视频黄
|
国产日韩精品视频
|
国产精品久久久久久久
|