‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Category:

worklog: если старый код вдруг оказался не торт,... STM32F030 + SPI = WTF?!

Жил-да-был древний код, переписывавшийся под несколько разных чипов.
Код был очень простой, буквально несколько обращений к разным хардварным регистрам - всегда всё работало, надеясь на надёжное описание периферии в подключаемом к проекту заголовочном файле.

А потом - однажды, ессно - всё сломалось!

Но это сейчас я знаю, что проблема была в хидере. Реально же поиск выглядел так:
1) ё-маё, пишу код в подключённый к микроконтроллеру чип, а он мне в ответ шлёт полнейшую хрень или вообще ничего не шлёт, при этом потребление низкое настолько, словно бы он сидит в сбросе
2) не сжёг ли я чип, паяя его на плату? Может, статикой прошибло? или перегрел? Да вроде нет, его собственный тактовый генератор работает - я вижу его частоту на выводах
3) а порядок бит в посылках правильный? вроде да, в отладке всё смотрится как надо
4) а полярность тактовых импульсов? Да, проверил два раза - ничему не менялось,,..
5) стоп.. менялась среда разработки. Ну-ка, флаги оптимизации какие? .. эхм.. -O0? странно, и ассемблерный код выгл.. стоп. А это что такое?
6) регистр микрокнтроллера, принимающий данные, 16-битный, так? А посылки SPI вообще 8-битные, так? А какого хрена тут 32-битное обращение
7) ну-ка, ткнём-ка осцилл в ножки.. сначала припаяем к ним тонюсенькие проволочки, и к ним уже.. так-так.. ага. И что же мы видим - там, где должны быть пачки из 8 импульсов, их на самом деле 16. Так-так, посмотрим в отладке ещё.. ага, ФИФО переполнен.
8) ну-ка, перепишем-ка! было SPI1->DR = byte;, а мы его щас принудиловкой в байтовый доступ: *(uint8_t*)&SPI1->DR = byte;
9) прошиваем.. ЕСТЬ! пошли восьмёрочки!

а всё потому, что какой-то неизвестный науке пидор решил, что раз процессор 32-битный, то и периферийные регистры должны быть описаны как 32-битные.
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments