Sign in to follow this  
Ittido

IWDG и запись во FLASH

10 posts in this topic

Ittido    10

Добрый день. Имеется следующая ситуация. Сторожевой таймер (iwdg) сбрасывается каждую милисекунду. Таймер отсчитывает 1,4 милисекунды для сброса. Всё работает до момента включения записи во flash новых параметров. Запись ведётся на одну страницу. Вопрос как можно остановить / отключить сторожевой таймер на время записи? Методом перебора тайминга таймера определил что запись занимает 0,0254 Сек. То есть если сбрасывать сторожевой таймер с периодом больше 0,0254 то сброса процессора не происходит. Пробовал переинициализировать таймер на время записи - безрезультатно. Новая инициализация не проходит. Создаётся впечатление что после того как он запущен, туда не достучаться.

Share this post


Link to post
Share on other sites
mail_robot    1487

надо наверное внимательно почитать мануал на эту тему. Скорее всего вы что-то делаете не так как там написано

вот это вы конечно не читали

Цитата

Register access protection
Write access to the IWDG_PR and IWDG_RLR registers is protected. To modify them, you
must first write the code 0x5555 in the IWDG_KR register. A write access to this register
with a different value will break the sequence and register access will be protected again.
This implies that it is the case of the reload operation (writing 0xAAAA).
A status register is available to indicate that an update of the prescaler or the down-counter
reload value is on going.

 

Share this post


Link to post
Share on other sites
Ittido    10

Уточню. Во время старта я инициализирую сторожевой таймер со значением сброса каждую 1,4 мСек. Перед записью во флеш я вновь запускаю функцию инициализации сторожевого таймера (И в ней всё то на что вы мне указываете есть) с новым временем сброса - но это безрезультатно.

Share this post


Link to post
Share on other sites

DC/DC-преобразователи MORNSUN R3. Повышенная надёжность - сниженная стоимость!

Особенностью преобразователей R3 являются улучшенные технические характеристики, повышенная надёжность и сниженная стоимость. Электрическая прочность изоляции представленных преобразователей не менее 1500 В, а температурный диапазон применения -40…105ºС.

Подробнее...

mail_robot    1487

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

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

Share this post


Link to post
Share on other sites
Ittido    10

Вот код.

void InitWDG(uint16_t z)                    //
 {RCC_LSICmd(ENABLE);                                //Включить внутренний генератор 40 кГц
  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)//Ожидаем готовности генератора
       {}
  /* Включаем Watchdog*/
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  IWDG_SetPrescaler(IWDG_Prescaler_8);                 //Делитель  8
  IWDG_SetReload(z);                                //z = 7 (1,4 мСек.)
  IWDG_ReloadCounter();
  IWDG_Enable();
 }

 

А как остановить сторожевой таймер вы не знаете?

Решено. Написал код и всё понял. Выкинул запуск внутреннего генератора из функции и всё заработало. Спасибо.

Share this post


Link to post
Share on other sites

Новые методы уменьшения дрейфа нуля в малошумящих АЦП Texas Instruments

Стабилизация с помощью двойного прерывания с двойным контролем в новых АЦП ADS1235 производства Texas Instruments позволяет снизить до минимума напряжение смещения и достичь высокой точности в измерительных цепях современных прецизионных цифровых приборов.

Подробнее...

mail_robot    1487

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

Share this post


Link to post
Share on other sites
Ittido    10

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

Share this post


Link to post
Share on other sites
mail_robot    1487
2 минуты назад, Ittido сказал:

сброс сторожевого таймера в прерывании от таймера каждую милисекунду

а в таком случае сторожевик точно имеет смысл?

Share this post


Link to post
Share on other sites
Ittido    10

От заввисания процесора - да. Оконный же роботает от системного тактирования.

Я тут подумал, если остановить генератор на 40 кГц разве это не приведёт к остановке IWDG.

Share this post


Link to post
Share on other sites
mail_robot    1487
1 час назад, Ittido сказал:

если остановить генератор на 40 кГц

смешной такой. Это все равно что остановить каток.

зависания процессора бывают разные. Можно совершенно случайно налипнуть на зависание в банальном while, который ждет какого нибудь флага готовности (которого никогда может и не случится) и при этом прерывания от таймера будут отлично отрабатываться.

 

