Программирование STM8
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
В том виде, в каком он сейчас находится, использовать его можно весьма ограниченно. Я так и вовсе не придумал, какую пользу из этого можно извлечь.
- Реклама
А с него польза вообще есть? Кроме разве что картинки с распиновкой периферии.
- Сообщения: 76
- Зарегистрирован: Пт сен 09, 2016 23:08:30
Добрый день. Помогите пожалуйста, пытаюсь прошить 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. Поиск решения в гугле ничего не дал, в чем проблема?
Программка примитивнейшая чтобы тупо зажечь светодиод, среда 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. Поиск решения в гугле ничего не дал, в чем проблема?
А светодиод то у Вас как подключен, катодом или анодом к порту? Сдается мне что анодом на плюс и катодом на порт, тогда GPIOB->ODR &= ~(1<<5); Это дефолтное значения для ODR.
- Сообщения: 76
- Зарегистрирован: Пт сен 09, 2016 23:08:30
Попробовал, не помогло.
Даже если просто на пустой пин подаю "1", то на нем по-прежнему 0 вольт. Контроллер тупо не прошивается почему-то.
Даже если просто на пустой пин подаю "1", то на нем по-прежнему 0 вольт. Контроллер тупо не прошивается почему-то.
- Реклама
С диодом то определились как включен?
Выполните по шагам программу и поглядите реальное состояние регистров порта, можно в референсе поглядеть их реальные адреса, не исключено что есть ошибки в файле описаний регистров.
В IAR есть вот такой файл #include "iostm8s103f3.h"
Код будет вроде такого:
Добавлено after 1 minute 49 seconds:
Выполните по шагам программу и поглядите реальное состояние регистров порта, можно в референсе поглядеть их реальные адреса, не исключено что есть ошибки в файле описаний регистров.
В 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В смысле?Lww писал(а):Даже если просто на пустой пин подаю "1", то на нем по-прежнему 0 вольт. Контроллер тупо не прошивается почему-то.
- Сообщения: 616
- Зарегистрирован: Вс ноя 01, 2015 13:13:49
И правильно делает. Значит ещё не сгорел. Читать референс и даташит надо до, а не после.Lww писал(а): МК по-прежнему молчит.
РВ5 - true open-drain I/O !!!!!!!!!!!!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).
- Сообщения: 76
- Зарегистрирован: Пт сен 09, 2016 23:08:30
Перекинул на С5 - по прежнему не работает, 0 вольт на пине.
Добавлено after 27 minutes 6 seconds:
Вот чудеса. После нескольких перетыканий питания и ребута программатора оно все таки заработало. Правда странно как-то. Пока не переткнешь питание программа не заработает. В стм32 помогал обычный ресет кнопкой либо автоматически после прошивки, а тут нет.
Всем большое спасибо.
Добавлено after 27 minutes 6 seconds:
Вот чудеса. После нескольких перетыканий питания и ребута программатора оно все таки заработало. Правда странно как-то. Пока не переткнешь питание программа не заработает. В стм32 помогал обычный ресет кнопкой либо автоматически после прошивки, а тут нет.
Всем большое спасибо.
Конденсатор 1 мкф подключён к ножке Vcap?
кому не сложно напишите простейший blink для STM8S003. светодиод на PA3, тактирование от внутреннего генератора. нужна не сама программа а hex файл прошивки.
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
->RusikOk писал(а):простейший blink для STM8S003. светодиод на PA3, тактирование от внутреннего генератора. hex файл прошивки.
благодарю! но не моргает! а тактирование от внутреннего источника?oleg110592 писал(а):->RusikOk писал(а):простейший blink для STM8S003. светодиод на PA3, тактирование от внутреннего генератора. hex файл прошивки.
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
да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);
}
}
проверил на живом светодиоде - блинкает
огромное спасибо! выяснил в чем проблема. STVP после программирования не переводил контроллер в нормальный рабочий режимoleg110592 писал(а):проверил на живом светодиоде - блинкает
МК STM8S103.
У меня такое чувство, что если возникло событие внешнего прерывания в момент когда прерывание запрещено (вернее текущий уровень приоритета не перебивается этим событием), то это событие будет потеряно.
На такие мысли меня навел некий мой проект. И если моя догадка верна, то это все объясняет. Кроме того, флагов событий внешних прерываний то нет (по крайней мере для пользователя).
Можно конечно тестовую прошивочку сделать, но сейчас не до нее.
Может кто сталкивался с этим или где-то про это написано.
У меня такое чувство, что если возникло событие внешнего прерывания в момент когда прерывание запрещено (вернее текущий уровень приоритета не перебивается этим событием), то это событие будет потеряно.
На такие мысли меня навел некий мой проект. И если моя догадка верна, то это все объясняет. Кроме того, флагов событий внешних прерываний то нет (по крайней мере для пользователя).
Можно конечно тестовую прошивочку сделать, но сейчас не до нее.
Может кто сталкивался с этим или где-то про это написано.
[uquote="oleg110592",url="/forum/viewtopic.php?p=3130199#p3130199"]попробуйте последний snapshot[/uquote]
кстати да, в недавнее время его неплохо обработали напильником.
кстати да, в недавнее время его неплохо обработали напильником.
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Верю! Только где найти документацию на обработанную версию?кстати да, в недавнее время его неплохо обработали напильником.
Кстати интересно, они таки допилили возможность передавать/возвращать структуры по значению и объявлять обработчики прерываний где угодно, а не только в файле, содержащем точку входа (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
[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 не по теме, может перенесем обсуждение в соответствующую ветку?
тут пример прерываний не в 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 не по теме, может перенесем обсуждение в соответствующую ветку?
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
То есть таки поддерживает? А в документации ни слова...тут пример прерываний не в main
Своей параноидальной лицензионной политикой, даже в бесплатной версии. Я, собственно, по этой причине с некоторых пор от него отказался.Чем хуже бесплатный ИАР
Не, ну так неинтересно.может makefile?
Честно сказать, я не понимаю GDB. Отлаживаю по старинке - светодиодики, UART...
Да, можно. Надеюсь, модераторы перенесут сообщения. А то мы как-то и правда отклонились.извиняюсь - stm8 не по теме, может перенесем обсуждение в соответствующую ветку?
Разница между теорией и практикой на практике гораздо больше, чем в теории.



