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

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

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

Сообщение VladislavS »

Тревожный звоночек.

Раз[uquote="Oxford",url="/forum/viewtopic.php?p=3623298#p3623298"]Вы лучше аппаратуру, OS, драйверы изучайте и пишите хорошо. Книжки почитайте.[/uquote]

Два[uquote="VladislavS",url="/forum/viewtopic.php?p=3626725#p3626725"]Для начала, лишает автора премии.[/uquote]

Три[uquote="Reflector",url="/forum/viewtopic.php?p=3628283#p3628283"]Больше на 2 строки, но понятно и никто волнистой линией ничего не подчеркивает :)[/uquote]

Четыре[uquote="arkhnchul",url="/forum/viewtopic.php?p=3629194#p3629194"]например отсутствием неочевидных конструкций а-ля "я у мамы кулхацкер" :dont_know:[/uquote]
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

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

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

Сообщение Oxford »

[uquote="a5021",url="/forum/viewtopic.php?p=3628186#p3628186"]Компактный код для организации микросекундных задержек по таймеру на STM32F0:

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

__STATIC_INLINE void udelay(uint32_t micros) {
  TIM14->SR = TIM14->CNT = 0;
  TIM14->ARR = micros * 8 - 1;
  while (TIM14->CR1 = TIM14->SR + 1 & TIM_SR_UIF) { ; }
}
Можно даже без оформления в процедуру или макрос вставлять в текст программы по мере надобности. Подразумевается, что рабочая частота мк равна 8мгц и тактирование TIM14 включено. Из любопытного, советую обратить внимание на то, каким образом запускается и останавливается таймер. Чем то это напоминает "трюк" из предыдущей загадки. Специалистам по предупреждениям компилятора уже можно начинать голосить. Тут тоже будет предупреждение внутри while().[/uquote]

Этим занимается операционная система из коробки. Время было потрачено в пустую. Она даже в тиках умеет это делать.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

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

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

Сообщение afz »

Коллеги, а подскажите, плз, как по-быстрому перезапустить программу с самого начала, с начальной загрузкой указателя стека, очисткой всех полей и пр.?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

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

Сообщение ПростоНуб »

afz, установить 1 в бите SYSRESETREQ регистра SCB_AIRCR, выполнить команду DSB и ждать, пока система не перезапустится.
Например, так:

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

SCB->AIRCR = 0x05FA0004;
__DSB();
while(1);
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

есть готовая функция CMSIS:
NVIC_SystemReset();

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

__STATIC_INLINE void NVIC_SystemReset(void)
{
  __DSB();                                                          /* Ensure all outstanding memory accesses included
                                                                       buffered write are completed before reset */
  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
                 SCB_AIRCR_SYSRESETREQ_Msk);
  __DSB();                                                          /* Ensure completion of memory access */

  for(;;)                                                           /* wait until reset */
  {
    __NOP();
  }
}
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

Подскажите, можно ли динамически, не прекращая работу МК менять делитель PLL при работе от RC генератора (HSI) или это не возможно?
В одном из проектов нужно менять частоту ШИМ от 1730 до 1800 килогерц с шагом не более 4 КГц
С помощью одного только делителя таймера и регистра HSITRIM этого невозможно добиться, они друг друга не перекрывают.

Что я имею ввиду.
Например у нас частота (после PLL) 48 МГц,
делитель=27, HSITRIM=0, частота ШИМ при этом 1754 КГц
делитель=28, HSITRIM=31, частота ШИМ при этом 1734 КГц
То есть получается ступенька, перекрытия не происходит.
Но если сделать частоту МК 44 МГц (уменьшив делитель PLL на единицу), то можно будет получить частоты между 1734 и 1754 КГц
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Можно. Особенно если тип МК указать.
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

МК STM32F030C8T6

Я еще раз внимательно прочитал RM и судя по всему все таки можно.
Но нужно сначала отключить PLL поменять множитель и потом обратно его включить.
Только вот непонятно, получается что МК какое то время будет работать на очень низкой частоте чего хотелось бы избежать
Из за этого нарушиться работа всех таймеров (а используются почти все таймеры кроме TIM1) и дисплей будет очень медленно обновляться, он подключен по SPI и скорость UART будет неправильная
Теоретически можно одновременно с отключением PLL пересчитать делители всех таймеров и на время использовать их, а после все вернуть обратно (с учетом более низкой частоты МК)
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="hosturik",url="/forum/viewtopic.php?p=3642305#p3642305"]Например у нас частота (после PLL) 48 МГц,
делитель=27, HSITRIM=0, частота ШИМ при этом 1754 КГц[/uquote]
Уверен, что 1754 KHz - это именно частота ШИМа?
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

Да, по рассчетам вот так получается, реально тоже все похоже на правду
(48 000 000-(40 000*16))/27 = 1 754 074 Гц
40000 это значение на сколько изменяется частота RC генератора при изменении HSITRIM на единицу
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="hosturik",url="/forum/viewtopic.php?p=3642446#p3642446"]Да, по рассчетам вот так получается, реально тоже все похоже на правду
(48 000 000-(40 000*16))/27 = 1 754 074 Гц[/uquote]
Это мои сомнения не развеяло :) Если, допустим, нужно на этом ШИМе меандр генерить, естественно с частотой 1'754'074 Гц, что будет в CCR?
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

Для меандра (не совсем идеального, но в моем случае не критично) я делаю вот так
TIM3->PSC = 0;
TIM3->ARR = 27;
TIM3->CCR1 = (uint32_t)(TIM3->ARR / 2);

Возможно я неправильно выразился, написав что предделитель у меня 27, я имел ввиду регистр автоперезагрузки (ARR = 27)
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="hosturik",url="/forum/viewtopic.php?p=3642566#p3642566"]Возможно я неправильно выразился, написав что предделитель у меня 27, я имел ввиду регистр автоперезагрузки (ARR = 27)[/uquote]
Ясно, но тогда нормального решения я не вижу, слишком большие частоты. Возможно стоит взять какой-нибудь F334 у которого таймер на 4.6GHz...
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

Да, камушек интересный, три компаратора, один ОУ, внешнее напряжение VREF. Быстрый АЦП. Судя по всему он делался под управление импульсными источниками питания.
Правда дороговато 3$ за штуку. Но для домашних поделок пойдёт.
Хотя и на stm32f030 я попробую добиться желаемого результата, меняя делитель PLL можно регулировать частоту плавно в любых диапазонах. Единственно что сильно усложняются алгоритмы работы.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

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

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

Сообщение afz »

Коллеги, а как прицепить русский (1256) к Кейлу 5.24 ? Для комментариев мне хватало UTF-8, но не тянуть же в проект шрифты UTF-8 ? Мне бы и 1256 хватило...

Видел UvEdit.dll для 5.12, но не знаю, подойдет ли она для 5.24, и все ли будет работать правильно? Вроде-бы у 5.24 в редакторе какие-то отличия от старых, а эта dll-ина ведь, как раз, редактор?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

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

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

Сообщение afz »

Установил 5.28, включил 1251, изба фигвам, опять вопросительные знаки - и при прямом наборе, и при вставке с клипборда. Надо подкрутить что-то еще?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Ответить

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