Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение coredumped »

Леонид Иванович писал(а):Есть. На Дискавери код работает. Но разве этого достаточно? Сомневаюсь, всё ли я учел.

Есть такая штука - отладка называется. Вы пишите код, запускаете отладку и проверяете все ли работает так, как задумано. За Вас это никто не сделает, тк никто не знает, что Вы хотели в результате получить. Как можно знать, что Вы учли, а что - нет? Если код на дискавери работает так, как задумано, чего Вам еще "не достаточно"?

Леонид Иванович писал(а):Т.е. предлагаете осваивать программирование STM32 тяп-ляп, используя чужой код и не понимая, как он работает? Что ж, это по-молодежному.

Нет, лучше писать код, который 100500 раз проверен каждый раз - "с нуля"? 100 раз Вам сказано - инициализация есть готовая, проверенная - берите и пользуйтесь. Хотите понять, как это работает - запустите отладку в пошаговом режиме, откройте RM и ПОЙМИТЕ!
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Леонид Иванович »

dosikus писал(а):Я предлагаю не лезть сломя голову на амбразуры , а изучать новый для себя МК постепенно.


Но ведь для Вас этот МК не новый, могли бы и поделиться.

К примеру, как быть с прерываниями. Например, у меня есть класс, который реализует протокол обмена. Как мне реализовать обработчик прерывания? Для AVR было просто и понятно:

Код: Выделить всё

#pragma vector = USART_TXC_vect
__interrupt void USARTTxComplete()
{
   MyClass::OnTXC();
}


Но для STM32 нет ключевого слова __interrupt.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение dosikus »

Леонид Иванович писал(а):Но ведь для Вас этот МК не новый, могли бы и поделиться.

С радостью БЫ , но Вас же понесло в плюсы , а в них я увы и ах .
И вообще не понимаю - зачем они в ембедде ....
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Леонид Иванович »

coredumped писал(а):100 раз Вам сказано - инициализация есть готовая, проверенная


Хорошо, готовая, так готовая. Смотрим:

Код: Выделить всё

void SystemInit (void)
{
  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
  RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
  RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */   
 
  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
  RCC->CFGR &= (uint32_t)0xFF80FFFF;

#ifdef STM32F10X_CL
  /* Reset PLL2ON and PLL3ON bits */
  RCC->CR &= (uint32_t)0xEBFFFFFF;

  /* Disable all interrupts and clear pending bits  */
  RCC->CIR = 0x00FF0000;

  /* Reset CFGR2 register */
  RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)
  /* Disable all interrupts and clear pending bits  */
  RCC->CIR = 0x009F0000;

  /* Reset CFGR2 register */
  RCC->CFGR2 = 0x00000000;     
#else
  /* Disable all interrupts and clear pending bits  */
  RCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */


Зачем это всё делается? Для каких "for debug purpose"? Где об этом почитать? Что будет, если этого не сделать? По reset всё и так сброшено. Без всего этого у меня на Дискавери всё работает. Получается, это написали идиоты?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение dosikus »

Леонид Иванович писал(а):
Получается, это написали идиоты?


Отключим AVR мышленье на время , ОК ?
Вам не приходило в голову, что конфигурацию тактирования можно менять на ходу , а не только при старте?
И вот теперь кто идиот ? :)))
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение coredumped »

Чуть дополню. Если не выполнять аппаратный ресет, а перезапустить процедуру инициализации в отладочной сессии, регистры не получат своих "значений по умолчанию". Вот поэтому и делается их инициализация. Если клацать аппаратным ресетом - все это не нужно. Но есть еще одна штука - watchdog timer... Короче, чтоб не биться головой о клавиатуру и не чувствовать себя идиотом - делайте, как Вам ST советует. Несколько записей в регистры ваш говнокод не замедлят, а количество сотрясений могут уменьшить :)
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Леонид Иванович »

dosikus писал(а):Вам не приходило в голову, что конфигурацию тактирования можно менять на ходу , а не только при старте?
И вот теперь кто идиот ?


