Вход
Наше всё
Теги
codebook
PARTS
Поиск
Опросы
Закон
Вторник
26 января
О смысле всего сущего
0xFF
Средства и методы разработки
Мобильная и беспроводная связь
Блошиный рынок
Объявления
Микроконтроллеры
ARM
AVR
PIC
PLD, FPGA, DSP
Кибернетика
Технологии
Схемы, платы, компоненты
ARM-контроллеры
/1042900
VLLV
(09.10.2020 04:31, просмотров: 2779)
Знатоки STM32 и читатели даташитов! SPI сконфигурирован на 1 байт, нужно ли приводить SPI->DR к одному байту? Если записать, как есть, сколько байт передаст SPI?
Ответить
Ответы
stm32 сильно разные, например на L4 я пару часов потратил на бубен, там надо было не только DR приводить к одному байту, но еще периферию нетривиально настраивать. В других обходилось без бубна.
-
AVF
(
13.10.2020 12:48
)
Из даташита на STM32F10x:
il-2
(460 знаков,
09.10.2020 15:29
)
Для F1 - не нужно, для F0 - можно и нужно. Совсем же недавно обсуждалось, но повторенье, мать его!
йцyкeн
(477 знаков,
09.10.2020 17:39
)
Спасибо, я про F0 был не в курсе - не пользовал на нем SPI.
-
il-2
(
09.10.2020 18:48
)
При передаче всё просто. Само собой будет 1 байт. Если задан байт. А вот при приеме да, надо смотреть наличие ФИФО. Я 3 года назад накувыркался с STM32L476. :-)
-
Лaгyнoв
(
09.10.2020 08:38
)
Вот это читали?
-
teap0t
(
09.10.2020 07:56
,
ссылка
)
Спасибо! Теперь смотрите, в чем проблема - такое приведение убивает признак volatile у DR! В IAR на максимальной оптимизации этот код не работает.
-
VLLV
(
09.10.2020 09:00
)
Блин, да не выдумывайте проблемы на ровном месте. Всё проще пареной репы.
VladislavS.
(452 знаков,
09.10.2020 09:19
)
По поводу volatile эти примеры ничего не доказывают, т.к. неизвестна оптимизация и прочие условия. По поводу размерности - вот брошу все и сам проверю.
-
VLLV
(
09.10.2020 09:26
)
Чего? Вы видели определение регистров процессора в заголовочных фалах? Там стоит __IO aka volatile. И ни один компилятор не имеет права выкинуть/оптимизировать доступ к этим регистрам на любом уровне оптимизации. Мои примеры скомпилированы на максимальной оптимизации в IAR. Ну это же азы эмбеддерства, даже удивительно, что такие вещи объяснять надо.
-
VladislavS.
(
09.10.2020 10:13
)
Имею интересные впечатления от компилятора cosmic для stm8. Он просто не обращает внимания на volatile. Это логично, учитывая, что код генерит на манер "что вижу, то и пишу", хитрых оптимизаций нет. Но на код "var += 2;" выдаёт "INC mem INC mem", например. Зануды скажут "какой же это volatile!", а я скажу "ну и что, зато код компактный получается"...
-
SciFi
(
09.10.2020 10:26
)
И вдруг прерывание, в котором зачение проверяется на n или n+2...
-
s_h_e
(
09.10.2020 10:34
)
А за что настоящий ымбеддер свой хлеб ест? Опять же адуринщиков отпугивать хорошо.
-
SciFi
(
09.10.2020 10:58
)
Наверно, Вы не знаете перевода volatile - "летучая", то она есть, то ее нет. В вашем случае есть, в моем - нет ;)
-
VLLV
(
09.10.2020 10:22
)
Я много чего не знаю. Только проблема с SPI->DR у вас, а не у меня. 100% правильное решение вам показали, можете продолжать лясы точить.
-
VladislavS.
(
09.10.2020 11:16
)
Какой такой "этот код"? Прячете? Снова военная тайна?
-
SciFi
(
09.10.2020 09:05
)
Код по ссылке с приведением к байту *(uint8_t *)&SPI_REGS[port]->DR = (uint8_t)data;
-
VLLV
(
09.10.2020 09:14
)
А, ну да. Надо же вот так: *(uint8_t volatile*)&SPI_REGS[port]->DR = (uint8_t)data;
-
SciFi
(
09.10.2020 09:27
)
Это от контроллера зависит. Есть контроллеры с FIFO на SPI, у них есть разница в поведении при байтовом или пословном доступе к DR. Конкретно в RM на чип надо смотреть.
-
VladislavS.
(
09.10.2020 07:49
)
На сколько сконфигурирован, столько и передаст
-
il-2
(
09.10.2020 07:36
)