STM32 Software SPI in C

Beispiel zur Implementierung einer SPI per Software auf dem STM32. Diese Implementierung in C ist unvollständig (es ist nur das Senden von Daten implementiert), reicht aber aus um z.B. Displays per SPI anzusteuern. Die Daten werden mit dem MSB zuerst gesendet.

stm32_soft_spi.c
#include <stddef.h>		/* size_t */

#define SPI_CLK_L()	GPIOA->BRR=(1<<0)
#define SPI_CLK_H()	GPIOA->BSRR=(1<<0)
#define SPI_MOSI_L()	GPIOA->BRR=(1<<1)
#define SPI_MOSI_H()	GPIOA->BSRR=(1<<1)
#define SPI_CS_L()	GPIOA->BRR=(1<<2)
#define SPI_CS_H()	GPIOA->BSRR=(1<<2)

void spi_wr_byte(uint8_t data)
{
	SPI_CS_L();
	for(size_t i = 0; i < 8; i++) {
		if (data & 0x80) {
			SPI_MOSI_H();
		} else {
			SPI_MOSI_L();
		}
		data = data << 1;
		SPI_CLK_L();
		SPI_CLK_H();
	}
	SPI_CS_H();
}