Менять можно. Но для этого не требуется очищать все эти регистры. И вряд ли кто-то это будет делать вызовом SystemInit(), потому что она не содержит никаких параметров тактирования (все задано константами). Так что Ваш ответ мимо. Кто идиот - пока не ясно.

coredumped писал(а):Но есть еще одна штука - watchdog timer...


В AVR срабатывание WDT было полностью эквивалентно аппаратному сбросу. А в STM32 что, не так? :shock:

Еще насчет стандартной функции включения тактирования: запускаю программу, всё работает. Птом выдергиваю кварц из панельки, программа продолжает работать, но неправильно. такое меня решительно не устраивает! Что делать?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение dosikus »

Леонид Иванович писал(а):Менять можно. Но для этого не требуется очищать все эти регистры. И вряд ли кто-то это будет делать вызовом SystemInit(), потому что она не содержит никаких параметров тактирования (все задано константами). Так что Ваш ответ мимо. Кто идиот - пока не ясно.


Во первых сначала переходим на HSI и сбрасываем все настройка PLL и конфигурации по дефолту . Объяснить зачем сие ?
Затем вызывается SetSysClock(); Которая и устанавливает нужный источник тактирования
Вынужден в очередной раз Вас просить выключить дурака(AVR) .
Здесь естественно не универсальная функция переключения тактирования ,
а всего лишь настройка на один источник с одной конфигурацией и повторюсь :
Сгенерированно скриптом
Но и при варианте с переключением частоты , процедура выглядела примерно так же - сброс на HSI и дефолт и только затем установка других значений .

Леонид Иванович писал(а):Еще насчет стандартной функции включения тактирования: запускаю программу, всё работает. Птом выдергиваю кварц из панельки, программа продолжает работать, но неправильно. такое меня решительно не устраивает! Что делат

Снова выключить AVR .
А Вы в AVR такое частенько проделывали ? :))) Ну и как ?
Настройки по дефолту HSE - PLL включен , HSI - PLL выключен .
При аварии HSE , тактирование происходит от HSI напрямую , без PLL .
Сие кстати ответ почему при переключении частот сбрасывают на HSI и дефолт .

Для Вашей хотелки - надо задействовать CSS .

Изображение

ЛИ , предлагаю перенести обсуждение на казус http://kazus.ru/forums/forumdisplay.php?f=34 , Вы не против ?
Последний раз редактировалось dosikus Пн янв 20, 2014 18:27:09, всего редактировалось 1 раз.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Леонид Иванович »

dosikus писал(а):сбрасываем все настройка PLL и конфигурации по дефолту . Объяснить зачем сие ?


Да, объяснить! Зачем сбрасывать по дефолту?

dosikus писал(а):выключить дурака(AVR)


У меня обратное мнение. Дураки (STM32) юзают какие-то исходники с горами мусора и не знают, что зачем нужно.

dosikus писал(а):А Вы в AVR такое частенько проделывали ? :))) Ну и как ?


Да, проделывал, всё нормально - программа виснет, как и должно быть.

dosikus писал(а):Для Вашей хотелки - надо задействовать CSS .


Как именно? Написать обработчик прерывания NMI, который будет каким-то образом останавливать систему?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение dosikus »

Леонид Иванович писал(а):
Да, объяснить! Зачем сбрасывать по дефолту?


Мои надежды не оправдались , ЛИ не смог догадаться .
Да для того что бы перейти на HSI, и работая на нем конфигурировать другую тактовую .
По фантазируйте - вы выключаете HSI , включая одновременно HSE - который не заводиться - что будет ?


Леонид Иванович писал(а):У меня обратное мнение. Дураки (STM32) юзают какие-то исходники с горами мусора и не знают, что зачем нужно.

Я вынужден снова повторить - использовать на первых порах, пока не снизойдет озарение.

Леонид Иванович писал(а):Да, проделывал, всё нормально - программа виснет, как и должно быть.


