Skyward boardcore
Loading...
Searching...
No Matches
Boardcore::SPIBus Class Reference

Driver for STM32 low level SPI peripheral. More...

#include <SPIBus.h>

Inheritance diagram for Boardcore::SPIBus:
Collaboration diagram for Boardcore::SPIBus:

Public Member Functions

 SPIBus (SPIType *spi)
 Delete copy/move contructors/operators.
 
 SPIBus (const SPIBus &)=delete
 
SPIBusoperator= (const SPIBus &)=delete
 
 SPIBus (SPIBus &&)=delete
 
SPIBusoperator= (SPIBus &&)=delete
 
SPITypegetSpi ()
 Retrieve the pointer to the peripheral currently used.
 
void reset ()
 Resets the peripheral configuration.
 
void enable ()
 Enables the peripheral.
 
void disable ()
 Disables the peripheral.
 
void set8BitFrameFormat ()
 
void enableSoftwareSlaveManagement ()
 
void disableSoftwareSlaveManagement ()
 
void enableInternalSlaveSelection ()
 
void disableInternalSlaveSelection ()
 
void setBitOrder (SPI::Order bitOrder)
 
void setClockDiver (SPI::ClockDivider divider)
 
void setSlaveConfiguration ()
 
void setMasterConfiguration ()
 
void setMode (SPI::Mode mode)
 
void enableTxDMARequest ()
 
void disableTxDMARequest ()
 
void enableRxDMARequest ()
 
void disableRxDMARequest ()
 
void waitPeripheral ()
 
void flushRxBuffer ()
 
void configure (SPIBusConfig newConfig) override
 Configures and enables the bus with the provided configuration.
 
void select (GpioType cs) override
 See SPIBusInterface::select().
 
void deselect (GpioType cs) override
 See SPIBusInterface::deselect().
 
uint8_t read () override
 Reads 8 bits from the bus.
 
uint16_t read16 () override
 Reads 16 bits from the bus.
 
uint32_t read24 () override
 Reads 24 bits from the bus.
 
uint32_t read32 () override
 Reads 32 bits from the bus.
 
void read (uint8_t *data, size_t size) override
 Reads multiple bytes from the bus.
 
void read16 (uint16_t *data, size_t size) override
 Reads multiple half words from the bus.
 
void write (uint8_t data) override
 Writes 8 bits to the bus.
 
void write16 (uint16_t data) override
 Writes 16 bits to the bus.
 
void write24 (uint32_t data) override
 Writes 24 bits to the bus.
 
void write32 (uint32_t data) override
 Writes 32 bits to the bus.
 
void write (const uint8_t *data, size_t size) override
 Writes multiple bytes to the bus.
 
void write16 (const uint16_t *data, size_t size) override
 Writes multiple half words to the bus.
 
uint8_t transfer (uint8_t data) override
 Full duplex transmission of 8 bits on the bus.
 
uint16_t transfer16 (uint16_t data) override
 Full duplex transmission of 16 bits on the bus.
 
uint32_t transfer24 (uint32_t data) override
 Full duplex transmission of 24 bits on the bus.
 
uint32_t transfer32 (uint32_t data) override
 Full duplex transmission of 32 bits on the bus.
 
void transfer (uint8_t *data, size_t size) override
 Full duplex transmission of multiple bytes on the bus.
 
void transfer16 (uint16_t *data, size_t size) override
 Full duplex transmission of multiple half words on the bus.
 
- Public Member Functions inherited from Boardcore::SPIBusInterface
 SPIBusInterface ()
 Delete copy/move constructors/operators.
 
 SPIBusInterface (const SPIBusInterface &)=delete
 
SPIBusInterfaceoperator= (const SPIBusInterface &)=delete
 
 SPIBusInterface (SPIBusInterface &&)=delete
 
SPIBusInterfaceoperator= (SPIBusInterface &&)=delete
 

Detailed Description

Driver for STM32 low level SPI peripheral.

