#include #include #include #include #include "main.h" #include "usart.h" #define READ_CMD 0x80 #define SPI_TIMEOUT_VALUE 1000 #define SPI_CS_1() HAL_GPIO_WritePin(SPI_SEL_GPIO_Port, SPI_SEL_Pin, GPIO_PIN_SET) /* */ #define SPI_CS_0() HAL_GPIO_WritePin(SPI_SEL_GPIO_Port, SPI_SEL_Pin, GPIO_PIN_RESET) /* */ #define SPI_SCK_1() HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_SET) /* SCK = 1 */ #define SPI_SCK_0() HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_RESET) /* SCK = 0 */ #define SPI_MOSI_1() HAL_GPIO_WritePin(MOSI_GPIO_Port, MOSI_Pin, GPIO_PIN_SET) /* MOSI = 1 */ #define SPI_MOSI_0() HAL_GPIO_WritePin(MOSI_GPIO_Port, MOSI_Pin, GPIO_PIN_RESET) /* MOSI = 0 */ #define SPI_READ_MISO() GPIO_ReadInputDataBit(MISO_GPIO_Port, MISO_Pin) /* 读MISO口线状态 */ #define Dummy_Byte 0xFF // 读取时MISO发送的数据,可以为任意数据 // SPI可以同时读取和写入数据,因此一个函数即可满足要求 uint8_t SPI_ReadWriteByte(uint8_t txData) { uint8_t i; uint8_t rxData = 0; for (i = 0; i < 8; i++) { SPI_SCK_0(); delay_us(1); // 数据发送 if (txData & 0x80) { SPI_MOSI_1(); } else { SPI_MOSI_0(); } txData <<= 1; delay_us(1); SPI_SCK_1(); delay_us(1); // 数据接收 rxData <<= 1; if (SPI_READ_MISO()) { rxData |= 0x01; } delay_us(1); } SPI_SCK_0(); return rxData; } // uint8_t SPI_ReadByte(void) // { // return SPI_ReadWriteByte(Dummy_Byte); // } // void SPI_WriteByte(uint8_t txData) // { // (void)SPI_ReadWriteByte(txData); // } void user_main() { uint8_t temp; SPI_CS_Disable(); while (1) { // HAL_UART_Transmit(&huart1, &temp, 1, 100); HAL_Delay(100); } }