STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

a5021 писал(а):...
Спасибо, с этим ясно. А как насчет работы с NVIC? Только через функции?
RusikOk писал(а):ооо подобные вопросы не мало воин начали))) https://electronix.ru/forum/index.php?showtopic=131520
Микроконтроллеры ПОКА позволяют работать на самом низком уровне. Если все это переложить на библиотеки и конфигураторы, то в один момент окажется, что производители софта сговорились и выложили доступ к железу только через их драйверы без низкоуровневого доступа к портам и прочему. А это скучно.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев

Сообщение RusikOk »

Zhuk72 писал(а):в один момент окажется, что производители софта сговорились и выложили доступ к железу только через их драйверы без низкоуровневого доступа к портам и прочему
так и случится. такое случилось с персоналками, такое случилось и с промышленными контроллерами
Контактная информация:
Реклама
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Zhuk72 писал(а):Спасибо, с этим ясно. А как насчет работы с NVIC? Только через функции?
Так ведь нет их, функций этих. Ну или считай, что нет.

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

__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
  NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
}

__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
{
  NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
}
В общем случае, компилятор вместо вызова этих функций в исполняемый код вставит обычную операцию присвоения значений соответствующим регистрам.
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Подскажите что сделать что бы в режиме отладки через программатор регистры CYCLECOUNTER, CCTIMER1, CCTIMER2, CCSTEP.
работали. Сейчас в качестве программатора использую stm32f100 Discovery, но там нету вывода SWO. С ним будет работать?
Реклама
Эиком - электронные компоненты и радиодетали
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

Скажите, можно ли как-то программно управлять выбором загрузки МК - из флеш или запуск бутлоадера? Ну или на ножку BOOT как-то программно влиять?
Я хочу сделать так, чтоб можно было обновлять прошивку с ПК. Но для этого все равно надо предварительно посадить ножку BOOT на плюс либо городить какие-то внешние транзисторы и цепочки задержки. Можно без этого обойтись?
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

aam писал(а):Но для этого все равно надо предварительно посадить ножку BOOT на плюс либо городить какие-то внешние транзисторы и цепочки задержки. Можно без этого обойтись?
Я делал так: программа загрузчик ищет файл прошивки на карте памяти (или мониторит например uart какое то время), если прошиватся ненадо, то пригаем на основную программу. Если надо прошиватся, то переписываем основную программу и пригаем туда предварительно стерев прошивку с карты памяти.
«И всё-таки она вертится!»
Реклама
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

Ну Вы бутлоадер сами писали, и обновлялись с внешней флешки. А у меня какраз UART в устройстве используется и я предположил, что логичнее всего использовать штатный, уже имеющийся в любом микроконтроллере загрузчик - и память экономлю и писать ничего не надо. Кроме того, помимо программы "Flasher" ST предлагает описание протокола программирования и даже готовые DLLки для компьютера, т. е. в дальнейшем можно даже в свою программу (на ПК), работающую с устройством на STM, вставить кнопочку "Обновить..." и тогда совсем все по-человечески будет выглядеть.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

Можно при получении команды, пригнуть в свой бутлоадер, переписать программу и вернутся назад. По поводу памяти, то вместе с FAT и дисплеем 320 на 240 он занял меньше 22к. Зато ненадо химичить с внешними элементами.
«И всё-таки она вертится!»
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

Сегодня, листая AN2606, наткнулся на ответ:
User can jump to the System Memory Bootloader from his application code using the following entry point: 0x1FFFC518
Вот только почему-то не для всех МК такая фраза указана. Забыли написать?
В частности, в таблице 3 на стр. 21 приведены адреса для всех процев. По идее, надо просто прыгнуть из своей программы на указанный адрес. Но пока не пробовал.

Кстати, ЮСБишные версии F0 "из коробки" грузятся по USB или же USB-bootloader надо зашивать самому? Как ни странно, гугл породил множество сомнений.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

aam писал(а):Вот только почему-то не для всех МК такая фраза указана.
Потому что это не начало загрузчика и в других моделях, адрес будет отличаться.
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

Говорю же - на стр. 21 таблица с адресами для всех МК. В частности, на основе этой таблицы я предположил, что в младших F10x действительно с этим большая проблема, кроме того, нет встроенного USB-bootloader'а, а в остальных МК, вчастности F0, вроде как и адрес загрузчика явно указан, и по USB они, по идее, должны грузиться сразу после приноса их из магазина.
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Кто-нибудь понимает фарси? Пишут персы что-то про Proteus 8.6 SP2, так ведь ни слова не разобрать. :) Видно только, что он научился симулировать STM32F1xx.
СпойлерИзображение
Родился
Аватара пользователя
Сообщения: 5
Зарегистрирован: Чт мар 23, 2017 02:42:53

