Перейти к содержанию
    

Сергей Борщ

Модератор
  • Постов

    10 905
  • Зарегистрирован

  • Посещение

  • Победитель дней

    31

Весь контент Сергей Борщ


  1. 64-битного. И этот 64-битный называется UID64 и он не имеет ничего общего с 96-битным (в котором может быть все, что угодно, например - номер пластины и положение кристалла на пластине в ASCII).
  2. Откопать в загашниках старую-старую материнку с сетью на борту. Вычитать из нее MAC и нагенерить своих, добавляя к нему по единичке. Все ровесники этой матринки давно в утиле, пересечений не будет.
  3. Эти ссылки пишут неправильно. char - это отдельный тип, который может быть как знаковым, так и беззнаковым в зависимости от ключей командной строки при вызове компилятора. Поэтому в правильно написанной программе он должен использоваться исключительно для хранения символов. Для чисел должен использоваться signed char или unsigned char (а лучше - их псевдонимы из stdint.h - int8_t и uint8_t). Поэтому ваш пример написан криворуким программистом и массив input_bytes должен быть объявлен как uint8_t input_bytes[ENCODED_FRAME_SIZE] .
  4. Казалось бы - какие молодцы японцы! А ВВ не задумывался, куда девался воздух в отечественных пылесосах? И никто из сотрудников лаборатории этого тоже не знал. Вот так и рождаются легенды о заморских чудесах...
  5. Можно. В противном случае вы ведь все равно будете исполнять команды (опроса флага завершения перехода).
  6. R45 - 560 Ом (маркировка "561"), J2 - перемычка (маркировка "0"), R18, R19 - 47 Ом (маркипровка "470"), диоды рядом с J2 - LL4148. Но это мало что даст - скорее всего там еще куча всего выгорела. Например, весьма вероятен выход из строя ZD2 (BZV55-4V7) и всего, что запитано после него.
  7. Ничего странного: Оттуда же про постоянный ток: Ну и подробнее по ссылке.
  8. Тут дело не в ее размере, а в том, что на переменном токе она быстро гаснет сама. А на постоянном может держаться бесконечно пока в зону дуги подается электрод (см. "дуговая лампа")
  9. Аа... понятно. Я сделал свой stm32.h в который поместил все #include "stm32f????.h Больше ничего полезного в этом вашем stm32f4xx.h нет.
  10. В этом файле такого имени нет. Выкиньте кубовые файлы с подобной чушью, оставив вместо них пустые заглушки (чтобы не менять сам stm32f4xx.h и сохранить возможность его обновления без правок).
  11. Модератор: прошу всех желающих отметиться в этой теме еще раз перечитать правила раздела "Предлагаю работу" и потом не обижаться.
  12. Замените R1 на 470 Ом и выносите кнопку хоть на два метра.
  13. Так проблема в этом? OpenOCD такое умеет, но время подключения может быть до 6.5 сек. Я-то думал надо подключиться и перехватить управление буквально с первых команд - такого, наверное, не умеет никто.
  14. Остановите отладчиком, прочитайте и сохраните на бумажку или в блокнот на компе значение регистров RCC, TMR, PWR. Запустите, дождитесь сбоя, остановите, сравните. Несущая частота ШИМа тоже пропорционально меняется? У F103 не особо много возможностей менять тактирование таймеров - в отличие от более новых тут оно прибито гвоздями к APB. То есть причина либо в измененном делителе APB (если UART, который продолжает работать висит на другой APB), либо в предделителе самого таймера (в обоих этих случаях должна меняться несущая частота ШИМ), либо в программной ошибке, из-за которой значения в CCR таймера грузятся в N раз реже (это если несущая частота не меняется). Я делаю ставку на последний вариант. Ой, да хватит пугать. Китаиса их делают так долго и в таких количествах, что все ошибки кристалла давно вылизали.
  15. Запускать без отладчика. В интересующих местах программы дергать ногами, писать их состояние логическим анализатором. Выводить диагностику в USART, смотреть ее в терминалке на компе.
  16. Да, вы правы - в первом случае DIEROK не выставляется.
  17. Следите за руками. Вот так не работает: LPTIM1->DIER = 0 | 0 * LPTIM_DIER_UEIE // Update event DMA request enable | 0 * LPTIM_DIER_CMP2OKIE // CCR2 update complete interrupt enable | 1 * LPTIM_DIER_CC2IE // Capture/Compare 2 interrupt enable | 0 * LPTIM_DIER_REPOKIE // RCR update interrupt enable | 0 * LPTIM_DIER_UEIE // Update event interrupt enable | 0 * LPTIM_DIER_DOWNIE // Direction change to down interrupt enable | 0 * LPTIM_DIER_UPIE // Direction change to up interrupt enable | 0 * LPTIM_DIER_ARROKIE // ARR update complete interrupt enable | 0 * LPTIM_DIER_CMP1OKIE // CCR1 update complete interrupt enable | 0 * LPTIM_DIER_EXTTRIGIE // External trigger valid edge interrupt enable | 0 * LPTIM_DIER_ARRMIE // Autoreload match interrupt enable | 0 * LPTIM_DIER_CC1IE // Capture/Compare 1 interrupt enable ; // enable timer LPTIM1->CR = 0 | 0 * LPTIM_CR_RSTARE // Reset after read enable, can be set when LPTIM is enabled | 0 * LPTIM_CR_COUNTRST // Reset counter, can be set when LPTIM is enabled | 0 * LPTIM_CR_CNTSTRT // Start in continuous mode, can be set when LPTIM is enabled | 0 * LPTIM_CR_SNGSTRT // Start in single pulse mode, can be set when LPTIM is enabled | 1 * LPTIM_CR_ENABLE // Enable ; А вот так работает: // enable timer LPTIM1->CR = 0 | 0 * LPTIM_CR_RSTARE // Reset after read enable, can be set when LPTIM is enabled | 0 * LPTIM_CR_COUNTRST // Reset counter, can be set when LPTIM is enabled | 0 * LPTIM_CR_CNTSTRT // Start in continuous mode, can be set when LPTIM is enabled | 0 * LPTIM_CR_SNGSTRT // Start in single pulse mode, can be set when LPTIM is enabled | 1 * LPTIM_CR_ENABLE // Enable ; LPTIM1->DIER = 0 | 0 * LPTIM_DIER_UEIE // Update event DMA request enable | 0 * LPTIM_DIER_CMP2OKIE // CCR2 update complete interrupt enable | 1 * LPTIM_DIER_CC2IE // Capture/Compare 2 interrupt enable | 0 * LPTIM_DIER_REPOKIE // RCR update interrupt enable | 0 * LPTIM_DIER_UEIE // Update event interrupt enable | 0 * LPTIM_DIER_DOWNIE // Direction change to down interrupt enable | 0 * LPTIM_DIER_UPIE // Direction change to up interrupt enable | 0 * LPTIM_DIER_ARROKIE // ARR update complete interrupt enable | 0 * LPTIM_DIER_CMP1OKIE // CCR1 update complete interrupt enable | 0 * LPTIM_DIER_EXTTRIGIE // External trigger valid edge interrupt enable | 0 * LPTIM_DIER_ARRMIE // Autoreload match interrupt enable | 0 * LPTIM_DIER_CC1IE // Capture/Compare 1 interrupt enable ; Хотя в в обоих случаях отладчик показывает, что нужные биты в DIER устанавливаются. Для регистров CCRx, ARR, RCR в документации явно указано, что писать их можно только при активированном (enabled) таймере, для CFGR - наоборот, при неактивном. На запись в DIER никаких ограничений в документации нет. Куб оказался ни при чем, но помог. В его проекте DIER вообще не трогался и влияющих на него галочек я не обнаружил. Куб просто запускал таймер и когда я, остановив программу, отладчиком включал нужные биты в DIER на уже включенном активированном и запущенном таймере - прерывания запускались. Вычитывать DIER после записи пробовал - не помогало.
  18. В кубовом проекте прерывание происходит. "Будем искать".
  19. Это учтено. Флаги в ISR у меня выставляются. Если их сбросить - выставляются снова. Тут все хорошо. Ставлю куб от безысходности...
  20. Ой. 13 таблиц. Но да, тут два канала и соответствующий флаг в ISR выставляется. А проблема с любым флагом. Ни одно событие, взводящее флаг в ISR, не вызывает прерывание. На APB включен делитель 2. Попробовал 16 - не помогает.
  21. В руководстве пользователя 12 таблиц в разделе, посвященном LPTIM. Ни под одной из них я упоминания CC2IE не нашел. Какую именно таблицу вы имеете ввиду?
  22. Это условие выполняется. Код в исходном сообщении исправил. А смысл делать это вручную? Таймер должен сам взвести именно этот бит, но не взводит.
  23. Не взлетело - ни в одном ISPR ни один бит не взводится. В другие прерывания заходит...
  24. Да, как обычный таймер. Спячки тоже пока нет.
  25. Тоже пробовал - то же яйцо, только в профиль.
×
×
  • Создать...