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

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

Сообщение 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:
Реклама
Родился
Сообщения: 2
Зарегистрирован: Вс июн 22, 2025 23:28:08

Сообщение 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)


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

Сообщение Ingeto »

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

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

Приветствую! Нужна помощь. Не могу зайти в прерывание в режиме Симулятора (отладка). Вообще не заходит (что с таймером 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
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

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

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

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

[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

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

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

Сообщение jcxz »

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

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

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

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

Сообщение 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 в линуксе.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 333
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

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

Сообщение Shuspano »

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

Сообщение 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 на какое время и с какой периодичностью?
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

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

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

Сообщение 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 лет?
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение 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 раз.
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

Сообщение Shuspano »

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

Сообщение veso74 »

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

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

Сообщение Shuspano »

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

Сообщение 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 уже занят под другие цели (и освободить его проблематично).
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Контактная информация:
Ответить

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