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

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

Сообщение 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]
Реклама
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

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

Сообщение 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
Контактная информация:
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

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

Сообщение afz »

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

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

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

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

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

Сообщение 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();
  }
}
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

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

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

Сообщение VladislavS »

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

Сообщение hosturik »

МК STM32F030C8T6

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

Сообщение Reflector »

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

Сообщение hosturik »

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

Сообщение 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?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

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

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

Сообщение Reflector »

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

Сообщение hosturik »

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

Сообщение Myp3ik »

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

Сообщение afz »

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

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

Сообщение dosikus »

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

Сообщение afz »

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

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