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

snn_krs

Members
  • Постов

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

  • Посещение

Весь контент snn_krs

  1. Правильно. Если частота 100 МГц, то GPIOD->ODR = 0xF000 в цикле выполняется каждые приблизительно 50 нС. Это меньше 0.5 мкС. Когда в регистр ODR записывается любое значение ( даже то что было ) устанавливается счетчик задержки, в данном случае 0.5 мкС и выход установится только через это время. Если до достижения этого времени вы снова записываете в ODR любое значение счетчик опять устанавливается в 0.5 мкС и выход не изменяется. Поставьте GPIOD->OSPEEDR = 0xFF000000; и светодиоды должны зажечься.
  2. Задержка между GPIOD->ODR while(1) { // Задержка > 0.5 мкС GPIOD->ODR = 0xF000; // Задержка > 0.5 мкС GPIOD->ODR = 0x0000; } Если хотите увидеть мигания, задержка больше 0.1сек
  3. Выходные порты синхронные, состояние меняется с частотой заданной в регистре OSPEEDR. Тоесть между командами изменения состояния порта должно быть больше 0.5 мкС для OSPEEDR = 0 ( 2 MHz )/
  4. Все чипы имеют уникальный ID - Unique device ID register (96 bits). Программист может просто использовать флэш как EEPROM. При запуске программы проверить размер флэш памяти. Можно проверить общий объем памяти, количество занятой и отвести для записи последний блок. Но может просто писать данные в блок по жестко заданному адресу, например 1 М.
  5. Если прошивка привязана к ID чипа, то она не будет работать даже если вы купите stm32f407vgt6. Даже если привязки нет, вероятнрсть, что она заработает не 100%.
  6. В ST-LINK задаете сколько надо считать ( вся память ) и читаете.
  7. На выход схемы предложенной Dr. West ставите конденсатор. Заряжается он быстро, а разряжается медленно (подбор емкости и нагрузочного резистора). Если разряд "-" выключается, то через несколько периодов динамической индикации конденсатор разрядится. Это как регенерация динамической памяти.
  8. Компилятор обнуляет только глобальные переменные. Объявите ААА локально. int main(void) { unsigned char AAA; ... Это не правильно, но в этом случае должно сработать.
  9. Работать вы можете с любыми типами. Функции вывода используют много памяти. Поэтому только для вывода используется эти параметры. Посмотрите сколько занято памяти сейчас, затем измените этот параметр на long, скомпилируйте и увидите сколько будет использоваться памяти.
  10. В параметрах компилятора есть выбор типа выводимых переменных. По умолчанию стоит int - поставьте long.
  11. snn_krs

    MicroC (Pro)

    Установкой начальных значений для глобальных переменных занимается компилятор. Если начальное значение не задано, то компилятор обнуляет переменную. Похоже вы объявили свою переменную в функции main, а это уже локальная переменная, и она имеет неопределенное значение.
  12. snn_krs

    STM32F4 с Keil

    На корпусе микросхемы должно быть написано полное название. Подробное описание находится на сайте STM в Datasheet (en.DM00071990.pdf).
  13. snn_krs

    STM32F4 с Keil

    Для начала надо скачать и установить с сайта Кейл файл Keil.STM32F4xx_DFP.2.15.0.pack. После этого появится файл d:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.15.0\Keil.STM32F4xx_DFP.pdsc. В нем прописан алгоритм прошивки МК.
  14. Все ST-LINK/V2 сделаны на STM32F103 именно так. ПК видит их как СОМ порт, но загрузить через BTLink KW600_51.rom я думаю не получится. Файл скорее всего закодирован.
  15. В STM32F103C8 штатный загрузчик грузит только через USART1 РА9, РА10. В KW600 похоже зашит свой загрузчик и BTLink грузит программы через него. Восстановить я думаю можно только если найдете старую прошивку (есть спецы скачивают с залоченых чипов), запишите любым загрузчиком, а потом обновите через BTLink.
  16. Все очень логично. Вы записываете в EEPROM пароль и защищаете его от считывания. Отдаете клиенту МК. Он стирает ваш код и записывает свой, в котором считывает ваш пароль из EEPROM и выдает его клиенту. Считывать защищенную EEPROM может только программа которую вы грузите при установке защиты.
  17. Не стоит записывать KW600_51.rom, это не образ памяти процессора. Загрузить ее может только BTLink. Если посмотреть файл KW600_51.rom, то в нем в первой строке первые 4 байта - стек, вторые 4 байта адрес сброса. Эти адреса грузятся соответственно в регистры MSP и РС. Оба имеют недопустимые значения. При загрузке недопустимых значений процессор работать не будет. Попробуйте стереть полностью и проверить на чистоту. Ошибка должна исчезнуть. Рекомендуют стирать через загрузчик.
  18. А вы уверены, что у вас рабочая плата. Программатор определяется, а МК нет. Возможно не правильно подключаете плату.
  19. Не вижу включения PLL /* Enable PLL */ RCC->CR |= RCC_CR_PLLON; Перед строкой
  20. У вас включена опция линковщика подключения библиотек для работы с числами с плавающей точкой. В файле *.lss можно увидеть кучу лишних функций. В AS 7 отключается в таком месте. Снимите галочку и пересоберите проект.
  21. Если без них работает, значит можно убрать. В генераторе не видно настройки порта В на выходы. После сброса это входы. Можете посмотреть исходники они находятся в папке - arduino-1.8.3\hardware\arduino\avr\cores\arduino\wiring_pulse.c Функция pulseInLong полностью на С.
  22. Если вы будете на вход ставить кнопку на плюс, то надо резистор на землю ставить. Если на вход подавать сигнал с переключающегося выхода МС, то подтягивать не надо. Если будете подавать сигнал с выхода ОК, надо подтяжку к плюсу.
  23. Конечно ошибся. Скопировал не ту функцию. Так как у ТС не работает функция pulseInLong, то и хотел чтобы он проверил работу функции pulseIn с запретом прерываний.
  24. Попробуйте так unsigned long n1, n2; // ... noInterrupts(); n1 = pulseInLong( IN_1, HIGH, 100000UL ); n2 = pulseInLong( IN_2, HIGH, 100000UL ); interrupts(); // if()
  25. Попробуйте вместо функции pulseIn использовать функцию pulseInLong.
×
×
  • Создать...