|
|
@ -18,21 +18,24 @@ |
|
|
|
|
|
|
|
#define Dummy_Byte 0xFF // 读取时MISO发送的数据,可以为任意数据 |
|
|
|
|
|
|
|
#define delay_us 5 |
|
|
|
#define spi_delay_us 5 |
|
|
|
#define spi_table_type_size 50 |
|
|
|
|
|
|
|
// 50us |
|
|
|
// |
|
|
|
// CS 11000 |
|
|
|
// SCK |
|
|
|
// MOSI |
|
|
|
// |
|
|
|
// |
|
|
|
|
|
|
|
// uint8_t table[3][52] = { |
|
|
|
// {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, |
|
|
|
// {1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, |
|
|
|
// {1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, |
|
|
|
// }; |
|
|
|
typedef enum |
|
|
|
{ |
|
|
|
SPI_SEL_TYPE = 0, |
|
|
|
SPI_SCK_TYPE, |
|
|
|
SPI_MOSI_TYPE, |
|
|
|
SPI_MISO_TYPE, |
|
|
|
SPI_TYPE_NUMBER, |
|
|
|
} SPI_TYPE; |
|
|
|
|
|
|
|
uint8_t table[SPI_TYPE_NUMBER][spi_table_type_size] = { |
|
|
|
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, // sel |
|
|
|
{1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // sck |
|
|
|
{1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, // mosi |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // miso |
|
|
|
}; |
|
|
|
|
|
|
|
void sys_delay_us(uint32_t us) |
|
|
|
{ |
|
|
@ -45,83 +48,17 @@ void sys_delay_us(uint32_t us) |
|
|
|
} |
|
|
|
HAL_TIM_Base_Stop(&htim7); |
|
|
|
} |
|
|
|
// void dotable() |
|
|
|
// { |
|
|
|
// for (size_t i = 0; i < 52; i++) |
|
|
|
// { |
|
|
|
|
|
|
|
// table[0][i] ? SPI_CS_1() : SPI_CS_0(); |
|
|
|
// table[1][i] ? SPI_SCK_1() : SPI_SCK_0(); |
|
|
|
// table[2][i] ? SPI_MOSI_1() : SPI_MOSI_0(); |
|
|
|
// sys_delay_us(5); |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
// SPI可以同时读取和写入数据,因此一个函数即可满足要求 |
|
|
|
uint8_t SPI_ReadWriteByte(uint8_t txData) |
|
|
|
void dotable() |
|
|
|
{ |
|
|
|
uint8_t i; |
|
|
|
uint8_t rxData = 0; |
|
|
|
|
|
|
|
SPI_CS_0(); |
|
|
|
sys_delay_us(delay_us); // symbol tsw |
|
|
|
SPI_SCK_0(); |
|
|
|
sys_delay_us(delay_us + 3); |
|
|
|
|
|
|
|
for (i = 0; i < 8; i++) |
|
|
|
for (size_t i = 0; i < spi_table_type_size; i++) |
|
|
|
{ |
|
|
|
SPI_SCK_1(); |
|
|
|
sys_delay_us(1); |
|
|
|
// 数据发送 |
|
|
|
if (txData & 0x80) |
|
|
|
{ |
|
|
|
SPI_MOSI_1(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
SPI_MOSI_0(); |
|
|
|
} |
|
|
|
txData <<= 1; |
|
|
|
sys_delay_us(delay_us); |
|
|
|
|
|
|
|
SPI_SCK_0(); |
|
|
|
sys_delay_us(delay_us); |
|
|
|
// 数据接收 |
|
|
|
// rxData <<= 1; |
|
|
|
// if (SPI_READ_MISO()) |
|
|
|
// { |
|
|
|
// rxData |= 0x01; |
|
|
|
// } |
|
|
|
sys_delay_us(delay_us); |
|
|
|
} |
|
|
|
|
|
|
|
for (i = 0; i < 8; i++) |
|
|
|
{ |
|
|
|
SPI_SCK_1(); |
|
|
|
sys_delay_us(delay_us); |
|
|
|
sys_delay_us(delay_us); |
|
|
|
SPI_SCK_0(); |
|
|
|
sys_delay_us(delay_us); |
|
|
|
sys_delay_us(delay_us); |
|
|
|
table[0][i] ? SPI_CS_1() : SPI_CS_0(); |
|
|
|
table[1][i] ? SPI_SCK_1() : SPI_SCK_0(); |
|
|
|
table[2][i] ? SPI_MOSI_1() : SPI_MOSI_0(); |
|
|
|
sys_delay_us(spi_delay_us); |
|
|
|
} |
|
|
|
|
|
|
|
SPI_SCK_1(); |
|
|
|
SPI_MOSI_1(); // 数据线空闲高电平 |
|
|
|
sys_delay_us(delay_us); // symbol thi |
|
|
|
sys_delay_us(delay_us); // symbol tsw |
|
|
|
SPI_CS_1(); |
|
|
|
|
|
|
|
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() |
|
|
@ -134,8 +71,7 @@ void user_main() |
|
|
|
|
|
|
|
while (1) |
|
|
|
{ |
|
|
|
// dotable(); |
|
|
|
SPI_ReadWriteByte(0x86); |
|
|
|
dotable(); |
|
|
|
// HAL_UART_Transmit(&huart1, &temp, 1, 100); |
|
|
|
HAL_Delay(10); |
|
|
|
} |
|
|
|