1143|2

3243

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

硬件SPI驱动W5500的问题 [复制链接]

搞了好长时间,一直没搞好。

 

这个SPI接口的W5500模块有例程,STM32F103C8T6,可以正常通信。

我现在用STM32F303ZET6搞。

用的SPI1,PA4,PA5,PA6,PA7.PA4是CS,自己控制,

PA5是SCLK,PA6是MISO,PA7是MOSI。

这部分初始代码为:

void SPI_Configuration(void)
{
	GPIO_InitTypeDef 	GPIO_InitStructure;
	SPI_InitTypeDef   	SPI_InitStructure;	   

  	RCC_APB2PeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_APB2Periph_SPI1 , ENABLE);	
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource5,GPIO_AF_5);
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_5);
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_5);
	/* 3õê¼»ˉSCK¡¢MISO¡¢MOSIòy½Å */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	//GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

	/* 3õê¼»ˉCSòy½Å */
	GPIO_InitStructure.GPIO_Pin = W5500_SCS;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(W5500_SCS_PORT, &GPIO_InitStructure);
	GPIO_SetBits(W5500_SCS_PORT, W5500_SCS);

	/* 3õê¼»ˉÅäÖÃSTM32 SPI1 */
	SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;	//SPIéèÖÃÎaË«ÏßË«Ïòè«Ë«1¤
	SPI_InitStructure.SPI_Mode=SPI_Mode_Master;							//éèÖÃÎaÖ÷SPI
	SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;						//SPI·¢Ëí½óêÕ8λ֡½á11
	SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;							//ê±ÖóDü¿Õμí
	SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;							//êy¾Y2¶»ñóúμú1¸öê±ÖóÑØ
	SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;								//NSSóéía2¿1ü½Å1üàí
	SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;	//2¨ìØÂêÔ¤·ÖÆμÖμÎa2
	SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;					//êy¾Y′«êä′óMSBλ¿aê¼
	SPI_InitStructure.SPI_CRCPolynomial=7;								//CRC¶àÏîê½Îa7
	SPI_Init(SPI1,&SPI_InitStructure);									//¸ù¾YSPI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèSPI1¼Ä′æÆ÷

	SPI_Cmd(SPI1,ENABLE);	//STM32ê1ÄüSPI1
}

基本上照抄103的代码,做了一些修改。

我感觉这里可能有问题。

第二个可能有问题的地方是发送函数

void SPI1_Send_Byte(unsigned char dat)
{
	SPI_I2S_SendData(SPI1,dat);//D′1¸ö×Ö½úêy¾Y
	while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//μè′yêy¾Y¼Ä′æÆ÷¿Õ
}

第三个可能有问题的地方是接收函数

uint8_t SPI_ReceiveData(SPI_TypeDef* SPIx)
{
  /* Check the parameters */
  assert_param(IS_SPI_ALL_PERIPH(SPIx));
  
  /* Return the data in the DR register */
  return SPIx->DR;
}

还有一点,调试的时候,发现老是卡在这一个函数

void W5500_Hardware_Reset(void)
{
	GPIO_ResetBits(W5500_RST_PORT, W5500_RST);//¸′λòy½Åà-μí
	Delay(50);
	GPIO_SetBits(W5500_RST_PORT, W5500_RST);//¸′λòy½Åà-¸ß
	Delay(200);
	while((Read_W5500_1Byte(PHYCFGR)&LINK)==0);//μè′yòÔì«íøᬽóíê3é
}

就是while循环那一句。

后来我跟踪调试,发现

unsigned char Read_W5500_1Byte(unsigned short reg)
{
	 unsigned char i;

	GPIO_ResetBits(W5500_SCS_PORT, W5500_SCS);//ÖÃW5500μÄSCSÎaμíμçƽ
			
	SPI1_Send_Short(reg);//í¨1ySPI1D′16λ¼Ä′æÆ÷μØÖ·
	SPI1_Send_Byte(FDM1|RWB_READ|COMMON_R);//í¨1ySPI1D′¿ØÖÆ×Ö½ú,1¸ö×Ö½úêy¾Y3¤¶è,¶áêy¾Y,Ñ¡Ôñí¨óüÄ′æÆ÷

	i=SPI_ReceiveData(SPI1);
	SPI1_Send_Byte(0x00);//·¢Ëíò»¸öÑÆêy¾Y
	i=SPI_ReceiveData(SPI1);//¶áè¡1¸ö×Ö½úêy¾Y

	GPIO_SetBits(W5500_SCS_PORT, W5500_SCS);//ÖÃW5500μÄSCSÎa¸ßμçƽ
	return i;//·μ»Ø¶áè¡μ½μļÄ′æÆ÷êy¾Y
}

F103读出的i值是0xbf

我调试的时候

本来读出来的是1,可是执行完GPIO_SetBits(W5500_SCS_PORT, W5500_SCS);

就提示not in scope。

从仿真界面看,那两句

i=SPI_ReceiveData(SPI1);似乎执行不到。

请大神指教,谢谢!

此帖出自stm32/stm8论坛

最新回复

好久没看程序了。感觉绕来绕去的循环让我脑子发昏了   详情 回复 发表于 2023-5-19 21:49
点赞 关注
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 

回复
举报

21

帖子

2

TA的资源

一粒金砂(中级)

沙发
 
有点难,要好好研究一下,可能逻辑有问题吧,学习了
此帖出自stm32/stm8论坛
 
 

回复

4856

帖子

3

TA的资源

版主

板凳
 

好久没看程序了。感觉绕来绕去的循环让我脑子发昏了

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表