This driver applies to the whole STM32F4xx family.

The serial peripheral interface (SPI) allows half/full-duplex, synchronous, serial communication with external devices. The interface can be configured as the master and in this case it provides the communication clock (SCK) to the external slave device. The peripheral is also capable of reliable communication using CRC checking.

Supported SPI main features:

  • Full-duplex synchronous transfers on three lines
  • 8 or 16-bit transfer frame formats
  • Master operation
  • 8 master mode baud rate prescaler values (f_PCLK/2 max.)
  • Programmable clock polarity and phase
  • Programmable data order (MSBit-first or LSBit-first)

Definition at line 60 of file SPIBus.h.

Constructor & Destructor Documentation

◆ SPIBus() [1/3]

Boardcore::SPIBus::SPIBus ( SPIType * spi)
inline

Delete copy/move contructors/operators.

Definition at line 301 of file SPIBus.h.

◆ SPIBus() [2/3]

Boardcore::SPIBus::SPIBus ( const SPIBus & )
delete

◆ SPIBus() [3/3]

Boardcore::SPIBus::SPIBus ( SPIBus && )
delete

Member Function Documentation

◆ configure()

void Boardcore::SPIBus::configure ( SPIBusConfig newConfig)
inlineoverridevirtual

Configures and enables the bus with the provided configuration.

Since this implementation is not synchronized, if configure() is called on an already in use bus nothing will be done.

Use SyncedSPIBus if you need to synchronize access to the bus.

Implements Boardcore::SPIBusInterface.

Definition at line 413 of file SPIBus.h.

◆ deselect()

void Boardcore::SPIBus::deselect ( GpioType cs)
inlineoverridevirtual

See SPIBusInterface::deselect().

Implements Boardcore::SPIBusInterface.

Definition at line 457 of file SPIBus.h.

◆ disable()

void Boardcore::SPIBus::disable ( )
inline

Disables the peripheral.

Definition at line 319 of file SPIBus.h.

◆ disableInternalSlaveSelection()

void Boardcore::SPIBus::disableInternalSlaveSelection ( )
inline

Definition at line 355 of file SPIBus.h.

◆ disableRxDMARequest()

void Boardcore::SPIBus::disableRxDMARequest ( )
inline

Definition at line 397 of file SPIBus.h.

◆ disableSoftwareSlaveManagement()

void Boardcore::SPIBus::disableSoftwareSlaveManagement ( )
inline

Definition at line 348 of file SPIBus.h.

◆ disableTxDMARequest()

void Boardcore::SPIBus::disableTxDMARequest ( )
inline

Definition at line 393 of file SPIBus.h.

◆ enable()

void Boardcore::SPIBus::enable ( )
inline

Enables the peripheral.

Definition at line 317 of file SPIBus.h.

◆ enableInternalSlaveSelection()

void Boardcore::SPIBus::enableInternalSlaveSelection ( )
inline

Definition at line 353 of file SPIBus.h.

◆ enableRxDMARequest()

void Boardcore::SPIBus::enableRxDMARequest ( )
inline

Definition at line 395 of file SPIBus.h.

◆ enableSoftwareSlaveManagement()

void Boardcore::SPIBus::enableSoftwareSlaveManagement ( )
inline

Definition at line 346 of file SPIBus.h.

◆ enableTxDMARequest()

void Boardcore::SPIBus::enableTxDMARequest ( )
inline

Definition at line 391 of file SPIBus.h.

◆ flushRxBuffer()

void Boardcore::SPIBus::flushRxBuffer ( )
inline

Definition at line 407 of file SPIBus.h.

◆ getSpi()

SPIType * Boardcore::SPIBus::getSpi ( )
inline

Retrieve the pointer to the peripheral currently used.

Definition at line 306 of file SPIBus.h.

◆ operator=() [1/2]

SPIBus & Boardcore::SPIBus::operator= ( const SPIBus & )
delete

◆ operator=() [2/2]

