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.
115 lines
3.1 KiB
115 lines
3.1 KiB
#include "spi10.h"
|
|
|
|
|
|
void SPI10_Initialization(uint32_t speed, SPI10_MODE mode, bool lsbFirst)
|
|
{
|
|
USART1n_CFG_Type USART1n_Config;
|
|
/*
|
|
* Initialize USART10
|
|
*/
|
|
HAL_GPIO_ConfigOutput( ( Pn_Type* )PB, 0, ALTERN_FUNC );
|
|
HAL_GPIO_ConfigFunction( ( Pn_Type* )PB, 0, AFSRx_AF2 );
|
|
|
|
HAL_GPIO_ConfigOutput( ( Pn_Type* )PB, 1, ALTERN_FUNC );
|
|
HAL_GPIO_ConfigFunction( ( Pn_Type* )PB, 1, AFSRx_AF2 );
|
|
|
|
HAL_GPIO_ConfigOutput( ( Pn_Type* )PB, 2, ALTERN_FUNC );
|
|
HAL_GPIO_ConfigFunction( ( Pn_Type* )PB, 2, AFSRx_AF2 );
|
|
|
|
|
|
|
|
|
|
HAL_GPIO_ConfigOutput((Pn_Type*)SPI10_CS_PORT, SPI10_CS_PIN, PUSH_PULL_OUTPUT );
|
|
HAL_GPIO_ConfigPullup((Pn_Type*)SPI10_CS_PORT, SPI10_CS_PIN, PUPDx_EnablePU );
|
|
|
|
SPI10_CS_HIGH;
|
|
|
|
|
|
|
|
// 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 SPI10_MODE0:
|
|
USART1n_Config.ACK = USART1n_SPI_TX_RISING;
|
|
USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SAMPLE;
|
|
break;
|
|
case SPI10_MODE1:
|
|
USART1n_Config.ACK = USART1n_SPI_TX_RISING;
|
|
USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SETUP;
|
|
break;
|
|
case SPI10_MODE2:
|
|
USART1n_Config.ACK = USART1n_SPI_TX_FALLING;
|
|
USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SAMPLE;
|
|
break;
|
|
case SPI10_MODE3:
|
|
USART1n_Config.ACK = USART1n_SPI_TX_FALLING;
|
|
USART1n_Config.Edge = USART1n_SPI_TX_LEADEDGE_SETUP;
|
|
break;
|
|
}
|
|
|
|
HAL_USART_Init( ( USART1n_Type* )USART10, &USART1n_Config );
|
|
|
|
// SPI Master
|
|
HAL_USART_DataControlConfig( ( USART1n_Type* )USART10, USART1n_CONTROL_MASTER, ENABLE );
|
|
|
|
// ENABLE
|
|
HAL_USART_Enable( ( USART1n_Type* )USART10, ENABLE );
|
|
}
|
|
|
|
|
|
|
|
|
|
void SPI10_Transmit(uint8_t* pTxData, uint32_t Tx_Len)
|
|
{
|
|
|
|
uint32_t i;
|
|
|
|
for(i = 0 ; i < Tx_Len ; i++)
|
|
{
|
|
USART10->DR = pTxData[i];
|
|
while((USART10->ST & 0x40)==0x00){} // transmit complete flag wait
|
|
while((USART10->ST & 0x20)==0x00){} // receive complete flag wait
|
|
uint8_t temp = USART10->DR;
|
|
}
|
|
}
|
|
|
|
void SPI10_SendRecv(uint8_t* pTxByte, uint8_t* pRxByte, uint32_t TRx_Len)
|
|
{
|
|
uint32_t i;
|
|
|
|
for(i = 0 ; i < TRx_Len ; i++)
|
|
{
|
|
USART10->DR = pTxByte[i];
|
|
while((USART10->ST & 0x40)==0x00){} // transmit complete flag wait
|
|
while((USART10->ST & 0x20)==0x00){} // receive complete flag wait
|
|
pRxByte[i] = USART10->DR;
|
|
}
|
|
}
|
|
|
|
uint8_t SPI10_SendReceiveByte(uint8_t SendByte)
|
|
{
|
|
uint8_t recvByte;
|
|
|
|
USART10->DR = SendByte;
|
|
while((USART10->ST & 0x40)==0x00){} // transmit complete flag wait
|
|
while((USART10->ST & 0x20)==0x00){} // receive complete flag wait
|
|
|
|
recvByte = USART10->DR;
|
|
|
|
return recvByte;
|
|
}
|
|
|