Режим ведомого

Материал из MIK32 микроконтроллер
Версия от 09:08, 10 марта 2023; Андрей (обсуждение | вклад) (Новая страница: «В примере будет проведена настройка SPI в режиме ведомого. Ведомый будет читать и передавать 12 байт. == Работа с конфигуратором (В разработке) == Для начала настроем в конфигураторе тактирование mik32, например, от внешнего кварца 32МГц. Затем настроем делите...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

В примере будет проведена настройка SPI в режиме ведомого. Ведомый будет читать и передавать 12 байт.

Работа с конфигуратором (В разработке)

Для начала настроем в конфигураторе тактирование mik32, например, от внешнего кварца 32МГц. Затем настроем делители шины. Так как SPI тактируется от шины APB_P_CLK, то зададим делитель AHB_DIV и APB_P_CLK. В данном примере оставим делитель по умолчанию. В итоге вкладка с тактированием должна выглядеть так:

(Картинка тактирования из конфигуратора. В работе)

Затем перейдем к настройке самого SPI. Для этого откроем вкладку интерфейсы, выберем SPI и зададим режим работы ведомый. После этого появятся несколько настроек. Зададим им следующие значения:

  • Фаза тактового сигнала - Тактовая частота активна вне слова;
  • Полярность тактового сигнала вне слова - Тактовый сигнал удерживается на низком уровне;
  • Длина передаваемой посылки - 8 бит.

В итоге настройки SPI в конфигураторе должны выглядеть как на рисунке.

Нажимаем кнопку сохранения и генерации. В итоге у нас появится проект для PlatformIo. Далее работа идет в visual studio code.

Использование библиотеки HAL_SPI

В сгенерированном проекте в файле main.c должна быть функция Crypto_Init, в которой будут заданы настройки для крипто-блока. Выглядит она так:

static void SPI0_Init(void)
{
    hspi0.Instance = SPI_0;

    /* Режим SPI */
    hspi0.Init.SPI_Mode = HAL_SPI_MODE_SLAVE;

    /* Настройки */                       
    hspi0.Init.CLKPhase = SPI_PHASE_OFF;            
    hspi0.Init.CLKPolarity = SPI_POLARITY_LOW;         
    hspi0.Init.DataSize = SPI_DATASIZE_24BITS;  

    HAL_SPI_Init(&hspi0);

}