不含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/Src/bsp_spi.c

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);
// }