Это видео недоступно.
Сожалеем об этом.
STM32. Урок 20. SPI. Serial Peripheral Interface
HTML-код
- Опубликовано: 31 янв 2020
- Видео урок о том, что такое интерфейс SPI, какие схемы подключения бывают, какие виды сигналов физически реализованы в МК STM32, какие настройки необходимо выполнить в среде STM32CubeIDE для популярного микроконтроллера STM32F103C8T6 отладочной платы BluePill.
Вы можете помочь каналу Яндекс-деньги:
money.yandex.r...
Еще одно полезное видео, Списидо Вам!
Пижалуйста) Рад помочь.
Материал и подача на канале достойны топового ВУЗа.
Спасибо! Старался во всю) Дальше будут видео по I2C, RTC, DAC, ADC и HRTIM конечно же.
@@NRelectronics как я я понимаю вы занимаетесь программированием микроконтроллеров ?
трошки для себе)
Спасибо! У вас супер полезный контент
Спасибо!
Понял некоторые вещи, познавательно. Спасибо!
Да пожалуйста)
На картинке на 17 минуте (подключение нескольких слейвов) пучок от mosi слейвов заведён на sclk.
твою м... спасибо что сказали, даже такому нашему сми довериться нельзя..
@@NRelectronics да ладно, у всех бывает. За всеми глаз да глаз ))
Я что то не особо понял, если есть синхроимпульс почему происходит рассинхронизация при большем пакете. И означает ли это что USART работает дальше чем UART?
Про рассинхронизацию уже не помню, надо смотреть вспоминать. А usart действительно работает дальше, скорость значительно меньше...
Спасибо! Очень подробно и понятно. Есть некоторые устройства с SPI без вывода SS (CG) конкретно дисплей, на ардуино есть библиотеки которые позволяют работать без этого контакта. Вопрос можно ли на STM32 подключить устройство без SS если оно будет единственное? А также если их несколько? Спасибо.
Нужно рассматривать конкретную библиотеку, так сходу сложно сказать. SS или чип селект можно управлять обычным gpio, не запрещено ;-)
Здравствуйте! Спасибо за видео. Подскажите пожалуйста есть в hal метод HAL_TransmitReceive чем он отличается от отдельно вызванных transmit receive? Я его использую для чтения регистров ethernet адаптера w5500 . Результаты отличаются от отдельно вызванных методов, исходный код смотрел не понятно почему это написано так, как это работает... Можно ли его заменить коротким методом работающим непосредственно с регистрами stm32, и как будет выглядит этот код? Для лучшего понимания хотелось бы разобраться с этими моментами
Здравствуйте. Пожалуйста за видео)
Данный метод или функция мне не попадалась, по крайней мере не помню. Надо будет посмотреть почему она на передачу и прием, судя из ее названия...
@@NRelectronics Подскажите пожалуйста, когда подключаю к логическому анализатору выходы (sck и mosi) и пытаюсь выполнить код:
char dta[6]="hellow";
HAL_SPI_Transmit(&hspi1, dta, 6, 1000000);
Вижу много раз 0xff, но полезных данных нет. В чем может быть причина?
30:03 я могу использовать свой ST7735 дисплей и SD Card на одном SPI? SD card отдельным модулем идет, в дисплей не впаян
Именно эту переферию я бы не использовал на одном SPI.
@@NRelectronics ух ты попался я ) спасибо за ответ. Мозг уже вскипел, потому что карточка отдельно даже не хочет работать. FR_not_ready выдает :(. Свободная карта только одна. Не знаю в чем дело, надеюсь не в карте
Куб не даёт поставить прескалер больше 4, а вот в коде можно поставить 2, и spi работает без ошибок. Интересно оно выдаёт 36 мегабит, или 18 это потолок и дальше настройки не влияют. И кстати в даташите пишут "master mode baud rate prescalers (fPCLK/2 max.)" и не слова про предел в 18.
В исходнике то можно вписать делитель на 2. Но не все так просто:
cloud.mail.ru/public/2fh8/UxxfH9Sw7
@@NRelectronics Интересно как на практике, STM32F103C8T6 он весть такой, по даташиту 72MHz, а на практике можно до 128, флеша 64kB, а на практике 128, думаю с spi также. Жду не дождусь экран с Китая проверить
то что вы пишите, это то что не оттестировано и компания не гарантирует правильную работоспособность. Повезло работает, не повезло не работает.
А как настроить программный SPI? STM32F103C8T6 только два аппаратных spi имеет :(
Настроить никак. Самому написать библиотеку с программным SPI.
@@NRelectronics спасибо за ответ. А проблем не будет, если использовать дисплей и sd карту на одном spi? DMA вроде использовать нужно будет? Первый раз такое делаю :)
надо их разделять грамотно при использовании, DMA желательно понятно.
Здравствуйте, продолжаю изучать f103.
Написал процедуру SPI_TRANSMIT, она отправляет данные 1 раз. а на втором круге зацикливается на while(!SPI_TX_BUSY);
В SPI HAL_SPI_TxCpltCallback работать должна так же как на UART ?
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
if (hspi == &hspi1)
{
SPI_TX_BUSY=true;
}
}
void SPI_TRANSMIT (uint8_t *MessageSPI, uint8_t ArrayLengthPSI)
{
while(!SPI_TX_BUSY);
SPI_TX_BUSY = false;
HAL_SPI_Transmit_DMA (&hspi1, (uint8_t *)MessageSPI, ArrayLengthPSI);
}
Разобрался! Если отправлять один байт, независимо от скорости порта, наблюдается описанный bug. но при отправке массива с из 2 и более байт все работает.
вот молодцы! Быстрее меня отвечаете, так держать!
@@NRelectronics вопрос остаётся открытым, как передать один байт и получить нормальное прерывание в DMA. До CMSIS пока ещё руки не дошли.
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
*hspi - с какого SPI будет передача,
DataSize - 1 или 2 байта передается,
*pData - ваши данные,
Size и Timeout думаю понятно.
Это обычная передача без прерываний.
@@NRelectronics передаю по SPI1, попробую. Но задача разгрузить процессорное время.
Hi
Hi)) Who are you?