Как уже было рассказано в статье - "USI в режиме SPI slave на ATtiny2313" SPI - это простой, быстрый и надежный способ обмена данными между устройствами. Поэтому интерфейс SPI имеется в большинстве современных микроконтроллеров, в том числе и микроконтроллерах stm32. В большинстве таких микроконтроллеров этих интерфесов даже больше одного. Чаще всего SPI в них работает в режиме master вместе со специализированными микросхемами с интерфейсами SPI которые работают в режиме slave. Микроконтроллеры также могут обмениваться данными между собой по SPI. В таких случаях микроконтроллер slave может работать в составе какого нибудь специализированного модуля. Как уже было рассказано, в статье по ссылке выше, устройства с по SPI соединяются друг с другом одноименными пинами т.е. MISO мастера с MISO слейва, MOSI мастера с MOSI слейва и т.д. Микроконтроллер stm32f103c8 (а точнее отладочную плату с ним которую называют "blue pill") можно соединить с микроконтроллером ATtiny2313 по SPI например так как на схеме:
Битом 2, этого регистра, устанавливается режим мастера, битами 3...5 предделитель частоты шины от которой тактируется SPI1 (а он тактируется от APB2) так чтобы получилась нужная частота работы SPI. При установке этих битов следует иметь в виду то что SPI1, в данном микроконтроллере, не может работать на частоте более 12 МГц. Частота шины от которой тактируется SPI1, по умолчанию, равна 36 МГц (на такю частоту её настраивает CMSIS). Битами 8 и 9 устанавливаем внутреннее программное управление слейвом (чтобы SPI1 мог работать без пина SS). Битом 6 включается SPI, сделать это следует в последнюю очередь. В функции main осталось настроить UART для приема и передачи байта данных, чтобы можно было проверить SPI через монитор последовательного порта (например такой что есть в Arduino IDE) а также основной цикл в котором можно сделать проверку прихода байта данных по UART прежде чем забрать этот байт из регистра данных USART1 для записи в регистр данных SPI. В используемом микроконтроллере при записи байта данных в регистр данных, происходит помещение этого байта сначала в буферный регистр а уже потом в регистр сдвига. Прежде чем записать байт данных в регистр данных нужно подождать освобождения буфера передатчика о чем свидетельствует бит 1 регистра SPI1->SR:После записи в регистр данных байта данных для передачи слейву нужно ждать заполнения буферного регистра приемника прежде чем принимать забрать байт данных из регистра данных. О заполнении буферного регистра приемника свидетельствует бит 0 регистра SPI1->SR: