|
|
@ -4,6 +4,7 @@ |
|
|
|
#include <string.h> |
|
|
|
#include "main.h" |
|
|
|
#include "usart.h" |
|
|
|
#include "tim.h" |
|
|
|
|
|
|
|
#define READ_CMD 0x80 |
|
|
|
#define SPI_TIMEOUT_VALUE 1000 |
|
|
@ -17,6 +18,16 @@ |
|
|
|
|
|
|
|
#define Dummy_Byte 0xFF // 读取时MISO发送的数据,可以为任意数据 |
|
|
|
|
|
|
|
void sys_sys_delay_us(uint32_t us) { |
|
|
|
uint16_t counter = 0; |
|
|
|
__HAL_TIM_SET_COUNTER(&htim7, 0); |
|
|
|
HAL_TIM_Base_Start(&htim7); |
|
|
|
while (counter < us) { |
|
|
|
counter = __HAL_TIM_GET_COUNTER(&htim7); |
|
|
|
} |
|
|
|
HAL_TIM_Base_Stop(&htim7); |
|
|
|
} |
|
|
|
|
|
|
|
// SPI可以同时读取和写入数据,因此一个函数即可满足要求 |
|
|
|
uint8_t SPI_ReadWriteByte(uint8_t txData) |
|
|
|
{ |
|
|
@ -26,7 +37,7 @@ uint8_t SPI_ReadWriteByte(uint8_t txData) |
|
|
|
for (i = 0; i < 8; i++) |
|
|
|
{ |
|
|
|
SPI_SCK_0(); |
|
|
|
delay_us(1); |
|
|
|
sys_delay_us(1); |
|
|
|
// 数据发送 |
|
|
|
if (txData & 0x80) |
|
|
|
{ |
|
|
@ -37,17 +48,17 @@ uint8_t SPI_ReadWriteByte(uint8_t txData) |
|
|
|
SPI_MOSI_0(); |
|
|
|
} |
|
|
|
txData <<= 1; |
|
|
|
delay_us(1); |
|
|
|
sys_delay_us(1); |
|
|
|
|
|
|
|
SPI_SCK_1(); |
|
|
|
delay_us(1); |
|
|
|
sys_delay_us(1); |
|
|
|
// 数据接收 |
|
|
|
rxData <<= 1; |
|
|
|
if (SPI_READ_MISO()) |
|
|
|
{ |
|
|
|
rxData |= 0x01; |
|
|
|
} |
|
|
|
delay_us(1); |
|
|
|
sys_delay_us(1); |
|
|
|
} |
|
|
|
SPI_SCK_0(); |
|
|
|
|
|
|
|