Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

В том виде, в каком он сейчас находится, использовать его можно весьма ограниченно. Я так и вовсе не придумал, какую пользу из этого можно извлечь.
Реклама
Chettuser

Сообщение Chettuser »

А с него польза вообще есть? Кроме разве что картинки с распиновкой периферии.
Реклама
Lww
Открыл глаза
Сообщения: 76
Зарегистрирован: Пт сен 09, 2016 23:08:30

Сообщение Lww »

Добрый день. Помогите пожалуйста, пытаюсь прошить stm8s103f3, но ничего не получается.
Программка примитивнейшая чтобы тупо зажечь светодиод, среда IAR 1.40.1, программатор st-link v2.

#include "stm8s.h"
int main() {
GPIOB->DDR |= (1<<5);
GPIOB->CR1 |= (1<<5);
GPIOB->CR2 |= (1<<5);
GPIOB->ODR |= (1<<5);
while (1) {
asm("nop");
}
}

Прошиваю ST visual programmer, пишет

< File successfully loaded. File Checksum 0x731B
> Programming PROGRAM MEMORY area...
Cut Version and Revision of device: 1.2
< PROGRAM MEMORY programming completed.
> Verifying PROGRAM MEMORY area...
Cut Version and Revision of device: 1.2
< PROGRAM MEMORY successfully verified.

Но ничего в итоге не работает, светодиод не зажигается. Read out protection запрограммировал в off. Поиск решения в гугле ничего не дал, в чем проблема?
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

А светодиод то у Вас как подключен, катодом или анодом к порту? Сдается мне что анодом на плюс и катодом на порт, тогда GPIOB->ODR &= ~(1<<5); Это дефолтное значения для ODR.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Lww
Открыл глаза
Сообщения: 76
Зарегистрирован: Пт сен 09, 2016 23:08:30

Сообщение Lww »

Попробовал, не помогло.
Даже если просто на пустой пин подаю "1", то на нем по-прежнему 0 вольт. Контроллер тупо не прошивается почему-то.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

С диодом то определились как включен?

Выполните по шагам программу и поглядите реальное состояние регистров порта, можно в референсе поглядеть их реальные адреса, не исключено что есть ошибки в файле описаний регистров.

В IAR есть вот такой файл #include "iostm8s103f3.h"

Код будет вроде такого:

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

       PB_DDR=MASK_PB_DDR_DDR5; 
        //PB_ODR=MASK_PB_ODR_ODR5;
        PB_CR1=MASK_PB_CR1_C15;  //пушпул
        PB_CR2=MASK_PB_CR2_C25;  //10MHz
Добавлено after 1 minute 49 seconds:
Lww писал(а):Даже если просто на пустой пин подаю "1", то на нем по-прежнему 0 вольт. Контроллер тупо не прошивается почему-то.
В смысле?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Lww
Открыл глаза
Сообщения: 76
Зарегистрирован: Пт сен 09, 2016 23:08:30

Сообщение Lww »

Вроде бы анодом на порт.
Я не особо понимаю, но кажется не меняются.

Попробовал Ваш код с #include "iostm8s103f3.h", теперь в симуляторе байты порта меняются, но физический МК по-прежнему молчит.
Вложения
цунц.png
(20.03 КБ) 281 скачивание
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Lww писал(а): МК по-прежнему молчит.
И правильно делает. Значит ещё не сгорел. Читать референс и даташит надо до, а не после.
In the open-drain output column, "T" defines a true open-drain I/O (P-buffer, weak pull-up, and protection diode to VDD are not implemented).
РВ5 - true open-drain I/O !!!!!!!!!!!!
Lww
Открыл глаза
Сообщения: 76
Зарегистрирован: Пт сен 09, 2016 23:08:30

Сообщение Lww »

Перекинул на С5 - по прежнему не работает, 0 вольт на пине.

Добавлено after 27 minutes 6 seconds:
Вот чудеса. После нескольких перетыканий питания и ребута программатора оно все таки заработало. Правда странно как-то. Пока не переткнешь питание программа не заработает. В стм32 помогал обычный ресет кнопкой либо автоматически после прошивки, а тут нет.
Всем большое спасибо.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 960
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

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

Сообщение RusikOk »

кому не сложно напишите простейший blink для STM8S003. светодиод на PA3, тактирование от внутреннего генератора. нужна не сама программа а hex файл прошивки.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

RusikOk писал(а):простейший blink для STM8S003. светодиод на PA3, тактирование от внутреннего генератора. hex файл прошивки.
->
Blink.zip
(507 байт) 251 скачивание
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев

Сообщение RusikOk »

oleg110592 писал(а):
RusikOk писал(а):простейший blink для STM8S003. светодиод на PA3, тактирование от внутреннего генератора. hex файл прошивки.
->
Blink.zip
благодарю! но не моргает! а тактирование от внутреннего источника?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

RusikOk писал(а):тактирование от внутреннего источника?
да
в реальном железе дебаг - все работает:
Изображение
Изображение
г-код на всякий
Спойлер

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

#include "stm8s.h"

#define LED_GPIO_ODR GPIOA->ODR
#define LED ((uint8_t)(1<<3))

__IO uint16_t  ms = 0;

INTERRUPT_HANDLER(TIM2_UPD_OVF_IRQHandler, 13) // Прерывание таймера
{
    TIM2->SR1 &= ~TIM2_SR1_UIF; // Очистка флага прерывания по обновлению
    if(ms != 0) ms--;
}

void delay_ms(uint16_t ms16_t) // Задержка мс
{
    ms = ms16_t;
    while(ms);
}

