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