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 та окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить ставити запитання на його сайті німецькою або англійською мовами.
Прикреплені файли:
- ub_stm32f4_spi_v100_rus.rar (8 Кб)
- Demo_15_SPI_LoLevel_rus.rar (176 Кб)