Кто любит RISC в жизни, заходим, не стесняемся.
Ср май 08, 2019 07:19:13
Тревожный звоночек.
РазВы лучше аппаратуру, OS, драйверы изучайте и пишите хорошо. Книжки почитайте.
ДваДля начала, лишает автора премии.
ТриБольше на 2 строки, но понятно и никто волнистой линией ничего не подчеркивает
Четыренапример отсутствием неочевидных конструкций а-ля "я у мамы кулхацкер"
Ср май 08, 2019 17:51:05
А по сути ничего, как обычно.
Вт май 14, 2019 01:29:28
Компактный код для организации микросекундных задержек по таймеру на 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().
Этим занимается операционная система из коробки. Время было потрачено в пустую. Она даже в тиках умеет это делать.
Вт май 14, 2019 16:16:55
И как называется сия "операционная система" ?
Чт май 23, 2019 21:21:30
Коллеги, а подскажите, плз, как по-быстрому перезапустить программу с самого начала, с начальной загрузкой указателя стека, очисткой всех полей и пр.?
Чт май 23, 2019 23:31:27
afz, установить 1 в бите SYSRESETREQ регистра SCB_AIRCR, выполнить команду DSB и ждать, пока система не перезапустится.
Например, так:
- Код:
SCB->AIRCR = 0x05FA0004;
__DSB();
while(1);
Пт май 24, 2019 11:37:35
есть готовая функция 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();
}
}
Чт май 30, 2019 19:59:25
Подскажите, можно ли динамически, не прекращая работу МК менять делитель PLL при работе от RC генератора (HSI) или это не возможно?
В одном из проектов нужно менять частоту ШИМ от 1730 до 1800 килогерц с шагом не более 4 КГц
С помощью одного только делителя таймера и регистра HSITRIM этого невозможно добиться, они друг друга не перекрывают.
Что я имею ввиду.
Например у нас частота (после PLL) 48 МГц,
делитель=27, HSITRIM=0, частота ШИМ при этом 1754 КГц
делитель=28, HSITRIM=31, частота ШИМ при этом 1734 КГц
То есть получается ступенька, перекрытия не происходит.
Но если сделать частоту МК 44 МГц (уменьшив делитель PLL на единицу), то можно будет получить частоты между 1734 и 1754 КГц
Чт май 30, 2019 20:22:16
Можно. Особенно если тип МК указать.
Чт май 30, 2019 21:33:23
МК STM32F030C8T6
Я еще раз внимательно прочитал RM и судя по всему все таки можно.
Но нужно сначала отключить PLL поменять множитель и потом обратно его включить.
Только вот непонятно, получается что МК какое то время будет работать на очень низкой частоте чего хотелось бы избежать
Из за этого нарушиться работа всех таймеров (а используются почти все таймеры кроме TIM1) и дисплей будет очень медленно обновляться, он подключен по SPI и скорость UART будет неправильная
Теоретически можно одновременно с отключением PLL пересчитать делители всех таймеров и на время использовать их, а после все вернуть обратно (с учетом более низкой частоты МК)
Чт май 30, 2019 21:55:17
Например у нас частота (после PLL) 48 МГц,
делитель=27, HSITRIM=0, частота ШИМ при этом 1754 КГц
Уверен, что 1754 KHz - это именно частота ШИМа?
Пт май 31, 2019 07:54:58
Да, по рассчетам вот так получается, реально тоже все похоже на правду
(48 000 000-(40 000*16))/27 = 1 754 074 Гц
40000 это значение на сколько изменяется частота RC генератора при изменении HSITRIM на единицу
Пт май 31, 2019 08:20:36
Да, по рассчетам вот так получается, реально тоже все похоже на правду
(48 000 000-(40 000*16))/27 = 1 754 074 Гц
Это мои сомнения не развеяло
Если, допустим, нужно на этом ШИМе меандр генерить, естественно с частотой 1'754'074 Гц, что будет в CCR?
Пт май 31, 2019 11:51:14
Для меандра (не совсем идеального, но в моем случае не критично) я делаю вот так
TIM3->PSC = 0;
TIM3->ARR = 27;
TIM3->CCR1 = (uint32_t)(TIM3->ARR / 2);
Возможно я неправильно выразился, написав что предделитель у меня 27, я имел ввиду регистр автоперезагрузки (ARR = 27)
Пт май 31, 2019 15:58:28
Возможно я неправильно выразился, написав что предделитель у меня 27, я имел ввиду регистр автоперезагрузки (ARR = 27)
Ясно, но тогда нормального решения я не вижу, слишком большие частоты. Возможно стоит взять какой-нибудь F334 у которого таймер на 4.6GHz...
Пт май 31, 2019 17:23:08
Да, камушек интересный, три компаратора, один ОУ, внешнее напряжение VREF. Быстрый АЦП. Судя по всему он делался под управление импульсными источниками питания.
Правда дороговато 3$ за штуку. Но для домашних поделок пойдёт.
Хотя и на stm32f030 я попробую добиться желаемого результата, меняя делитель PLL можно регулировать частоту плавно в любых диапазонах. Единственно что сильно усложняются алгоритмы работы.
Пн июн 03, 2019 09:45:15
Коллеги, а как прицепить русский (1256) к Кейлу 5.24 ? Для комментариев мне хватало UTF-8, но не тянуть же в проект шрифты UTF-8 ? Мне бы и 1256 хватило...
Видел UvEdit.dll для 5.12, но не знаю, подойдет ли она для 5.24, и все ли будет работать правильно? Вроде-бы у 5.24 в редакторе какие-то отличия от старых, а эта dll-ина ведь, как раз, редактор?
Пн июн 03, 2019 12:03:25
afz, поставить 5.27. Там есть win 1251...
Ср июн 05, 2019 01:06:45
Установил 5.28, включил 1251, изба фигвам, опять вопросительные знаки - и при прямом наборе, и при вставке с клипборда. Надо подкрутить что-то еще?
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.