STM32F4. Урок 15 — Низкоуровневый SPI

Данная библиотека позволяет использовать интерфейс SPI в режиме мастер-устройства.
Выводы SPI, которые будут использоваться, должны быть указаны в C-файле (в H-файле может быть выбраны тактовая частота и делитель).
Библиотека позволяет работать с SPI только на низком уровне, можно инициализировать интерфейс (в одном из четырех режимов работы SPI) и отправить/принять байт.
Используемые чип-селекты выбираются с помощью главной функции.
В данном примере присутствуют три одинаковые библиотеки — SPI1, SPI2 и SPI3.

В программе была использована библиотека SPI2, расположение выводов следующее:

SCK к PB13
MOSI к PB15
MISO к PB14

Требования:

Подключаемые модули CooCox-IDE: GPIO, SPI.
Поддерживаемые библиотеки: отсутствуют.

Перечисления:

 typedef enum {   SPI_MODE_0 = 0,  // CPOL=0, CPHA=0   SPI_MODE_1,      // CPOL=0, CPHA=1   SPI_MODE_2,      // CPOL=1, CPHA=0   SPI_MODE_3       // CPOL=1, CPHA=1  }SPI1_Mode_t;

Функции:

 ErrorStatus UB_SPI1_Init(SPI1_Mode_t mode); // инициализация интерфейса SPI uint8_t UB_SPI1_SendByte(uint8_t wert);     // функция отправки/получения байта

Пример использования:

  //-------------------------------------------------------------- // File     : main.c // Datum    : 04.03.2013 // Version  : 1.0 // Autor    : UB // EMail    : mc-4u(@)t-online.de // Web      : www.mikrocontroller-4u.de // CPU      : STM32F4 // IDE      : CooCox CoIDE 1.7.0 // Module   : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der SPI-LoLevel-Library // Hinweis  : Diese zwei Files muessen auf 8MHz stehen //              "cmsis_boot/stm32f4xx.h" //              "cmsis_boot/system_stm32f4xx.c" //--------------------------------------------------------------  #include "main.h" #include "stm32_ub_spi2.h"  //-------------------------------------------------------------- // отправка и получение байта через SPI //-------------------------------------------------------------- uint8_t spi_send(uint8_t wert) { 	uint8_t ret_wert;  	// установка чип-селекта в низкий уровень  	// прием и отправка байта 	ret_wert=UB_SPI2_SendByte(wert);  	// установка чип-селекта в высокий уровень  	return(ret_wert); }  //-------------------------------------------------------------- int main(void) {   uint8_t wert;    SystemInit(); // инициализация настроек кварца    // инициализация SPI2 в режиме mode0   UB_SPI2_Init(SPI_MODE_0);    // отправка значения 0x45 по SPI   // и прием байта   wert=spi_send(0x45);    while(1)   {    } } 

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.