iwdg_init () и iwdg_feed ()

пико
Чт 21 мая 2015 г., 16:23
Кто -нибудь еще проверил эти независимые функции Libmaple, работающие на эскизах, построенные с IDE 1.6.х?

Rogerclark
Чт 21 мая 2015 г., 20:44
Я не помню, чтобы кто -нибудь когда -либо упоминал об этом из них

Можете ли вы уточнить их функцию ?

Mrburnette
Чт 21 мая 2015 г. 11:38
Rogerclark написал:Я не помню, чтобы кто -нибудь когда -либо упоминал об этом из них

Можете ли вы уточнить их функцию ?

Rogerclark
Чт 21 мая 2015 г., 23:52
Луча

Спасибо за это.

Я не помню никого, каждая тестирование этих функций.

пико
Пт 22 мая 2015 г. 5:18 утра
Rogerclark написал:Луча

Спасибо за это.

Я не помню никого, каждая тестирование этих функций.

Rogerclark
Пт 22 мая 2015 г. 5:34
@pico

Глядя в исходном коде, это единственные две функции в IWDG.C, который описывается как «Независимая поддержка сторожевого пса (IWDG)»

Поэтому я подозреваю, что это все, что было реализовано Leaflabs. Это не означает сказать, что у STM32 нет больше причудливых вещей, которые он может сделать,
Мы действительно просто царапаем поверхность его функциональности во многих местах ;-)

пико
Пт 22 мая 2015 г., 6:25 утра
Достаточно справедливо - я полагаю, есть большая вероятность, что все это "просто работает", тогда. Это были функции WDT, с которыми я был знаком еще в старом клене 0.18 дней... Мне просто было интересно, использовали ли люди их после порта Maplelib.

Возможно, используя WDT менее распространенным, чем я предполагаю? Я склонен думать об этом как о довольно основной функциональности (хотя я знаю в мире Arduino в течение длительного времени, WDT считались слишком «опасными» для начинающих, и ранние загрузчики не поддерживали его.)

