Старт ARM. SPI интерфейс, часть 1-ая. HAL
Всем привет, продолжаем дальше на практике изучать ARM. Сегодня на повестки дня, передача данных между двумя платами STM32F401VC — DISCO(раб) и STM32F100RB — discovery(мастер) по интерфейсу SPI. Задача такая:
1. Мастер посылает 1 — Раб(подчиненный) принимает и подает сигнал 1 на выходной пин. Начинает светиться светодиод.
2. Мастер посылает 0 — Раб(подчиненный) принимает и подает сигнал 0 на выходной пин. Светодиод затухает.
3. Процесс пересылки данных приблизительно кратен 1 секунде.

SPI (Serial Peripheral Interface — последовательный периферийный интерфейс) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным интерфейсом.

В SPI используются четыре цифровых сигнала:
MOSI — выход ведущего, вход ведомого (Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.
MISO — вход ведущего, выход ведомого (Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
SCLK — последовательный тактовый сигнал (Serial Clock). Служит для передачи тактового сигнала для ведомых устройств.
CS или SS — выбор микросхемы, выбор ведомого (Chip Select, Slave Select).

1. Качаем SPL(стандартная периферийная библиотека) STM32F10x_StdPeriph_Lib_V3.5.0

2. Далее смотрим на скриншоты и согласно им, делаем следующие шаги.


Что касается конфигурации проекта, я не рекомендую заменять системные файлы конфигурации микроконтроллера, рекомендую делать это правильно, то то есть добавлять в препроцессорных символах объявления касающиеся нашего железа (смотреть скриншот).
Проект для мастера в SPL SPL_SPI_Master.7z

Описание архитектуры smt32f1xx


Полный мануал full_stm32f100xx.pdf
Краткий мануал stm32f100xx.pdf

Далее привожу основную часть программы для мастера и для раба.

SPI master (SPL)

SPI slave (CubeMX)

Схема подключения.

Проект для раба CubeMX_SPI_Slave.7z

На сегодня все! Всем пока, если есть вопросы, пишите, всегда отвечу! 🙂