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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

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

Сообщение HardWareMan »

[uquote="GARMIN",url="/forum/viewtopic.php?p=4708219#p4708219"]Не понимаю, почему вы отвергли этот вариант.[/uquote]
Человек же ясно написал:
[uquote="dds7sdd",url="/forum/viewtopic.php?p=4707223#p4707223"]но как то всё там... ну не заходит мне...[/uquote]
Т.е., чистая вкусовщина и нежелание учить родные инструменты, ибо:
[uquote="dds7sdd",url="/forum/viewtopic.php?p=4707223#p4707223"]Идеальный вариант для меня это: VSCode+PlatformIO+Proteus (для симуляции и макетирования).[/uquote]
Ну вот хочется так человеку, что поделать? Это же не наказуемо, просто всего-то бесполезно для дела. :dont_know:
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Ingeto
Родился
Сообщения: 2
Зарегистрирован: Вс июн 22, 2025 23:28:08

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

Сообщение Ingeto »

Охотно приветствую дорогие друзья!
Впервые выбрался из своей берлоги, зарегистрировался на форуме с целью найти всё-таки решение проблемы следующего характера:
Решив окунуться в мир микроконтроллеров, почти ничего не зная, заказал себе пару плат STM8S003F3 с целью покопаться и разобраться как, что и почему (а заодно С поучить). И вот, найдя на всеми известном сайте с красной кнопкой пару гайдов, скачав и настроив STDV, написав программу осознал, что ошибка, которую я получил в консольной строке (вроде так называется, под вкладкой debug), вообще мне непонятна, попытки активного гуглинга ни к чему не привели, так что так я и принял это волевое решение написать сюда.
Собственно, при компиляции я наблюдаю следующее:
----------- Project ledonplate - STM8 Cosmic - Configuration Debug -------------

Running Linker
clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8_EVAL\Lib" -o Debug\ledonplate.sm8 -mDebug\ledonplate.map -p -sa Debug\ledonplate.lkf
#error clnk Debug\ledonplate.lkf:1 symbol f_timUpdateInterrupt not defined (Debug\stm8_interrupt_vector.o )
The command: "clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8_EVAL\Lib" -o Debug\ledonplate.sm8 -mDebug\ledonplate.map -p -sa Debug\ledonplate.lkf " has failed, the returned value is: 1
exit code=1.

ledonplate.elf - 3 error(s), 0 warning(s)


Вопрос встает следующий: что конкретно сломалось и как это починить?
Помогите пожалуйста
Ingeto
Родился
Сообщения: 2
Зарегистрирован: Вс июн 22, 2025 23:28:08

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

Сообщение Ingeto »

В общем, отвечая на собственный вопрос.
Выяснилось, что ошибка наблюдалась в файле "main.c", где я указал//@far @interrupt void tim1UpdateInterrupt(void) вместо //@far @interrupt void timUpdateInterrupt(void).
Проблема решена, код успешно откомпилирован и залит в микроконтроллер, работаемс дальшес. Всем спасибо и удачи!
Юрзов
Родился
Сообщения: 6
Зарегистрирован: Сб сен 06, 2025 12:38:07

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

Сообщение Юрзов »

Приветствую! Нужна помощь. Не могу зайти в прерывание в режиме Симулятора (отладка). Вообще не заходит (что с таймером 1 что со 2ым)..
Что с IARовским что с SPL (не заходит в прерывания)

Если нужен исходник, выложу. Спасибо!
СпойлерПРИМЕР КОДА: IAR:

#include "stm8s.h"

static void SystemInit(void);

static void SystemInit(void)
{
/* Infinite loop */
CLK_DeInit();

CLK_HSICmd(ENABLE);

//while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY)==0);

CLK_ClockSwitchCmd(ENABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4);
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV2);

GPIO_Init( GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);
}



int main( void )
{
//Включаем прерывания.
SystemInit();
TIM2_DeInit();
TIM2_TimeBaseInit( TIM2_PRESCALER_128, 255);
TIM2_ClearFlag( TIM2_FLAG_UPDATE);
//Включаем прерывание от переполнения счётчика.
TIM2_ITConfig( TIM2_IT_UPDATE, ENABLE);
TIM2_Cmd(ENABLE);
enableInterrupts();
while(1){}
//return 0;
}

