Тююю, а який Idle нужон тады? В каком-нить F746 точно такой же Idle, как и в F103, потому как Idle - это состояние неактивности более величины кадра. Таймаут, принятый в модбасе, тут не рассматривается, это другое. А Idle frame у уарта - это свободная линия более длины одного кадра.Это не тот idle
STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
Последний раз редактировалось НовыйДень Сб май 21, 2022 18:54:11, всего редактировалось 2 раза.
Re: STM32 новичку в ARM что к чему
Lum1noFor,
да даже в Вашем алгоритме можно,
зачем же Вы обнуляете счетчик, ставьте -1 что ли.
зачем использовать признак другого статуса.
да даже в Вашем алгоритме можно,
зачем же Вы обнуляете счетчик, ставьте -1 что ли.
зачем использовать признак другого статуса.
Re: STM32 новичку в ARM что к чему
Идею понял, благодарю. Один знакомый также подкинул интересную идею обнулять таймер по прерыванию EXTI от ноги RX. То есть любую другую ногу спаивать с RX, и вншать на нее EXTI. Если RX дергается - обнулять таймер. Попробую все, что советовали - и Idle, и таймер. Всем спасибо.
Re: STM32 новичку в ARM что к чему
EXTI не обязательно. Ровно то же действие будет иметь любое прерывание от UART.
Re: STM32 новичку в ARM что к чему
Знакомый прикололся?
Это сколько прерываний на один байт будет?
Выключать/включать будете? - плюсом еще одна задача.
Это сколько прерываний на один байт будет?
Выключать/включать будете? - плюсом еще одна задача.
Re: STM32 новичку в ARM что к чему
Прошу прощения, он не говорил именно про EXTI - у меня уже бошка не работает под вечер, чушь сказал. Он советовал обнулять таймер через ногу RX и все. А вот как - не сказал. Это я уже сам по перегрузу мозгов напридумывал.
Re: STM32 новичку в ARM что к чему
извратится на аппаратный сброс таймера можно, только не у всякого таймера вход, на который можноб было повесить эту функцию, выведен наружу.
да и зачем, неужели с уартом не хватает времени.
да и зачем, неужели с уартом не хватает времени.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Так самый простой конечный автомат + системный счетчик на SysTick — вуаля!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Вы что, прикалываетесь? Запускаете любой самый простой свободный таймер на переполнение. В каждом прерывании по приходу байта обнуляете его. В прерывании переполнения таймера получаете ваш таймаут.
Добавлено after 1 minute 39 seconds:
Eddy_Em, ты через сообщение как рецепт от всех бед "конченые автоматы" рекомендуешь. Можешь пример их применения/реализации показать?
Добавлено after 1 minute 39 seconds:
Eddy_Em, ты через сообщение как рецепт от всех бед "конченые автоматы" рекомендуешь. Можешь пример их применения/реализации показать?
Re: STM32 новичку в ARM что к чему
спад на PA6 сбросит TIM3 (см. rm0008 15.3.14 Timers and external trigger synchronization )
TIM3->SMCR = (TIM_SMCR_TS_0 |TIM_SMCR_TS_2 |TIM_SMCR_SMS_2); // TS=101 (PA6) SMS=100 (reset)
TIM3->CCMR1 = 0;
TIM3->CCER = TIM_CCER_CC1P;
но в данном случае потребности в таком замуте нет никакой.
И да, прерывания дополнительно еще придется разруливать.
TIM3->SMCR = (TIM_SMCR_TS_0 |TIM_SMCR_TS_2 |TIM_SMCR_SMS_2); // TS=101 (PA6) SMS=100 (reset)
TIM3->CCMR1 = 0;
TIM3->CCER = TIM_CCER_CC1P;
но в данном случае потребности в таком замуте нет никакой.
И да, прерывания дополнительно еще придется разруливать.
Re: STM32 новичку в ARM что к чему
[uquote="Lum1noFor",url="/forum/viewtopic.php?p=4235432#p4235432"]Идею понял, благодарю. Один знакомый также подкинул интересную идею обнулять таймер по прерыванию EXTI от ноги RX. То есть любую другую ногу спаивать с RX, и вншать на нее EXTI. Если RX дергается - обнулять таймер. Попробую все, что советовали - и Idle, и таймер. Всем спасибо.[/uquote]
Люди, вы читать не умеете? В F1 есть IDLE и он нормально функционирует. У меня на нём Модбас работает. Щас поищу ту давнишнюю прогу.
Люди, вы читать не умеете? В F1 есть IDLE и он нормально функционирует. У меня на нём Модбас работает. Щас поищу ту давнишнюю прогу.
Re: STM32 новичку в ARM что к чему
Вот именно. А то кое-кто тут (не будем показывать пальцем на этого "героя", он просто перепутал слова по незнанию) говаривал, дескать нету в F103 Idle. Хе, кудаж без него то! В F103 нету Receive TimeOut Flag(RTOF), который есть в F0, F3, F7. Но это как бы не шибко большая беда.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Только и можете что к словам цепляться и зубоскалить. Lum1noFor нужен именно таймаут. Зачем вы ему Idle втюхиваете?
Re: STM32 новичку в ARM что к чему
Так вначале думай, потом пиши. А коль уж ошибся, то скажи, что дескать погорячился, бывает. Все поймут и без зубоскальства.
А прерывание то одно, что для Idle, что для приема, что для ошибки кадра. Но Idle Flag является средством разграничения пакетов в посылке. В нормальном режиме именно по обнаружению Idle производится запуск и останов DMA-приема. И если стоит задача реализовать таймаут без RTOF, то после обнаружения Idle в фазе приема пакета нужно запустить таймер на выбранный интервал, но не сбрасывать счетчик DMA. Как только сработает прерывание таймера, только тогда можно считать пакет полностью принятым и перезапустить счетчик DMA, а пакет отдать на разбор.
А прерывание то одно, что для Idle, что для приема, что для ошибки кадра. Но Idle Flag является средством разграничения пакетов в посылке. В нормальном режиме именно по обнаружению Idle производится запуск и останов DMA-приема. И если стоит задача реализовать таймаут без RTOF, то после обнаружения Idle в фазе приема пакета нужно запустить таймер на выбранный интервал, но не сбрасывать счетчик DMA. Как только сработает прерывание таймера, только тогда можно считать пакет полностью принятым и перезапустить счетчик DMA, а пакет отдать на разбор.
Последний раз редактировалось НовыйДень Вс май 22, 2022 11:55:10, всего редактировалось 1 раз.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Да, я перепутал idle с таймаут. Но это не отменяет того что на f103 для решения задачи таймер нужен.
Re: STM32 новичку в ARM что к чему
А никто и не против таймера. Покажите, кто тут против этого? Но таймер можно выбрать как аппаратный типа TIM4, так и программный таймер на основе SysTicj.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
ЗЫ: Меня вот в соседней теме лечят, что на третьей планете от солнца никто не ошибается. Врут, поди?
Re: STM32 новичку в ARM что к чему
Не знаю, я не астроном, в планетах не разбираюсь.
Ошибаются хоть иногда - все. Но не многие умеют признавать свои ошибки и не обсираться от справедливой критики
Ошибаются хоть иногда - все. Но не многие умеют признавать свои ошибки и не обсираться от справедливой критики
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Я, кстати, и забыл, что у меня есть уже готовый прием с таймаутами:
Если на предыдущем сообщении был таймаут, следующее даст об этом знать.
Но если сделать на конечных автоматах с проверкой таймаута снаружи, можно будет об этом сразу узнать, как таймаут кончится.
Но такой КА любой дятел может написать, зачем форум загромождать? Вот, например. С такими макросами:
Добавлено after 30 minutes 15 seconds:
Кстати, такой вопрос: какие флаги компилятора/сборщика указывать для того, чтобы на STM32F103 работал sqrt? У меня так:
При попытке вызвать sqrt МК зависает.
Хочу проверить, можно ли F103 использовать для компактного тепловизора. А для каждого из 768 пикселей надо по 4 раза sqrt вызвать, и хрен затабулируешь эту дурную функцию (параметров больше одного) ☹
Добавлено after 10 minutes 19 seconds:
Кстати, внутри sqrtf зачем-то используются double!
Код: Выделить всё
void usart1_isr(){
static uint32_t tmout = 0;
if(USART1->SR & USART_SR_RXNE){ // RX not emty - receive next char
if(tmout && Tms >= tmout){ // set overflow flag
bufovr = 1;
idatalen[rbufno] = 0;
}
tmout = Tms + TIMEOUT_MS;
if(!tmout) tmout = 1; // prevent 0
uint8_t rb = USART1->DR;
if(idatalen[rbufno] < UARTBUFSZI){ // put next char into buf
rbuf[rbufno][idatalen[rbufno]++] = rb;
if(rb == '\n'){ // got newline - line ready
linerdy = 1;
dlen = idatalen[rbufno];
recvdata = rbuf[rbufno];
// prepare other buffer
rbufno = !rbufno;
idatalen[rbufno] = 0;
// clear timeout at line end
tmout = 0;
}
}else{ // buffer overrun
bufovr = 1;
idatalen[rbufno] = 0;
tmout = 0;
}
}
}Но если сделать на конечных автоматах с проверкой таймаута снаружи, можно будет об этом сразу узнать, как таймаут кончится.
Но такой КА любой дятел может написать, зачем форум загромождать? Вот, например. С такими макросами:
Код: Выделить всё
#define chstate(s) do{errctr = 0; Tlast = Tms; mlx_state = s;}while(0)
#define chkerr() do{if(++errctr > MLX_MAXERR_COUNT){chstate(M_ERROR); DBG("-> M_ERROR");}}while(0)
#define chktmout() do{if(Tms - Tlast > MLX_TIMEOUT){chstate(M_ERROR); DBG("Timeout! -> M_ERROR"); }}while(0)Кстати, такой вопрос: какие флаги компилятора/сборщика указывать для того, чтобы на STM32F103 работал sqrt? У меня так:
Код: Выделить всё
FP_FLAGS ?= -msoft-float -mfloat-abi=soft
ASM_FLAGS ?= -mthumb -mcpu=cortex-m3 -mfix-cortex-m3-ldrd
ARCH_FLAGS = $(ASM_FLAGS) $(FP_FLAGS)
CFLAGS := -O2 -g -D__thumb2__=1 -MD
CFLAGS += -Wall -Werror -Wextra -Wshadow
CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector
CFLAGS += $(ARCH_FLAGS)
LDFLAGS := -nostartfiles --static -nostdlibs --gc-sections --print-memory-usage
LDFLAGS += -L$(LIB_DIR) -L$(TOOLCHLIB)
LDFLAGS += -T$(LDSCRIPT)
LDLIBS += -lm -lc $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
...
$(OBJDIR)/%.o: %.c
@echo " CC $<"
$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) -o $@ -c $<
$(ELF): $(OBJDIR) $(OBJS)
@echo " LD $(ELF)"
$(LD) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $(ELF)
Хочу проверить, можно ли F103 использовать для компактного тепловизора. А для каждого из 768 пикселей надо по 4 раза sqrt вызвать, и хрен затабулируешь эту дурную функцию (параметров больше одного) ☹
Добавлено after 10 minutes 19 seconds:
Кстати, внутри sqrtf зачем-то используются double!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4235608#p4235608"]При попытке вызвать sqrt МК зависает.[/uquote]Отладчик, опять не нужен?
Вот этого достаточно должно быть
Вот этого достаточно должно быть
Насчёт double - проверяй, чтобы все литералы были с f.-mcpu=cortex-m3 -mthumb -mfloat-abi=soft