调试遇到的问题
基本源码过来以后就是需要改一下SPI配置: HAL库的初始化配置完成以后没有使能。
hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 7; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); }另外一个就是 读写函数,大家可以看到我不用HAL库了,浪费了我一天的时间。大家赶紧脱坑
uint8 SR; __HAL_SPI_ENABLE(&hspi1); while (__HAL_SPI_GET_FLAG(&hspi1, SPI_FLAG_TXE) == RESET); hspi1.Instance->DR = byte; // HAL_SPI_Transmit(&hspi1, &byte,1,0); while (__HAL_SPI_GET_FLAG(&hspi1, SPI_FLAG_RXNE) == RESET); SR = hspi1.Instance->DR; // HAL_SPI_Receive(&hspi1,&SR,1,0); return SR;修改代码以后,SPI 通讯正常,ping 成功。
HAL库的读写函数比较复杂,之前调试W25Q128的时候,发现DMA发送接收函数都有BUG,然后用了普通的函数,到W5500的时候,本以为能正常,结果耗费很多时间。