//Обработчик прерываний.
INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_IRQHandler, 13)
{

TIM2_ClearITPendingBit(TIM2_IT_UPDATE);

}



//////////////////////////////////////////////////////
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1){}
}
#endif
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

в stm8s_it.c
проверьте строку - ​не закомментирована:
TIM2_UPD_OVF_TRG_IRQHandler ...

Удалите комментарий и попробуйте.
Последний раз редактировалось veso74 Сб сен 06, 2025 19:24:45, всего редактировалось 1 раз.
Юрзов
Родился
Сообщения: 6
Зарегистрирован: Сб сен 06, 2025 12:38:07

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

Сообщение Юрзов »

[uquote="veso74",url="/forum/viewtopic.php?p=4744244#p4744244"]в stm8s_it.c
проверьте строку - ​не закомментирована:
TIM2_UPD_OVF_TRG_IRQHandler ...[/uquote]
Закомментирована. Все собирается без ошибок. Все библиотеки компилятор видит. Прошу проверить!
Возможно нужно будет подправить пути директорий. (в настройках компилятора IAR) Спасибо!
Ссылка:

https://drive.google.com/drive/folders/ ... drive_link
Юрзов
Родился
Сообщения: 6
Зарегистрирован: Сб сен 06, 2025 12:38:07

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

Сообщение Юрзов »

Есть у кого IAR проект на SPL библиотеке. На любом STM8 с "рабочим" симулятором, который заходит в прерывание по переполнению любого таймера? Прошу поделится таким проектом. (или настройками) Спасибо! 8)
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

Зачем эти пляски с симуляторами??? В нынешнее время, когда контроллеры STM8 и эмуляторы к ним стоят копейки - на кой так мучаться? Тратить кучу времени на отладку условно рабочего (читай - реально нерабочего) кода - ЗАЧЕМ???
Я понимаю, если бы ваш контроллер был из чистого золота на сапфировой подложке и с однократно программируемой памятью программ. Стоящий как чугунный мост. :)))

Но STM8...
Ну добьётесь вы входа в прерывание в симуляторе. Потом прошьёте в реальный МК, и... входы в прерывания снова перестанут работать. И снова отлаживать по-новой... :facepalm:
Сразу отлаживайте в железе. Забудьте про симулятор.
Юрзов
Родился
Сообщения: 6
Зарегистрирован: Сб сен 06, 2025 12:38:07

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

Сообщение Юрзов »

[uquote="jcxz",url="/forum/viewtopic.php?p=4744894#p4744894"]Сразу отлаживайте в железе. Забудьте про симулятор.[/uquote]
Уговорили.. :)) Проблема решена! :) Так и сделаем! 8)
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

Добрый день. Лет 10 назад купил на алике платку с микроконтроллером STM8S003K3. Почитал про него, ничего не понял и убрал в долгий ящик. Сегодня она мне попалась на глаза, и я решил попробовать разобраться. Написал, точнее переписал найденную программку, успешно помигал светодиодом, вроде все хорошо. Потом решил немного усложнить, подключил светодиодную сборку к порту B, в который вывожу циклически растущую переменную и светодиоды должны показывать инкремент. И вроде бы работает, но возникла проблема - PB4 и PB5 не горят. Пробовал экспериментировать с PB_CR1 и PB_CR2 - ничего не дает. Электрически все хорошо. На этих выводах у него I2C, возможно что-то еще надо настроить? Может есть фьюзы какие-то?
Спойлер

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

#include <stdint.h>

#define F_CPU 8000000UL

#define _SFR_(mem_addr)     (*(volatile uint8_t *)(0x5000 + (mem_addr)))

/* PORT B */
#define PB_ODR      _SFR_(0x05)
#define PB_DDR      _SFR_(0x07)
#define PB_CR1      _SFR_(0x08)
#define PB_CR2      _SFR_(0x09)

static inline void delay_ms(uint16_t ms) {
    uint32_t i;
    for (i = 0; i < ((F_CPU / 18000UL) * ms); i++)
        __asm__("nop");
}

