不含stm32 底层的代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
MyStm32Code/bsp/Inc/bsp_spi_soft.h

115 lines
2.9 KiB

#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);
*/