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.
95 lines
2.2 KiB
95 lines
2.2 KiB
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "main.h"
|
|
#include "usart.h"
|
|
#include "tim.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() HAL_GPIO_ReadPin(MISO_GPIO_Port, MISO_Pin) /* 读MISO口线状态 */
|
|
|
|
#define Dummy_Byte 0xFF // 读取时MISO发送的数据,可以为任意数据
|
|
|
|
void 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)
|
|
{
|
|
uint8_t i;
|
|
uint8_t rxData = 0;
|
|
|
|
SPI_CS_0();
|
|
|
|
// for (i = 0; i < 8; i++)
|
|
// {
|
|
// SPI_SCK_0();
|
|
// sys_delay_us(1);
|
|
// // 数据发送
|
|
// if (txData & 0x80)
|
|
// {
|
|
// SPI_MOSI_1();
|
|
// }
|
|
// else
|
|
// {
|
|
// SPI_MOSI_0();
|
|
// }
|
|
// txData <<= 1;
|
|
// sys_delay_us(1);
|
|
|
|
// SPI_SCK_1();
|
|
// sys_delay_us(1);
|
|
// // 数据接收
|
|
// rxData <<= 1;
|
|
// if (SPI_READ_MISO())
|
|
// {
|
|
// rxData |= 0x01;
|
|
// }
|
|
// sys_delay_us(1);
|
|
// }
|
|
// SPI_SCK_0();
|
|
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()
|
|
{
|
|
uint8_t temp;
|
|
|
|
SPI_CS_1();
|
|
|
|
while (1)
|
|
{
|
|
temp = SPI_ReadWriteByte(0x86);
|
|
HAL_UART_Transmit(&huart1, &temp, 1, 100);
|
|
HAL_Delay(100);
|
|
}
|
|
}
|