void main() {
    PB_DDR = 0xFF; // Configure port B as output
    PB_CR1 = 0xFF; // Port B in push-pull mode
    PB_CR2 = 0xFF;

	uint8_t i = 0;
    while(1) {
        PB_ODR = i;
        delay_ms(100);
        i++;
    }
}
Компилял SDCC, шил stm8flash в линуксе.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

для PB4 и PB5 отсутствуют внутренние подтягивающие резисторы, т.к. шина I2C требует внешних подтягивающих резисторов для корректной работы. Поставьте внешние резисторы на эти выводы, и все заработает.
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

У меня они в режиме выхода (push-pull), зачем им резисторы.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

попробуйте явно отключить I2C

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

 I2C_CR1 = 0x00;
в принципе надо тактирование I2C1 отключить, в srm8s вроде все (точно не помню) включено при старте.

PS что вы этим алгоритмом хотите получить?

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

   uint8_t i = 0;
    while(1) {
        PB_ODR = i;
        delay_ms(100);
        i++;
    }
когда i= 1,включается PB0, когда i=2 включается PB1, когда i=3 включается PB0 и PB1 одновременно. При каких значениях i должны включаться PB4 и PB5 на какое время и с какой периодичностью?
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Shuspano, I2c, SDA и SCL: в push-pull? Что происходит с ACK, когда master в HIGH, а slave в LOW?

Включите выводы в open drain с внешними подтягивающими резисторами, реализацией стандартной конфигурации.
Последний раз редактировалось veso74 Ср окт 01, 2025 18:23:13, всего редактировалось 3 раза.
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

Не, обнулять I2C_CR1 не помогает
Нет, писал не о I2C, а о GPIO порте, на котором так-же I2C.
За I2C я даже боюсь браться. Чай не AVR-ка.

Добавлено after 16 minutes 12 seconds:
[uquote="veso74",url="/forum/viewtopic.php?p=4750154#p4750154"]Включите выводы в open drain с внешними подтягивающими резисторами, реализацией стандартной конфигурации.[/uquote]
А так заработало. Типа, PB4,PB5 не могут в push-pull, или контроллер того за 10 лет?
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Если не включали периферии, она должна была быть выключенa.
Попробуйте установить уровень 1 "жестко" в коде и проверьте провода и светодиоды.

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

PB_DDR |= (1 << 4) | (1 << 5);  // PB4, PB5 как выходы
PB_CR1 |= (1 << 4) | (1 << 5);  // push-pull
PB_ODR |= (1 << 4) | (1 << 5);  // PB4, PB5 в 1
Со временем с МК ничего не происходит, даже если клеммы сгниют от коррозии :).
(Да, ето на "первое приближение". Иногда программы частично повреждаются).
Последний раз редактировалось veso74 Ср окт 01, 2025 18:25:11, всего редактировалось 1 раз.
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

Нет, не сработало. Короче, сдох или не может.
Ясно.
Единственный полный, и не особо увешанный альтернативными функциями порт. Обыдно :cry: .
Последний раз редактировалось Shuspano Ср окт 01, 2025 18:11:11, всего редактировалось 1 раз.
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Фото на теста?
---
Как всегда для себя - сначала надо прочитать документацию :)
Спасибо за конкретный взгляд на STM8S003K3 - отмечу как особенность.

Изображение
Последний раз редактировалось veso74 Ср окт 01, 2025 18:27:26, всего редактировалось 2 раза.
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

Конечно можно
Изображение Изображение Изображение Изображение
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2177
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:

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

Сообщение watchmaker »

Возможно ли на STM8L152/162 сделать, чтобы один из таймеров работал от часового кварца, пока проц сидит в halt (как на атмеге)? В документации сказано:
In some applications using the 32.768 kHz clock as a time base for the RTC, it may be
interesting to have time bases that work completely independently from the system clock.
The user can then schedule tasks without having to take into account the system clock.
For this purpose, the LSE clock is internally redirected to the 2 timers' ETR inputs (TIM2 and
TIM3) which are used as additional clock sources. Refer to Section 11.5.2: SYSCFG remap
control register 2 (SYSCFG_RMPCR2) on page 152.
Но ничего не сказано, будет это работать в halt или нет. Таймер пробуждения в RTC уже занят под другие цели (и освободить его проблематично).
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Ответить

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