Вариант "живучести" - когда система продолжает работать с сдохшим внешним кварцем, Вам в голову не приходил?
Не тупо дохнуть , а выдать юзеру - "неисправность -внешний кварц сдох" .



Леонид Иванович писал(а):Как именно? Написать обработчик прерывания NMI, который будет каким-то образом останавливать систему?

Тупо уважаемый , весьма тупо - сконфигурировать тактовую как нужно , а не сдохнуть...
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение coredumped »

dosikus, забейте. ЛИ, кроме себя, никого не слышит.
Записки палаты №6 :))
Все будет только лучше, в крайнем случае - хуже.
urbanknight
Родился
Сообщения: 6
Зарегистрирован: Пн июл 09, 2012 05:49:20

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение urbanknight »

Дня доброго :) Есть идея, создать свою GlaDOS. Скажите пожалуйста, реально-ли запитать микроконтроллер от картошки, и воспроизвести пару фраз? На базе какого мк это будет сделать проще, с учетом, что программировать слегка умею (php), а с мк дела еще не имел.
Заранее спасибо
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение dosikus »

urbanknight, поменьше тытрубы смотреть надо.
Там не питают от картофелины , она как кнопка работает . Батарейка прилагается... :)))
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение oleg110592 »

от картошки вряд ли - батарейка нужна:
http://www.youtube.com/watch?v=8t7jBtSzFgM
готовая конструкция на карточке все звуки: http://elm-chan.org/works/sd8p/report.html
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение aam »

Здравствуйте!
Допустим у меня ноги AVRки, к которым подключается ISP-программатор, задействованы как выходы. Где при этом должны стоять последовательные резисторы? В байтбластере или на плате устройства?
Аватара пользователя
den2
Сверлит текстолит когтями
Сообщения: 1145
Зарегистрирован: Вт авг 17, 2010 11:58:06
Откуда: Казань

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение den2 »

Хотел бы узнать,можно ли считать залоченную Атмегу?Для 89С51 коллега находил схему,для чтения информации с неё.Читал что можно попытаться сбить биты защиты высоким напряжением (как при высоковольтном программировании),но этот способ работает 50/50.
Может чего придумали для этих целей.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение coredumped »

den2 писал(а):Хотел бы узнать,можно ли считать залоченную Атмегу?

Принято верить, что нет.
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение BCluster »

den2 писал(а):Хотел бы узнать,можно ли считать залоченную Атмегу?

растворить корпус микросхемы и смотря через микроскоп переписать на бумажку все биты из флэш ))))
В домашних условиях считайте никак.
service47
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение service47 »

Не запускается таймер2, обработчик прерываний и регистры таймера2 на ATmega88:
Даташит: http://www.atmel.com/images/doc2545.pdf
Нужно, чтобы таймер при переполнении вызывал прерывание...

Спойлер

Код: Выделить всё

ISR(TIMER2_OVF_vect)
{
   PORTB = 0x00;
   PORTC = ~(1 << segcounter);
   switch (segcounter)
   {
      case 0:
      PORTB = SEGMENTE[display % 10 / 1];
      break;
      case 1:
      PORTB = (SEGMENTE[display % 100 / 10])|0x80; // добавляем десятичную точку
      break;
      case 2:
      PORTB = SEGMENTE[display % 1000 / 100];
      break;
      case 3:
      PORTB = SEGMENTE[display % 10000 / 1000];
      break;
   }
   if ((segcounter++) > 2) segcounter = 0;
}

   
   TIMSK2 |= (1 << TOIE2); // разрешение прерывания по таймеру2
   TCCR2A |= (1 << CS21);  //предделитель на 8
   


Делал по примеру тут: http://mainloop.ru/avr-atmega/avr-timer-counter.html
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Леонид Иванович »

Бит CS21 расположен в регистре TCCR2B.
Ответить

Вернуться в «Разные вопросы по МК»