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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

В своем примере настройку FLASH я добавил позже, когда разогнать ядро выше 55МГц не удалось. Нашел,запустил,запомнил. Теперь действительно слежу за всеми используемыми блоками. Опыт так сказать.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

[uquote="philosoraptor",url="/forum/viewtopic.php?p=3463065#p3463065"]Что очень характерно, персонажи, пытающиеся прокачать свое чсв, ругая hal, cube и т.п, не понимают даже толком, почему использование while(extPin){;} в нормальном коде недопустимо. В связи с чем вряд ли есть смысл объяснять им рациональные и очевидные вещи.[/uquote]

Рациональный наш, ты умудрился на лету переобуться.
Во первых речь была о флагах статуса SPI о не о состояния пина. Это раз.
А два -калокуб и то что ты называшь "HAL", что на самом деле лишь не нужная прослойка а не HAL, ну ни как не рациональны.

WiseLord, наделать глупостей в калокубе, не изучая железо, намного больше шансов...
Реклама
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

Сообщение pvit »

[uquote="jcxz",url="/forum/viewtopic.php?p=3463054#p3463054"]Flash latency нужно менять при смене частоты, а не источника тактирования. И мне кажется само собой разумеющимся, что при смене какой-то частоты тактирования, нужно просмотреть (и переинитить при необходимости) все части МК, которые тактируются этой частотой. Если ты что-то меняешь, то естественно нужно просмотреть все части, на что это изменяемое влияет.[/uquote]
IMHO не самая продуктивная стратегия. Хотя собственным временем вы конечно вольны распоряжаться как угодно. Я внимательно смотрел код который генерит куб, и прикидывал где понаделал бы ошибок и как надо читать RM чтобы такого не случилось. Получалось, что только учить наизусть.
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="pvit",url="/forum/viewtopic.php?p=3463189#p3463189"]Я внимательно смотрел код который генерит куб, и прикидывал где понаделал бы ошибок и как надо читать RM чтобы такого не случилось. Получалось, что только учить наизусть.[/uquote]
Вы и с кубом "понаделали ошибок". Я вам на них указывал, но похоже, что вы даже не понимаете, о чем речь. Нафиг вам такое программирование, ума не приложу.
Реклама
Эиком - электронные компоненты и радиодетали
Мудрый кот
Сообщения: 1841
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="pvit",url="/forum/viewtopic.php?p=3463189#p3463189"]IMHO не самая продуктивная стратегия. Хотя собственным временем вы конечно вольны распоряжаться как угодно. Я внимательно смотрел код который генерит куб, и прикидывал где понаделал бы ошибок и как надо читать RM чтобы такого не случилось. Получалось, что только учить наизусть.[/uquote]
Продуктивность ярко видна по форумам: все форумы просто заполнены стонами пользователей всяких калокубов: "нашёл в нете это. прикостылил к себе, что-то понатыкал там и там - не работает! :(( перетыкал по-другому - опять не работает! :((( спасите-помогите - куда ещё потыкать?? - неделю уже бьюсь, а никак не получается! :(((".
И практически ни одного вопроса от тех, кто читает мануалы и разбирается сам без всяких либ.
Это очень показательно. 8)

И сделать кое-как, по-быстрому не разбираясь - это значит - переделывать потом и ещё и ещё. И в результате потратить много больше времени, чем если прочитать доки и сделать сразу нормально. Так что если важно время и оно ценно - то никаких калокубов однозначно!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3463035#p3463035"]P.S. ссылка на goodboard.ru наконец-то открылась. Можно и почитать.[/uquote]

Да бывает форум глючит но не часто, вероятно админ что-то прикручивает.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

Сообщение pvit »

[uquote="jcxz",url="/forum/viewtopic.php?p=3463212#p3463212"]Продуктивность ярко видна по форумам: все форумы просто заполнены стонами пользователей всяких калокубов: "нашёл в нете это. прикостылил к себе, что-то понатыкал там и там - не работает! :(( перетыкал по-другому - опять не работает! :((( спасите-помогите - куда ещё потыкать?? - неделю уже бьюсь, а никак не получается! :(((".
И практически ни одного вопроса от тех, кто читает мануалы и разбирается сам без всяких либ.
Это очень показательно. 8)