И даже по этому поводу не поддерживает WDT без небольшого взлома основных файлов! (Хотя я считаю, что Боб Казинс принял запрос на притяжение, который должен сделать это возможным из коробки ", начиная с IDE 1.6.5).

Вот небольшой тестовый эскиз, который должен проверить, был ли он реализован... К сожалению, у меня нет удобного доступа к клону кленового клона, чтобы проверить его прямо сейчас (но у меня есть несколько мини -клонов по заказу). Но если кто -то хочет запустить его и посмотреть, сбрасывается ли он через 8 секунд, я был бы признателен за это!
void USART1_IRQHandler( void ) { long xHigherPriorityTaskWoken = pdFALSE; char cChar; if( USART_GetITStatus( USART1, USART_IT_TXE ) == SET ) { /* The interrupt was caused by the THR becoming empty. Are there any more characters to transmit? */ if( xQueueReceiveFromISR( xCharsForTx[ 0 ], &cChar, &xHigherPriorityTaskWoken ) ) // take the char to be sent from the FreeRTOS queue { /* A character was retrieved from the buffer so can be sent to the THR now. */ USART_SendData( USART1, cChar ); } else { USART_ITConfig( USART1, USART_IT_TXE, DISABLE ); } } if( USART_GetITStatus( USART1, USART_IT_RXNE ) == SET ) { cChar = USART_ReceiveData( USART1 ); xQueueSendFromISR( xRxedChars[ 0 ], &cChar, &xHigherPriorityTaskWoken ); } portEND_SWITCHING_ISR( xHigherPriorityTaskWoken ); }

Rogerclark
Пт 22 мая 2015 г., 6:52
Да

Он сбрасывается через 8 секунд на Maple Mini

Хорошая собачка, вот закуска
Хорошая собачка, вот закуска
О, у меня кончились закуски...
О, у меня кончились закуски...
О, у меня кончились закуски...
О, у меня кончились закуски...
О, у меня кончились закуски...
О, у меня кончились закуски...
О, у меня кончились закуски...
Я не уверен, что вижу вещи с самого начала, так как трудно вовремя добраться до серийного монитора


Пса. Должен работать над любым STM32, не так ли ???

Ппс.

Я думаю, мы должны включить этот заголовок в основные заголовки или, возможно, обернуть эти основные функции в какое -то хорошее имя??

пико
Пт 22 мая 2015 г., 7:32
Спасибо, Роджер... Похоже, он сбросится после 8 -х годов "без закусок". 8-) (Вероятно, следовало бы положить задержку в настройке перед первым сообщением, чтобы дать ему время восстановить серийное соединение и открыть окно.)

Я не могу вспомнить, было ли это, что вы должны были включить IWDG.H Заголовок О Ясность в вашем эскизе или нет, но я, кажется, думаю, что это могло быть так. Вероятно, недостаток в том, чтобы включить его автоматически, однако, учитывая охранник #ifdefs в IWDG.час.

Не уверен, будет ли это работать на каком -либо устройстве STM32, но меня не удивит, если это сделает. Я полагаю, что IWDG с таймером 40 кГц довольно стандарт для ряда устройств, поэтому я ожидаю, что все регистры будут доступны с тем же именем между устройствами.

Rogerclark
Пт 22 мая 2015 г. 8:01
Я только что проверил это

И нуждается в включении

Я включу это в Arduino.h или подобные, что вам не нужно будет включать это

пико
Пт 22 мая 2015 г. 8:07
Одно отличие между The Timers Arm WD и The Timers AVR заключается в том, что вы не можете отключить таймеры ARM после инициализации. Обычно нет никакого большого значения, но стоит отметить.

Rogerclark
Пт 22 мая 2015 г. 8:14
Одно отличие между The Timers Arm WD и The Timers AVR заключается в том, что вы не можете отключить таймеры ARM после инициализации. Обычно нет никакого большого значения, но стоит отметить. ХОРОШО.

Это интересно.

Я думаю, это для безопасности, я.E в случае, если какой -то случайный код случайно выключил WDT

пико
Пт 22 мая 2015 г., 17:31
Чтобы сделать шаг инициализации немного более очевидным, вы можете использовать такую ​​обертку, чтобы указать тайм -аут в MS напрямую:
/** USART device type */ typedef struct usart_dev { usart_reg_map *regs; /**< Register map */ ring_buffer *rb; /**< RX ring buffer */ ring_buffer *wb; /**< TX ring buffer */ uint32 max_baud; /**< @brief Deprecated. * Maximum baud rate. */ uint8 rx_buf[USART_RX_BUF_SIZE]; /**< @brief Deprecated. * Actual RX buffer used by rb. * This field will be removed in * a future release. */ uint8 tx_buf[USART_RX_BUF_SIZE]; rcc_clk_id clk_id; /**< RCC clock information */ nvic_irq_num irq_num; /**< USART NVIC interrupt */ } usart_dev;

Rogerclark
Пт 22 мая 2015 г., 19:50
Или обернуть их и переименовать в wdt_enable () как avr

Rogerclark
Пт 22 мая 2015 г., 23:10
ХОРОШО

Как насчет того, чтобы использовать ту же команду, что и AVR
эн.глин. if [ready to send] then send else while [buffer full] if not ["ready to send" interrupt enabled] then if [ready to send] then send first buffered char else do nothing (wait for interrupt to free the buffer) put input char in buffer enable "ready to send" interrupt

пико
Чт, 04 июня 2015 г., 13:50
Я сегодня читал о часах IWDG, и, что интересно, это не очень точно. Это должно быть принято во внимание, чтобы избежать того, что сторожевой пейзаж не ушел ранее или позже, чем можно предположить.

От http: // incedded-lab.com/blog/?P = 9662:
Выделенные отдельные часы аппаратного обеспечения IWDG поступают от низкоскоростных внутренних (LSI) часов. Это не точное, как можно ожидать. Эта неточность связана с тем, что LSI является генератором RC. Он имеет частоту колебаний несколько от 30 до 60 кГц. Для большинства заявлений предполагается, что средняя частота составляет 45 кГц, хотя она должна быть около 32 кГц. 30-60 кГц, очевидно, огромный ассортимент! Я обнаружил на клонах Maple Mini, с которыми я играл сегодня, что эффективные часы для этих устройств действительно около 45 тыс. Чтобы быть консервативным, однако, я использую условное значение часов, работающих на 51,.2 кГц. Это приводит к простому расчету макроса для преобразования MS в Timer Chicks:

#define iwdg_init_ms (n) iwdg_init (iwdg_pre_256, ((n)/5))

На моих кленовых миниатрах это приводит к тому, что фактический тайм -аут будет на 10% длиннее номинального, я.эн., Тайм -аут, составляющий 8000 мс, внизует ~ 8800 мс. Но, вообще говоря, я бы предпочел, чтобы таймер сторожевого пса ушел немного поздно, чем слишком рано.

Также обратите внимание, что регистр клещей Count Down имеет ширину всего 12 бит, поэтому попытка загрузить значение > 4095 приведет к неожиданным результатам. Это означает, что самые длинные настройки тайм -аута соответствуют 20.475 сек (при условии 51.Часы 2 кГц).

Rogerclark
Чт, 04 июня 2015 г., 22:05
Есть ли способ калибровать это против миллиса ()

WDT работает от собственных отдельных внутренних часов, и есть ли способ прочитать значение регистра часов ?

Я думаю, это все равно будет варьироваться в зависимости от температуры

Mrburnette
Чт, 04 июня 2015 11:37
Rogerclark написал:Есть ли способ калибровать это против миллиса ()

WDT работает от собственных отдельных внутренних часов, и есть ли способ прочитать значение регистра часов ?

Я думаю, это все равно будет варьироваться в зависимости от температуры

пико
Пт, 05 июня 2015 г., 5:00 утра
Mrburnette написал:Я читаю лист данных, что LSI - это RC, только если кристалл 32K не установлен... Следовательно, если домен мощности резервного копирования батареи работает от кристалла, WDT должен быть точным.

Конечно, я мог бы быть совершенно неправ.

Луча

Mrburnette
Пт, 05 июня 2015 г., 11:56 утра
... Но часы IWDG имеют только LSI RC в качестве доступного источника: Да, я согласен.

Луча

кузница
Пн 29 августа 2016 г., 12:48
Поскольку никто не опубликовал то, что вышло из этого, я спрашиваю, есть ли более точный способ использования таймера WD ?
void HardwareSerial::begin(uint32 baud, uint16 tx_buf_size, uint16 rx_buf_size, uint8_t config)

Rogerclark
Пн 29 августа 2016 г. 1:21
Проблема заключается в том, что часы для смотровной собаки не контролируются кристаллом, это внутренние RC -часы, частота которых будет варьироваться в зависимости от температуры и может отличаться для разных партий чипсов.
Частота такта составляет около 40 кГц (от 30 кГц до 60 кГц). Для получения более подробной информации обратитесь к
Раздел электрических характеристик таблиц данных.

Вам нужно будет калибровать значение WDT на основе внешнего кристалла

Для этого вам нужно будет выбрать RTCClock для запуска из LSI (поскольку это тот же генератор, который использует WDT).

Выясните, на какую скорость он работает, и рассчитайте значения разделителя и предварительной нагрузки, необходимых для фактического времени, которое вам нужно.

Вам нужно периодически переоценивать, чтобы обеспечить обновление значения, когда частота генератора изменяется при нагревании устройства (как и при использовании)

Многие системы делают это не только для WDT, но и часто для RTC.


Мне также немного любопытно, зачем вам это нужно, чтобы это было настолько точным, по моему опыту, не ожидается, что WDT не будет точным тайм -аутом

кузница
Пн 29 августа 2016 г. 1:39
Мне нужен сторожевой плетение, потому что я разработаю компьютер ebike, который регулирует выход дроссельной заслонки. Если что -то пойдет не так, мне нужно убедиться, что дроссель снизился. Пока он всегда дольше, чем тот, который я установил, я думаю, (в зависимости от распространения). Так как есть много устройств, с которыми я взаимодействую в то же время, когда я еще не знаю, сколько времени займет обычный цикл, но WDT должен быть настолько маленьким, насколько это возможно (около 50-100 мс)

Rogerclark
Пн 29 августа 2016 г., 2:02
Привет, кузница

Это интересно, я тоже строю проект ebike. Моя не влияет на дроссель, поэтому я не рассматривал возможность использования WDT, но я думаю, что теперь буду реализовать его с WDT

Твоя для Bosch ebike ?

Определенно просто посмотрите на калибровку через значение RTCClock, это не должно быть слишком сложно сделать.

кузница
Пн 29 августа 2016 г. 2:31
Это больше для универсального использования, как CA (http: // www.ebikes.CA/Product-Info/Cycle-Analyst-3.HTML) делал. Может быть, это может работать с интерфейсами Bosh, а не есть один, чтобы проверить :( Есть довольно некоторые контроллеры, которые поддерживают пробку CA прямо сейчас, я использую ее. Некоторые контроллеры могут даже изменять нарисованный Ampere, и так далее, возможности не ограничены в таком проекте (двойной диск и т. Д.). Вот почему мы перешли с маленького нано (использовали 2 единицы, которые были взаимосвязаны через I2C) на STM32. При желании мы думали, что поддержка SmartBMS OZ890 для еще большей настройки на лету :) Я буду в личку, когда у меня будет видео.

Rogerclark
Пн 29 августа 2016 г., 2:47
Из того, что я прочитал, система Bosch довольно заблокирована.

У меня нет ebike, мой папа как бокш, поэтому у меня есть интерес.

Система 8fun выглядит лучше, как ее взлома через RS232 для реконфигурирования нагрузок настроек ;-)

Grumpyoldpizza
Ср 22 февраля 2017 г. 15:11
Быстрый вопрос. Если LSI подает IWDG, может ли IWDG отключить, выключив LSI ? Кто -нибудь пытается ?

BlueSystems
Солнце 12 марта 2017 г. 8:02 вечера
Я нашел этот файл PDF в документах ST Micro на Micro STM32.
http: // www.ул.com/resource/en/product_t ... S_IWDG.PDF

В этом документах дается хорошее описание оборудования STM32, который использует IWDG.

Процессор имеет выделенные часы на 32 кГц для оборудования для сторожевого пласта с 8-битным предварительным масштабным и 12-битным счетчиком.
Таким образом, с 256 предварительным скалером, который заставит каждую собаку тикать 32 000/256 = 125 Гц или 8 мс в длину.
Использование 256 в первом поле производит второе поле 8 мс в десятичных числах.

Второе поле контролирует счетчик обратного отсчета STM32, который составляет 12 бит или 2^12 = 4096.
Таким образом, максимальный тайм -аут может быть 4096 при 8 мс за тик, создавая 32.768 секунд как самое длинное время.
Я лично не пробовал так долго.

Этот пример приводит около 16 секунду тайм -аута и, кажется, работает нормально.
Первое поле представляет собой 256 -то Перскаллер на часах 32 кГц, а второй поданный - 2000 клещей на 8 мс каждый.
iwdg_init (iwdg_pre_256, 2000);

И помните, как только собака включена, нет никакого способа выключить ее, кроме как сбросить силу сброса.
Так что будьте осторожны, чтобы убедиться, что вы кормите собаку во всем свой код после ее включения, или она откусится!

Боб

BlueSystems
Солнце 12 марта 2017 г. 8:14 вечера
Я просто отметил, что лист данных показывает таймер сторожевого пса от 30 кГц до 60 кГц с типичным от 40 кГц.
Странно, как приложение использует 32 кГц в примерах.

Таким образом, 256 предварительно масштаб обычно дает 40 000/256 или 6.4 мс клещей во втором поле.
Может быть на 60 000/256 или 4.2667 мс за тик или общее время из 17.476 секунд

Боб