SPIBus & Boardcore::SPIBus::operator= ( SPIBus && )
delete

◆ read() [1/2]

uint8_t Boardcore::SPIBus::read ( )
inlineoverridevirtual

Reads 8 bits from the bus.

Returns
Byte read from the bus.

Implements Boardcore::SPIBusInterface.

Definition at line 465 of file SPIBus.h.

◆ read() [2/2]

void Boardcore::SPIBus::read ( uint8_t * data,
size_t size )
inlineoverridevirtual

Reads multiple bytes from the bus.

Parameters
dataBuffer to be filled with received data.
sizeSize of the buffer.

Implements Boardcore::SPIBusInterface.

Definition at line 473 of file SPIBus.h.

◆ read16() [1/2]

uint16_t Boardcore::SPIBus::read16 ( )
inlineoverridevirtual

Reads 16 bits from the bus.

Returns
Half word read from the bus.

Implements Boardcore::SPIBusInterface.

Definition at line 467 of file SPIBus.h.

◆ read16() [2/2]

void Boardcore::SPIBus::read16 ( uint16_t * data,
size_t size )
inlineoverridevirtual

Reads multiple half words from the bus.

Parameters
dataBuffer to be filled with received data.
sizeSize of the buffer.

Implements Boardcore::SPIBusInterface.

Definition at line 479 of file SPIBus.h.

◆ read24()

uint32_t Boardcore::SPIBus::read24 ( )
inlineoverridevirtual

Reads 24 bits from the bus.

Returns
Bytes read from the bus (MSB of the uint32_t value will be 0).

Implements Boardcore::SPIBusInterface.

Definition at line 469 of file SPIBus.h.

◆ read32()

uint32_t Boardcore::SPIBus::read32 ( )
inlineoverridevirtual

Reads 32 bits from the bus.

Returns
Word read from the bus.

Implements Boardcore::SPIBusInterface.

Definition at line 471 of file SPIBus.h.

◆ reset()

void Boardcore::SPIBus::reset ( )
inline

Resets the peripheral configuration.

Definition at line 308 of file SPIBus.h.

◆ select()

void Boardcore::SPIBus::select ( GpioType cs)
inlineoverridevirtual

See SPIBusInterface::select().

Implements Boardcore::SPIBusInterface.

Definition at line 449 of file SPIBus.h.

◆ set8BitFrameFormat()

void Boardcore::SPIBus::set8BitFrameFormat ( )
inline

The SPI peripheral differs on stm32f7 microcontrollers. Refer to AN4660 for a comprehensive differences list between different peripherals versions.

The main difference here is that on the f7 you can transmit between 4 and 16. There is also a 32bit fifo and a threshold that generates the RXNE event. For this reason, on f7s we need to configure the 16 bit frame format differently and change the fifo threshold level.

Definition at line 332 of file SPIBus.h.

◆ setBitOrder()

void Boardcore::SPIBus::setBitOrder ( SPI::Order bitOrder)
inline

Definition at line 360 of file SPIBus.h.

◆ setClockDiver()

void Boardcore::SPIBus::setClockDiver ( SPI::ClockDivider divider)
inline

Definition at line 369 of file SPIBus.h.

◆ setMasterConfiguration()

void Boardcore::SPIBus::setMasterConfiguration ( )
inline

Definition at line 380 of file SPIBus.h.

◆ setMode()

void Boardcore::SPIBus::setMode ( SPI::Mode mode)
inline

Definition at line 382 of file SPIBus.h.

◆ setSlaveConfiguration()

void Boardcore::SPIBus::setSlaveConfiguration ( )
inline

Definition at line 378 of file SPIBus.h.

◆ transfer() [1/2]

void Boardcore::SPIBus::transfer ( uint8_t * data,
size_t size )
inlineoverridevirtual

Full duplex transmission of multiple bytes on the bus.

Parameters
dataBuffer containing data to trasfer.
sizeSize of the buffer.

Implements Boardcore::SPIBusInterface.

