STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

AlDr70, перепутал всё что можно. Объявление, определение и вызов функции wait.

1. Определение в файле wait.c

Код: Выделить всё

void wait()
{
  // бла-бла-бла
}
2. Объявление в файле wait.h

Код: Выделить всё

extern void wait();
3. Вызов в основном цикле
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 новичку в ARM что к чему

Сообщение Мурик »

AlDr70 писал(а):Пробую к main.c подключить свой файл wait.c c wait.h.
В первый раз на Си пишите?
В архиве проект под STM32F103C8T6 использующий системный таймер для задержки при мигании светодиодом. Проект не для кейла, а для EmBitz, но это не важно. Посмотрите как устроены файлы main.c, SysTimer.c и одноименные h файлы.

Для этого МК логичнее использовать WDT для задержек. Код даже проще получится.
Вложения
SysTimer.zip
(271.54 КБ) 191 скачивание
Blink_WDT.7z
(81.45 КБ) 305 скачиваний
Реклама
AlDr70
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вс ноя 13, 2016 18:04:13

Re: STM32 новичку в ARM что к чему

Сообщение AlDr70 »

Да, первая попытка на С. Спасибо. А как быть с ругательством кейла на последнюю сторку?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 новичку в ARM что к чему

Сообщение Мурик »

В последней строке лишняя закрывающая скобка.
В коде много ошибок.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

Не понимаю я оптимизатор Кейла. С одной стороны тщательно вычищает всё, что может быть вычислено заранее, чтобы посмотреть что-то промежуточное в отладчике, приходится изголяться. С другой стороны, тот самый цикл while(1) отрабатывает буквально: достает и проверяет эту единичку, в результате F407 на 168 МГц единственный ctr2++ в этом цикле выполняет около 20 млн раз в секунду. Замена этого while(1){ctr2++;} на unfin:ctr2++;goto unfin; увеличила этот ctr2 до почти 84 млн за секунду.

И, кстати, так и не разобрался с extern: по всем докам, до которых я дотянулся, в файле с main() надо написать до всех функций, допустим, static int ctr2; в остальных надо писать extern int ctr2; и все будет ОК. Ага, два раза! Линкер ругается, что ctr2 не найдено. Где я неправ?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

afz писал(а):до всех функций, допустим, static int ctr2
Только без static.

Static переменная видна только внутри файла. Extern в файле говорит, что где-то ещё, в другом .c файле будет такая (глобальная) переменная. А глобальной-то Вы и не оставили.
Реклама
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

Блин, все забыл! Ведь точно знал когда-то, спасибо, что напомнили.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
AlDr70
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вс ноя 13, 2016 18:04:13

Re: STM32 новичку в ARM что к чему

Сообщение AlDr70 »

Пытаюсь изучить РМ на 32F103. Там в разделе BKP registers упоминается TAMPER. Что это и для чего? Растолкуйте, пожалуйста доходчиво нубу.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

Что-то вроде "красной кнопки". Уничтожить информацию в "батарейной" памяти/затереть прошивку при несанкционированном доступе (вскрытие корпуса, и т.п.). Сильно не вникал, но что-то вроде этого.
AlDr70
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вс ноя 13, 2016 18:04:13

Re: STM32 новичку в ARM что к чему

Сообщение AlDr70 »

Спасибо, земляк.
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

А как лучше подрыгать одинокой ножкой GPIO: через GPIOx->BSRR, или через битбанг? Конечно, если дрыгать не одной ножкой, то через BSRR можно дрыгнуть сразу всеми, какими надо, а если одной?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

afz, смотря что ты вкладываешь в слово "лучше". Так что в твоём понимании лучше?
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

Наверное с точки зрения скорости. Допустим, я дрыгнул одной ножкой, прочитал другие биты того же порта, которые на ввод, посмотрел реакцию, дрыгнул другой или третьей ножкой того же порта, в зависимости от... Оптимизатор может взять в регистр адрес этого BSRR и тогда все будет быстро. А может и не взять...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Ну ты же сам всё понимаешь :)

Если в двух словах, то на битбандинге можно как выиграть за счёт того что записывать надо только две константы 0 и 1 и их можно держать в регистрах, так и проиграть, из-за трудности использования записи со смещением. В целом тож на то выходит. С учётом того что битбандинг есть не во всех чипах, то заморачиваться с ним особого смысла нет.
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

ОК, спасибо.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

На хабре появилась статеечка, как ручками через регистры сконфигурировать тактирование на STM32H7. Никогда ранее с седьмой серией не сталкивался, но что и зачем делает автор в общих чертах понятно. Кроме одного момента:

Код: Выделить всё

//PLLM = 4
	RCC -> PLLCKSELR &= ~RCC_PLLCKSELR_DIVM1_5; //0
	RCC -> PLLCKSELR &= ~RCC_PLLCKSELR_DIVM1_4; //0
	RCC -> PLLCKSELR &= ~RCC_PLLCKSELR_DIVM1_3; //0
	RCC -> PLLCKSELR |=  RCC_PLLCKSELR_DIVM1_2; //1
	RCC -> PLLCKSELR &= ~RCC_PLLCKSELR_DIVM1_1; //0
	RCC -> PLLCKSELR &= ~RCC_PLLCKSELR_DIVM1_0; //0
Занесение значения в регистр RCC_PLLCKSELR зачем-то разбито аж на шесть шагов. Никто не в курсе, зачем все это и почему нельзя было написать просто

Код: Выделить всё

RCC -> PLLCKSELR =  RCC_PLLCKSELR_DIVM1_2;
?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

Видимо, потому что такой "сложный" способ не затрагивает остальные биты регистра RCC->PLLCKSELR. В отличие от "простого", обнуляющего их.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Да фиг с ними, с остальными. Я про то, что при первоначальной инициализации можно все эти "остальные" загонять в регистр одним присваиванием. Какой смысл перещелкивать битики по одному в то время, когда PLL даже не включен, а само состояние этих битиков известно? Автор, судя по его статьям на хабре, не похож на неофита, но то, что он делает я объяснить себе не могу. По моим представлениям -- это полная бессмыслица.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Мне попадалась следующая аргументация:
- мне так понятнее/удобнее/красивее;
- ты что память экономишь? Там её хоть опой кушай;
- опять ты со своим "=", пиши как хочешь.

А в твоём примере даже не на 6 шагов, а на 18 разбито! 6*(чтение, логическая операция, запись).

Давай в ассемблерных командах посчитаем:
- загрузка адреса регистра 1 шт.
- чтение регистра 6 шт.
- загрузка константы 6 шт.
- логическая операция 6 шт.
- запись регистра 6 шт.
ИТОГО: 25 команд.

Если откинуть команду загрузки адреса регистра, так как в предыдущих командах мы наверняка с RCC уже работали (включали HSE наверняка), то соотношение получается 24:2. В 12 раз, Карл!
Последний раз редактировалось VladislavS Пт окт 26, 2018 06:58:20, всего редактировалось 1 раз.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

На самом деле, работать с битами регистра не затрагивая остальные - это достаточно важный принцип. Хотя, если речь идёт об изначальной "только один раз" инициализации на старте, можно и попроще.

Хотя я бы данный код расписал бы скорее так

Код: Выделить всё

RCC->PLLCKSELR &= ~(RCC_PLLCKSELR_DVMI1_MASK);
RCC->PLLCKSELR |= RCC_PLLCKSELR_DIVM1_2;
Не знаю, существует ли такая маска в CMSIS макросах. Если нет - сделал бы свою.
Ответить

Вернуться в «ARM»