Сообщение CERGEII »

Здравствуйте.
У кого нибудь получалось запустить ADC1 от TIM1_CC1 event ? контроллер stm32f103c8t6
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт апр 24, 2009 11:25:34
Откуда: Rus

Сообщение makser »

Модель STM32 в протеусе не полная на данный момент. Например не работает DMA. Дальше не стал копать.

И самое главное, если внимательно изучить эту страничку, то можно получить очень приятный сюрприз.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

Здравствуйте. Изучаю тут таймеры. Использую STM32F030F4P6. Назначил таймер SysTick ответственным за задержки функции delay, а таймер 14 за вывод информации на дисплей раз в секунду. Проблема в том, что как только я запускаю таймер 14, его обработчик успешно выполняется раз в секунду, но зацикливается, т.е. после выполнения снова вход в него. Никак не найду где проблема. Вот код:
Спойлер

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

void TIM14_IRQHandler( void )
{
    tft_fcolor = ORANGE;
    tft_font = &font_lucida36pt_info;
    cx = tft_drawint( 16, 144, ds3231_get_hours(), 2 );
    cx = tft_drawchar( cx, 144, ':' );
    cx = tft_drawint( cx, 144, ds3231_get_minutes(), 2 );
    cx = tft_drawchar( cx, 144, ':' );
    cx = tft_drawint( cx, 144, ds3231_get_seconds(), 2 );
    tft_font = &font_lucida12pt_info;

    TIM14->SR &= ~TIM_SR_UIF;
}

int main( void )
{

    ....

    NVIC_SetPriority( SysTick_IRQn, 0 );
    NVIC_SetPriority( TIM14_IRQn, 1 );
    RCC->APB1ENR |= RCC_APB1ENR_TIM14EN;
    TIM14->PSC = 47999;                   // APBCLK / 48000 = 1KHz
    TIM14->ARR = 1000;                    // 1s
    TIM14->DIER |= TIM_DIER_UIE;          // Прерывание по обновлению
    TIM14->CR1 |= TIM_CR1_CEN;
    NVIC_EnableIRQ( TIM14_IRQn );

    while( 1 )
    {
        get_all_data;
    }
}
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Прорезались зубы
Аватара пользователя
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17

Сообщение AVI-crak »

Проблема отложенной записи, сначала нужно сбросить флаг - а после выполнять код.
Ну и само выполнение графических функций в прерывании - не самое лучшее решение. Делают немного иначе - в прерывании устанавливают флаг для внешней графической функции. Внешняя функция проверяет флаг когда есть возможность рисовать. Если цикл рисования получится больше времени таймера - будет пропущен один цикл.
Если рисовать в прерывании - гарантированно зависнет.
Контактная информация:
Родился
Аватара пользователя
Сообщения: 5
Зарегистрирован: Чт мар 23, 2017 02:42:53

Сообщение CERGEII »

AVI-crak писал(а): Если рисовать в прерывании - гарантированно зависнет.
Может случится другое прерывание,хотя тут приоритеты.
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

makser писал(а):Модель STM32 в протеусе не полная на данный момент. Например не работает DMA. Дальше не стал копать.
Хотя, возможно, стоило.

Изображение
И самое главное, если внимательно изучить эту страничку, то можно получить очень приятный сюрприз.
И как оказалось, для этого совершенно не нужно знать фарси. :) Кстати сказать, там персы еще непонятно что рассказывают про февральский Keil MDK-ARM 5.23 и мартовский IAR Embedded Workbench for ARM 8.10
Вложения
2017-03-25_173831.jpg
(102.14 КБ) 1110 скачиваний
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

AVI-crak писал(а):сначала нужно сбросить флаг - а после выполнять код
Пробовал в начало переместить. Так тоже зависает.
AVI-crak писал(а):Делают немного иначе
Благодарю, сделаю таким образом.
AVI-crak писал(а):Если рисовать в прерывании - гарантированно зависнет.
Но все же не совсем понятно, почему так происходит? Ведь рисование выполняется быстрее, чем 1секунда и оно завершится до следующего вызова прерывания, но такое ощущение, что флаг и не сбрасывается/не учитывается...
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

st.com лежит что ли?!
Только сегодня получил "народные" платку и ст-линк, полез на сайт за драйвером, а там облом-с ☹
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Ответить

Вернуться в «ARM»