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.
108 lines
3.0 KiB
108 lines
3.0 KiB
#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;
|
|
}
|
|
|