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);     // функція відправки/отримання байта

Приклад використання:

//--------------------------------------------------------------
// Файл     : main.c
// Дата     : 04.03.2013
// Версія   : 1.0
// Автор    : UB
// EMail    : mc-4u(@)t-online.de
// Веб      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Модуль   : CMSIS_BOOT, M4_CMSIS_CORE
// Функція  : Демонстрація SPI-LoLevel-бібліотеки
// Примітка  : Ці два файли повинні бути на 8MHz
//              "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 та окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить ставити запитання на його сайті німецькою або англійською мовами.

Оригінал статті

Прикреплені файли:

Top