Edited by mail_robot

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By Катерина
      Очень-очень нужны инженеры по схемотехнике!!! 
      АО «НПО «Орион» сейчас находится в поиске крутых и грамотных специалистов для разных проектов! Мы занимаемся разработкой микрофотоэлектроники как на гражданку, так и на оборонку. Это и  тепловизоры, и SWIR-камеры, инфракрасные термосканы и конструктор Smart Blocks на базе Ардуино, а также фотоприемные устройства, лазерные целеуказатели, очки ночного виденья, микрокриогенные системы и другое.
      Нам нужен такой человек, который по сформулированному техническому заданию сможет с нуля разработать и спроектировать схему «на железе» для того или иного проекта. Также создать макет электронной схемы, протестировать и испытать его. Ну и естественно сопроводить процесс производства от опытного до серийного. Работа в паре с инженером-конструктором. Очень круто, если вы уже проектировали ПЛИС и микроконтроллеры.
      Наши плюшки:
      Интересные проекты, некоторые из них в России еще никогда не разрабатывались. У вас будет возможность для творчества, новых разработок и предложений. Стабильность и гарантию! Не смотря на наши проекты и разработки в гражданском направлении, предприятие у нас государственное и соблюдает все нормы трудового законодательства. Очень вкусную столовую на территории с завтраками и обедами (средняя стоимость ~ 150 рублей). Уникальную возможность – увидеть производство матриц фоточувствительных элементов от подложки до готовой матрицы, которую потом Вы и будете разводить на схеме. Множество спортивных и культурных мероприятий в большом и дружном коллективе. А также для пешеходов – доступность от метро Выхино (7 минут пешком или 1 остановка на автобусе). Бонусом водителям автомобилей - две бесплатные корпоративные парковки. Локация: Москва, ст. метро Выхино;
      График работы: 5/2 с 9:00 до 17:45 (+/- час);
      З/п по результатам собеседования
      Контакты: hr@npo-orion.ru
      +7 499 786 3669 (Екатерина) 
    • By oops13
      Простите, продублирую свой пост в новой теме:
      Форумчане, коллеги! Подскажите, пожалуйста. CoIDE выдает вот такую ошибку при записи во флешпамять:  Error: Connect failed, check config and cable connection. Со шнуром USB всё в порядке, ST-Link Utility установил. Но в диспетчере устройств драйвер STM32 почему-то именно в разделе дисковых устройствах отображается(в контроллерах USB его нет). На отладочной плате Discovery горит Красный светодиод. Настройки дебаггера в CoIDE прилагаю. Спасибо.

    • By i.vozvahov
      Доброе утро, форумчане!
      Еще по прошлому своему вопросу я скорее всего поразил вас своей безграмотностью, но я попытаю счастье и задам еще один вопрос.
      Мне необходимо, как я уже написал в заголовке, подключить к МК память на 256МБ, то есть это на 2Gb. Но суть вопроса даже в другом, я смотрел даташиты на всевозможные модели и видел только памяти с вшнешней шиной в 8 и 16 бит. Затем стал читать общую спецификацию и там тоже видел информацию только на эти два типа. Но каких-то конкретных фраз, что nand flash памяти с большими разрядностями не выпускают, я не видел. Бывают ли памяти с большими разрядностями nand flash?
      И небольшой вопрос именно по структуре работы. Если у нас 2Gb, то есть надо покрыть адреса в 31бит, то есть для задания адреса как раз и надо минимум 4-5циклов. На работе по циклам и основывается работа nand flash памяти, все же верно?
      Если есть возможность, был бы очень благодарен на какую-нить ссылку или книгу, кот-ая совсем развеяла бы все мои вопросы. Честно пробовал искать, но тяжело фильтровать информацию самостоятельно.
      Еще раз прошу прощения за свои базовые вопросы.
      Спасибо.
    • By Batai
      Здравствуйте, весь день голову ломаю...Нужно подружить PIC16F72 с Flash-памятью AT45DB161D.  В порядке эксперимента для начала хочу прочитать регистр статуса и идентификатор памяти, но она ничего совсем не отвечает .  вот код:
      ;========== Настройка МК ============================================== SetMCU CALL Pause1s CLRF STATUS CLRF PORTA CLRF PORTB CLRF PORTC BSF STATUS, RP0 ;Банк 1 MOVLW b'00000000' ;Значение для направления PORTA MOVWF TRISA ;Настройка PORTA MOVLW b'00000000' ;Значение для направления PORTB MOVWF TRISB ;Настройка PORTB MOVLW b'00010000' ;Значение для направления PORTC MOVWF TRISC ;Настройка PORTC ;========== Инициализация SPI =========================================== BCF STATUS, RP0 ;Банк 0 CLRF SSPSTAT MOVLW b'00100000' ;Значение для настройки SPI MOVWF SSPCON ;Настройка SPI BSF PORTC, 6 ;Установка CS0 ;========== Чтение идентификатора AT45DB161D BCF PORTC, 6 ;Опускаем CS MOVLW 0x9F ;Опкод для чтения идентификатора CALL SPI_Trans ;Обмен SPI MOVLW 0x00 ;Ждем ответ CALL SPI_Trans MOVF SPI_RX,0 ;Принятый байт в аккумулятор MOVWF PORTB ;Вывод значения BSF PORTC, 6 ;Завершение передачи stop GOTO stop ;Бесконечный цикл ;========== Передача по SPI ====================================================================================================== SPI_Trans MOVWF SSPBUF ;Передача байта CALL Pause1ms ;Ожидание завершения передачи MOVF SSPBUF, 0 ;Копирование принятого байта MOVWF SPI_RX RETURN В протеусе с SPI_Debugger-ом все работает, если подставить на место ответа какое-нибудь значение, оно выводится в портБ. Но в железе с подключенной памятью ничего не происходит. Выводы памяти RESET, WP соединены с питанием. Питание 3,3В. Помогите, пожалуйста)
    • By kalexi
      Вопрос в том как это сделать? И можно ли? Что нужно:
      * Загрузиться
      * Сгенерировать байткод прямо в программе
      * Передать ему выполнение
      * После окончания его работы вернуться в место вызова и получить результат.
      Примером самой простой подпрограммы может быть: var + 1.