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.
152 lines
5.0 KiB
152 lines
5.0 KiB
2 years ago
|
#include "bsp_spi.h"
|
||
|
#include "elog.h"
|
||
|
// #include "delay.h"
|
||
|
|
||
|
extern SPI_HandleTypeDef hspi5;
|
||
|
SPI_HandleTypeDef *testSPIHandle = &hspi5;
|
||
|
|
||
|
|
||
|
SPI_HELPER_TypeDef * SPI_HELPER_Init( )
|
||
|
{
|
||
|
SPI_HELPER_TypeDef *Handle = (SPI_HELPER_TypeDef *)malloc(sizeof(SPI_HELPER_TypeDef));
|
||
|
if (Handle == NULL)
|
||
|
{
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
Handle->hspi = NULL;
|
||
|
Handle->rx_tx = SPI_WORKMODE_RX_TX;
|
||
|
Handle->trans_mode = SPI_Trans_Polling;
|
||
|
Handle->rcv_mode = SPI_Trans_Polling;
|
||
|
|
||
|
Handle->transferring = 0;
|
||
|
|
||
|
|
||
|
Handle->obj =NULL;
|
||
|
Handle->callback =NULL;
|
||
|
return Handle;
|
||
|
}
|
||
|
|
||
|
|
||
|
int SPI_HELPER_Setup_Trans_mode( SPI_HELPER_TypeDef * spihelper, uint8_t trans_mode )
|
||
|
{
|
||
|
spihelper->trans_mode =trans_mode;
|
||
|
spihelper->rcv_mode =trans_mode;
|
||
|
return 0;
|
||
|
}
|
||
|
int SPI_HELPER_Setup_Rcv_mode( SPI_HELPER_TypeDef * spihelper, uint8_t rcv_mode )
|
||
|
{
|
||
|
spihelper->rcv_mode =rcv_mode;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int SPI_HELPER_Setup_WokMode_RX_TX( SPI_HELPER_TypeDef * spihelper, uint8_t rx_tx )
|
||
|
{
|
||
|
spihelper->rx_tx =rx_tx;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int SPI_HELPER_Set_Rcv_Buf( SPI_HELPER_TypeDef * spihelper, uint8_t * buf, uint16_t size)
|
||
|
{
|
||
|
spihelper->rcv_buf = buf;
|
||
|
spihelper->rcv_size = size;
|
||
|
return 0;
|
||
|
}
|
||
|
int SPI_HELPER_Set_Trans_Buf( SPI_HELPER_TypeDef * spihelper, uint8_t * buf, uint16_t size)
|
||
|
{
|
||
|
spihelper->trans_buf = buf;
|
||
|
spihelper->trans_size = size;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int SPI_HELPER_Set_Callback( SPI_HELPER_TypeDef * spihelper, void *obj, callback_fun func)
|
||
|
{
|
||
|
spihelper->obj = obj;
|
||
|
spihelper->callback = func;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void SPI_Test(void)
|
||
|
{
|
||
|
uint8_t txData[4] = {0x9F, 0x00, 0x00, 0x00};
|
||
|
uint8_t rxData[4] = {0}; //
|
||
|
SPI_TransmitReceive(txData, rxData, 4);
|
||
|
log_i("Manufacturer ID: 0x%02X\n", rxData[1]); // EF
|
||
|
log_i("Memory Type: 0x%02X\n", rxData[2]); // 40
|
||
|
log_i("Capacity: 0x%02X\n", rxData[3]); // 19
|
||
|
}
|
||
|
|
||
|
|
||
|
void SPI_TransmitReceive(uint8_t* txData, uint8_t* rxData, uint16_t size)
|
||
|
{
|
||
|
HAL_GPIO_WritePin(SPI5_CS_GPIO_Port, SPI5_CS_Pin, GPIO_PIN_RESET);
|
||
|
HAL_SPI_TransmitReceive(testSPIHandle, txData, rxData, size, HAL_MAX_DELAY);
|
||
|
HAL_GPIO_WritePin(SPI5_CS_GPIO_Port, SPI5_CS_Pin, GPIO_PIN_SET);
|
||
|
}
|
||
|
|
||
|
// void SPI_Init(const SPI_SOFT_TypeDef *pSoftSPI)
|
||
|
// {
|
||
|
// GPIO_InitTypeDef GPIO_InitStructure;
|
||
|
// __HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟
|
||
|
|
||
|
// // //PB6 SCL PB7初始化设置
|
||
|
// // GPIO_Initure.Pin = pSoftIIC->scl_pin ;
|
||
|
// // GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
|
||
|
// // GPIO_Initure.Pull = GPIO_PULLUP; // 上拉
|
||
|
// // GPIO_Initure.Speed = GPIO_SPEED_FAST; // 快速
|
||
|
// // HAL_GPIO_Init( pSoftIIC->scl_port, &GPIO_Initure );
|
||
|
|
||
|
// // // SDA PB7 初始化设置
|
||
|
// // GPIO_Initure.Pin = pSoftIIC->sda_pin;
|
||
|
// // HAL_GPIO_Init( pSoftIIC->sda_port, &GPIO_Initure );
|
||
|
|
||
|
// // GPIO_WRITE_PIN(pSoftIIC->sda_port, pSoftIIC->sda_pin, 1);
|
||
|
// // GPIO_WRITE_PIN(pSoftIIC->scl_port, pSoftIIC->scl_pin, 1);
|
||
|
|
||
|
|
||
|
// // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
|
||
|
// // GPIO_InitTypeDef GPIO_InitStructure;
|
||
|
// // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //457引脚配置为推挽输出
|
||
|
// // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_7;//457引脚配置为推挽输出
|
||
|
// // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||
|
// // GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||
|
|
||
|
// // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//pin6是MISO,对于STM32来说是输入,配置为上拉输入
|
||
|
// // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//pin6是MISO,对于STM32来说是输入,配置为上拉输入
|
||
|
// // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||
|
// // GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||
|
|
||
|
// // //CS引脚初始化
|
||
|
// GPIO_InitStructure.Pin = pSoftSPI->cs_pin;
|
||
|
// GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP ; //推挽输出
|
||
|
// GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
|
||
|
// HAL_GPIO_Init(pSoftSPI->cs_port, &GPIO_InitStructure);
|
||
|
|
||
|
// //SCK和MOSI引脚初始化
|
||
|
// GPIO_InitStructure.Pin = pSoftSPI->sclk_pin ;
|
||
|
// GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP ; //推挽输出
|
||
|
// GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
||
|
// HAL_GPIO_Init(pSoftSPI->sclk_port, &GPIO_InitStructure);
|
||
|
|
||
|
|
||
|
// //MISO引脚初始化
|
||
|
// GPIO_InitStructure.Pin = pSoftSPI->miso_pin;
|
||
|
// // GPIO_InitStructure.Mode = GPIO_Mode_IPU ; //浮空输入
|
||
|
// GPIO_InitStructure.Mode = GPIO_MODE_INPUT ; //浮空输入
|
||
|
// GPIO_InitStructure.Pull = GPIO_PULLUP;
|
||
|
// HAL_GPIO_Init(pSoftSPI->miso_pin, &GPIO_InitStructure);
|
||
|
|
||
|
// // MOSI引脚初始化
|
||
|
// GPIO_InitStructure.Pin = pSoftSPI->mosi_pin;
|
||
|
// GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP ; //推挽输出
|
||
|
// GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
||
|
// HAL_GPIO_Init(pSoftSPI->mosi_port, &GPIO_InitStructure);
|
||
|
|
||
|
// // 初始化
|
||
|
// HAL_GPIO_WritePin(pSoftSPI->mosi_port, pSoftSPI->mosi_pin, GPIO_PIN_RESET);
|
||
|
// HAL_GPIO_WritePin(pSoftSPI->cs_port, pSoftSPI->cs_pin, GPIO_PIN_SET);
|
||
|
// HAL_GPIO_WritePin(pSoftSPI->mosi_port, pSoftSPI->mosi_pin, GPIO_PIN_SET);
|
||
|
// }
|
||
|
|
||
|
|