void main( void )
{
    CLK->CKDIVR = 0; //Делитель частоты = 1
    
    GPIOA->DDR |= (uint8_t) (1<<3); // Ножка конфигурируется на вывод
    GPIOA->CR1 |= (uint8_t) (1<<3);  //Выход типа Push-pull
    //GPIOA->CR2 |= (uint8_t) (1<<3);  // Скорость переключения - до 10 МГц.

    TIM2->SR1 &= ~TIM2_SR1_UIF; // Очистка флага прерывания по обновлению
    TIM2->PSCR = 0x06; // //Предделитель на 2^6=64 16000000/64 = 250000 Hz
    TIM2->ARRH = 0; ///Значение перезагрузки 250000/250 = 1000 Гц
    TIM2->ARRL = 250;
    TIM2->IER |= TIM2_IER_UIE; // Прерывание по обновлению счетного регистра азрешено
    TIM2->CR1 |= TIM2_CR1_URS | TIM2_CR1_CEN ; // Прерывание по переполнению разрешено и таймер запущен
    asm("rim");
    while(1)
    {
        LED_GPIO_ODR |= LED;
        delay_ms(500);
        LED_GPIO_ODR &= ~LED;
        delay_ms(500);
    }
}
релиз на всякий:
BlinkRelease.zip
(446 байт) 348 скачиваний
upd:
проверил на живом светодиоде - блинкает
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев

Сообщение RusikOk »

oleg110592 писал(а):проверил на живом светодиоде - блинкает
огромное спасибо! выяснил в чем проблема. STVP после программирования не переводил контроллер в нормальный рабочий режим
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

МК STM8S103.

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

На такие мысли меня навел некий мой проект. И если моя догадка верна, то это все объясняет. Кроме того, флагов событий внешних прерываний то нет (по крайней мере для пользователя).

Можно конечно тестовую прошивочку сделать, но сейчас не до нее.

Может кто сталкивался с этим или где-то про это написано.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3130199#p3130199"]попробуйте последний snapshot[/uquote]
кстати да, в недавнее время его неплохо обработали напильником.
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

кстати да, в недавнее время его неплохо обработали напильником.
Верю! Только где найти документацию на обработанную версию? :) В том документе, что качается с официального сайта, про режим генерации кода для STM8 почти ничего нет, притом что другим архитектурам посвящены целые главы.

Кстати интересно, они таки допилили возможность передавать/возвращать структуры по значению и объявлять обработчики прерываний где угодно, а не только в файле, содержащем точку входа (main)? В документации, позиционируемой как текущая, я как раз прочел, что SDCC этого не умеет. :)

На самом деле, в данный момент я мало заинтересован в SDCC. Как я уже говорил, из STM8 мне интересны только младшие кристаллы, по причине того, что они продаются практически на вес. В этих кристаллах памяти не более 8 кБ, а 8 кБ кода способна генерировать и бесплатная версия Cosmic. Более того, у Cosmic даже есть неограниченная версия для STM8 (+ 32K-версия для STM32), однако ее надо хотя и бесплатно, но регистрировать.

Брать старшие кристаллы я не вижу смысла, потому что STM8 сама по себе достаточно специфичная архитектура, и для чего-то более продвинутого я бы взял Cortex-M0. Или AVR, кстати. В плане аналоговой периферии последние гораздо лучше - как минимум, у них есть встроенная опора. Это одна из причин, по которой ATtiny13 для мелких поделок с аналоговой частью для меня вне конкуренции.

Я вот сейчас раздумываю, как бы прикрутить Cosmic к Programmer's Notepad. В последнем есть настройки используемых инструментов, но я пока не понял, как сделать так, чтобы выбранный инструмент вызывался для каждого файла в проекте, а не только для активного.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="YS",url="/forum/viewtopic.php?p=3131817#p3131817"]объявлять обработчики прерываний где угодно, а не только в файле, содержащем точку входа (main)? В документации, позиционируемой как текущая, я как раз прочел, что SDCC этого не умеет.[/uquote]
тут пример прерываний не в main:
https://github.com/MightyPork/stm8s_inline_spl
[uquote="YS",url="/forum/viewtopic.php?p=3131817#p3131817"]бесплатная версия Cosmic[/uquote]
Cosmic the evaluation software available on this page is designed to allow the user to build and debug a small application for evaluation purposes.
Чем хуже бесплатный ИАР Restrictions to the Kickstart, size-limited evaluation а 8 Kbyte code size limitation, скачивается без регистрации
[uquote="YS",url="/forum/viewtopic.php?p=3131817#p3131817"]Я вот сейчас раздумываю, как бы прикрутить Cosmic к Programmer's Notepad. В последнем есть настройки используемых инструментов, но я пока не понял, как сделать так, чтобы выбранный инструмент вызывался для каждого файла в проекте, а не только для активного.[/uquote]
может makefile?

Народ gdb дебаг прикрутил уже к SDCC stm8, правда для виндовс цигвин нужен, попробовал - дебажить простенько можно:
https://stm8-binutils-gdb.sourceforge.io/

з.ы. извиняюсь - stm8 не по теме, может перенесем обсуждение в соответствующую ветку?
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

тут пример прерываний не в main
То есть таки поддерживает? А в документации ни слова...
Чем хуже бесплатный ИАР
Своей параноидальной лицензионной политикой, даже в бесплатной версии. Я, собственно, по этой причине с некоторых пор от него отказался.
может makefile?
Не, ну так неинтересно. :)

Честно сказать, я не понимаю GDB. Отлаживаю по старинке - светодиодики, UART... :)
извиняюсь - stm8 не по теме, может перенесем обсуждение в соответствующую ветку?
Да, можно. Надеюсь, модераторы перенесут сообщения. А то мы как-то и правда отклонились.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Ответить

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