#ifndef __BSP_SPI_SOFT_H #define __BSP_SPI_SOFT_H #include "stm32f4xx_hal.h" #include "main.h" // #include "sys.h" // #define SCL_GPIO_PORT GPIOB // #define SCL_PIN GPIO_PIN_6 // #define SDA_GPIO_PORT GPIOB // #define SDA_PIN GPIO_PIN_7 typedef enum { SPI_OK = 0x00, //IIC工作正常 SPI_WAIT_ACK_ERR = 0x01, //slave设备返回ACK错误 SPI_WRITE_ERR = 0x02, //向slave设备写入错误 SPI_READ_ERR = 0x04 //从slave设备读取错误 } SPI_STATUS; typedef struct { GPIO_TypeDef *sclk_port; uint16_t sclk_pin; GPIO_TypeDef *mosi_port; uint16_t mosi_pin; GPIO_TypeDef *miso_port; uint16_t miso_pin; GPIO_TypeDef *cs_port; uint16_t cs_pin; uint8_t sda_pin_num; //定义延时,以适应不同器件对速率的不同要求,具体值要在调试中确定 uint8_t addr; //器件地址 uint32_t delaytick; //定义延时,以适应不同器件对速率的不同要求,具体值要在调试中确定 }SPI_SOFT_TypeDef; #define CS_H HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET) #define CS_L HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_RESET) #define SCLK_H HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET) #define SCLK_L HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET) #define SDI_H HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET) #define SDI_L HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET) #define SDO_R HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_1) #define SUCCESS 0 #define FAILURE 1 void SPI_Init(const SPI_SOFT_TypeDef *pSoftSPI); uint8_t WriteReg(uint32_t d); uint8_t ReadReg(uint32_t d); #endif /* 时序 // * @brief: I2C 开始,SCL为高电平的时候SDA产生一个下降沿信号 // _____ // *SDA \_____________ // * __________ // *SCL \________ // // * @brief: I2C 停止,SCL为高电平的时候SDA产生一个上升沿信号 // _______ // *SDA __________/ // * ____________ // *SCL _____/ // * @brief: I2C 响应 // ____ // *SCL ______/ \______ // * ____ _____ // *SDA \_______/ // // * @brief: I2C 不响应 // ____ // *SCL ______/ \______ // * __________________ // *SDA // HAL_I2C_MspDeInit( &hi2c1 ); uint8_t readout[256] = {0}; uint8_t writein[1] = {0xFB}; // SPI_Init( ); // SPI_Write_Test( 0xA0, 0, writein, 1 ); // HAL_Delay( 200 ); // SPI_Read_Test( 0xA0, 0, readout, 1 ); // log_i("iic test %02X .... ", *readout); SPI_SOFT_TypeDef sIIC = { GPIOB, GPIO_PIN_6, GPIOB, GPIO_PIN_7, 7,0xA0,1, }; SPI_Init( &sIIC ); SPI_Write_Test( &sIIC,0xA0, 0, writein, 1 ); HAL_Delay( 200 ); SPI_Read_Test(&sIIC, 0xA0, 0, readout, 1 ); log_i("iic test %02X .... ", *readout); */