#include "spi13.h" void SPI13_Initialization(uint32_t speed, SPI13_MODE mode, bool lsbFirst) { USART1n_CFG_Type USART1n_Config; /* * Initialize USART13 */ // MOSI HAL_GPIO_ConfigOutput( ( Pn_Type* )PE, 8, ALTERN_FUNC ); HAL_GPIO_ConfigFunction( ( Pn_Type* )PE, 8, AFSRx_AF2 ); // MISO //HAL_GPIO_ConfigOutput( ( Pn_Type* )PB, 1, ALTERN_FUNC ); //HAL_GPIO_ConfigFunction( ( Pn_Type* )PB, 1, AFSRx_AF2 ); // SCK HAL_GPIO_ConfigOutput( ( Pn_Type* )PE, 10, ALTERN_FUNC ); HAL_GPIO_ConfigFunction( ( Pn_Type* )PE, 10, AFSRx_AF2 ); // default: 38400-8-N-1 HAL_USART_SPI_Mode_Config( &USART1n_Config ); USART1n_Config.Mode = USART1n_SPI_MODE; USART1n_Config.Baudrate = speed; USART1n_Config.Databits = USART1n_DATA_BIT_8; USART1n_Config.Parity = USART1n_PARITY_BIT_NONE; USART1n_Config.Stopbits = USART1n_STOP_BIT_1; if(lsbFirst == true) USART1n_Config.Order = USART1n_SPI_LSB; else USART1n_Config.Order = USART1n_SPI_MSB; switch(mode) { case SPI13_MODE0: USART1n_Config.ACK = USART1n_SPI_TX_RISING; USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SAMPLE; break; case SPI13_MODE1: USART1n_Config.ACK = USART1n_SPI_TX_RISING; USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SETUP; break; case SPI13_MODE2: USART1n_Config.ACK = USART1n_SPI_TX_FALLING; USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SAMPLE; break; case SPI13_MODE3: USART1n_Config.ACK = USART1n_SPI_TX_FALLING; USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SETUP; break; } HAL_USART_Init( ( USART1n_Type* )USART13, &USART1n_Config ); // SPI Master HAL_USART_DataControlConfig( ( USART1n_Type* )USART13, USART1n_CONTROL_MASTER, ENABLE ); // ENABLE HAL_USART_Enable( ( USART1n_Type* )USART13, ENABLE ); } void SPI13_Transmit(uint8_t* pTxData, uint32_t Tx_Len) { uint32_t i; for(i = 0 ; i < Tx_Len ; i++) { USART13->DR = pTxData[i]; while((USART13->ST & 0x40)==0x00){} // transmit complete flag wait while((USART13->ST & 0x20)==0x00){} // receive complete flag wait uint8_t temp = USART13->DR; } } void SPI13_SendRecv(uint8_t* pTxByte, uint8_t* pRxByte, uint32_t TRx_Len) { uint32_t i; for(i = 0 ; i < TRx_Len ; i++) { USART13->DR = pTxByte[i]; while((USART13->ST & 0x40)==0x00){} // transmit complete flag wait while((USART13->ST & 0x20)==0x00){} // receive complete flag wait pRxByte[i] = USART13->DR; } } uint8_t SPI13_SendReceiveByte(uint8_t SendByte) { uint8_t recvByte; USART13->DR = SendByte; while((USART13->ST & 0x40)==0x00){} // transmit complete flag wait while((USART13->ST & 0x20)==0x00){} // receive complete flag wait recvByte = USART13->DR; return recvByte; }