И сделать кое-как, по-быстрому не разбираясь - это значит - переделывать потом и ещё и ещё. И в результате потратить много больше времени, чем если прочитать доки и сделать сразу нормально. Так что если важно время и оно ценно - то никаких калокубов однозначно![/uquote]
IMHO вы съезжаете с конкретного примера на разговоры за жизнь. У меня не было проблем с кубом. И изучение его исходников начинать програмирование с чтения RM желания не прибавило. За тех кого вы видели на форумах отвечать не могу, т.к. делюсь собственным опытом.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

pvit, мы все здесь наблюдали ваше "не было проблем" вы кого сейчас лечите?
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Посмотрел что там сейчас куб генерит:
Первым делом LATENCY:

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

void SystemClock_Config(void)
{

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);

  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
  {
  Error_Handler();  
  }
....
внутри функции работа с регистром напрямую:

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

__STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency)
{
  MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, Latency);
}
и т.д.
imho как пример на подсмотреть пойдет
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3463236#p3463236"]

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

void SystemClock_Config(void)
{

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);

  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
  {
  Error_Handler();  
  }
....
[/uquote]Это пять! Они сами сомневаются что смогли изменить один регистр?
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Конечно сомневаются. Потому что MODIFY_REG изменяет лишь один бит регистра.

Или Вы будете утверждать, что если написать var |= 0x01, то в результате в var будет именно 0x01?

*поправка - не один бит, а сколько задано маской. Так что, возможно, это и лишнее.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

WiseLord, правильно что сомневаетесь , это начало на пути к просветлению.
Прорезались зубы
Аватара пользователя
Сообщения: 225
Зарегистрирован: Сб янв 14, 2012 22:53:50

Сообщение philosoraptor »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3463327#p3463327"]если написать var |= 0x01, то в результате в var будет именно 0x01?[/uquote]

Едва ли товарищ выше, к примеру, умеет эндить и орить, так что |= ему ничего не скажет. А что-то типа var &= ~0xfffc его и вовсе в ступор введет. Причем объяснять ему, почему не var &= 0x0003, совершенно бесполезно.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

philosoraptor, ты только что обгадился по полной и все из-за абсолютной невнимательности...
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Есть стандартные файлы кода запуска. В файлах есть комменты обьясняющие че по чем зачем и почему. О чем базар?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

philosoraptor писал(а):А что-то типа var &= ~0xfffc его и вовсе в ступор введет. Причем объяснять ему, почему не var &= 0x0003
Разве не одно и тоже?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18789
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Мурик писал(а):Разве не одно и тоже?
ну как бы для 32-битной платформы не одно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Тип переменных нам неизвестен. Может он uint16_t.
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3463268#p3463268"]Это пять! Они сами сомневаются что смогли изменить один регистр?[/uquote]
Это писали особо недоверчивые индусы. Сомневаться им приходится во всем, включая даже то, что регистры непосредственно после подачи питания находятся в их дефолтных состояниях.
Вот кусок стартапа, функции, которая вызывается до main():

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

void SystemInit(void)
{
  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001U;
HSION там уже в единице, но индусы считают, что лишний раз не повредит. Ну а там где один лишний раз, то и другой уже лишним точно не будет:

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

void SystemClock_Config(void)
{

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);

  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_0)
  {
  Error_Handler();  
  }
  LL_RCC_HSI_Enable();

   /* Wait till HSI is ready */
  while(LL_RCC_HSI_IsReady() != 1)
  {
    
  }
  LL_RCC_HSI_SetCalibTrimming(16);

  LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);

  LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);

  LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);

   /* Wait till System clock is ready */
  while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
  {
  
  }
Все вышеперечисленные действия инитят регистры в их дефолтовые значения, которые и до этого те же самые значения имели. И как можно видеть, LL_RCC_HSI_Enable() пытается взвести изначально взведенный бит HSION уже во второй раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Вообще, можно придумать ситуации когда прошивка стартует с недефолтными регистрами.
Ответить

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