Definition at line 597 of file SPIBus.h.

◆ transfer() [2/2]

uint8_t Boardcore::SPIBus::transfer ( uint8_t data)
inlineoverridevirtual

Full duplex transmission of 8 bits on the bus.

Parameters
dataByte to write.
Returns
Byte read from the bus.

Implements Boardcore::SPIBusInterface.

Definition at line 525 of file SPIBus.h.

◆ transfer16() [1/2]

void Boardcore::SPIBus::transfer16 ( uint16_t * data,
size_t size )
inlineoverridevirtual

Full duplex transmission of multiple half words on the bus.

Parameters
dataBuffer containing data to trasfer.
sizeSize of the buffer.

Implements Boardcore::SPIBusInterface.

Definition at line 603 of file SPIBus.h.

◆ transfer16() [2/2]

uint16_t Boardcore::SPIBus::transfer16 ( uint16_t data)
inlineoverridevirtual

Full duplex transmission of 16 bits on the bus.

Parameters
dataHalf word to write.
Returns
Half word read from the bus.

Implements Boardcore::SPIBusInterface.

Definition at line 561 of file SPIBus.h.

◆ transfer24()

uint32_t Boardcore::SPIBus::transfer24 ( uint32_t data)
inlineoverridevirtual

Full duplex transmission of 24 bits on the bus.

Parameters
dataBytes to write (the MSB of the uint32_t is not used).
Returns
Bytes read from the bus (the MSB of the uint32_t will be 0).

Implements Boardcore::SPIBusInterface.

Definition at line 572 of file SPIBus.h.

◆ transfer32()

uint32_t Boardcore::SPIBus::transfer32 ( uint32_t data)
inlineoverridevirtual

Full duplex transmission of 32 bits on the bus.

Parameters
dataWord to write.
Returns
Half word read from the bus.

Implements Boardcore::SPIBusInterface.

Definition at line 584 of file SPIBus.h.

◆ waitPeripheral()

void Boardcore::SPIBus::waitPeripheral ( )
inline

Definition at line 399 of file SPIBus.h.

◆ write() [1/2]

void Boardcore::SPIBus::write ( const uint8_t * data,
size_t size )
inlineoverridevirtual

Writes multiple bytes to the bus.

Parameters
dataBuffer containing data to write.
sizeSize of the buffer.

Implements Boardcore::SPIBusInterface.

Definition at line 505 of file SPIBus.h.

◆ write() [2/2]

void Boardcore::SPIBus::write ( uint8_t data)
inlineoverridevirtual

Writes 8 bits to the bus.

Parameters
dataByte to write.

Implements Boardcore::SPIBusInterface.

Definition at line 497 of file SPIBus.h.

◆ write16() [1/2]

void Boardcore::SPIBus::write16 ( const uint16_t * data,
size_t size )
inlineoverridevirtual

Writes multiple half words to the bus.

Parameters
dataBuffer containing data to write.
sizeSize of the buffer.

Implements Boardcore::SPIBusInterface.

Definition at line 511 of file SPIBus.h.

◆ write16() [2/2]

void Boardcore::SPIBus::write16 ( uint16_t data)
inlineoverridevirtual

Writes 16 bits to the bus.

Parameters
dataHalf word to write.

Implements Boardcore::SPIBusInterface.

Definition at line 499 of file SPIBus.h.

◆ write24()

void Boardcore::SPIBus::write24 ( uint32_t data)
inlineoverridevirtual

Writes 24 bits to the bus.

Parameters
dataBytes to write (the MSB of the uint32_t is not used).

Implements Boardcore::SPIBusInterface.

Definition at line 501 of file SPIBus.h.

◆ write32()

void Boardcore::SPIBus::write32 ( uint32_t data)
inlineoverridevirtual

Writes 32 bits to the bus.

Parameters
dataWord to write.

Implements Boardcore::SPIBusInterface.

Definition at line 503 of file SPIBus.h.


The documentation for this class was generated from the following file: