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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Serj_K
Опытный кот
Сообщения: 718
Зарегистрирован: Сб апр 14, 2012 16:11:35

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

Сообщение Serj_K »

a5021, спасибо, включение тактирования AWU помогло. Регистр стал записываться!! Причём, сначала его нужно сбросить, а потом записать в нужное состояние. Бипер заработал.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

У меня с этим бипером другой феномен -- работает без всякого шаманства с флешем и переопределением альтернативных функций, хотя вроде не должен. Так и не разобрался с этим. Работает, ну и хорошо.
Sander92
Родился
Сообщения: 1
Зарегистрирован: Пн дек 09, 2013 23:26:21

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

Сообщение Sander92 »

Уже несколько недель пытаюсь разобраться с данным микроконтроллером, но пока что всё безуспешно.
Может кто подсказать, как подключить к ней что-нибудь( моторчик, или еще один диод...) в простейшем случае.
Нашел в инете много на эту тему, но опыта работы с микроконтроллерами нет вообще. Я всего-лишь программист:(
Если можно -самый простой пример. Допустим моторчик, один контакт - к 32-му порту, второй - к 48-ому.
И какой будет минимальный код на IAR-е, чтобы он закрутился. Буду очень благодарен!
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Вы задаете вопрос о подключение моторчика к сферическому МК в вакууме. Для программиста такая постановка вопроса не характерна.
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

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

Сообщение The_D »

Почему? Как раз таки для программиста вполне характерно. Виртуальный моторчик и методы работы с ним на виртуальном МК. Всякая фигня типа мощности, напряжения питания и прочая не существенны. Мы же программируем интерфейс!
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

В принципе, да! Тогда вот этот код будет точно работать. :)

===
motor->run(FORWARD);
motor->run(BACKWARD);
motor->brake();
motor->stop();
===

И скажите, что нет еще. :)
Serj_K
Опытный кот
Сообщения: 718
Зарегистрирован: Сб апр 14, 2012 16:11:35

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

Сообщение Serj_K »

Даже на этом сайте есть схемы на СТМ-8, например, не для рекламы, моя первая работа с этим контроллером http://radiokot.ru/circuit/digital/measure/87/
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

И добротная работа, надо заметить. Я про нее впервые узнал вообще на стороннем ресурсе, т.ч. можно сказать, что вас активно цитируют. :-)
nebelnoir
Родился
Сообщения: 3
Зарегистрирован: Сб дек 21, 2013 22:21:38

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

Сообщение nebelnoir »

Коллеги! Расшарьте пожалуйста STVD и STVP, если у кого есть.
На ST проблемы с серваком - скачать их там не получается crying.gif
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

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

Сообщение Panda_Y2K »

Посмотрите плз. где туплю???
Счетчик считает, флаг прерывания ставится, в прерывание не попадаю.
Через какое-то время перезагружается.
Прерывания от таймера разрешил

stm8_interrupt_vector.c
Спойлер

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

/*   BASIC INTERRUPT VECTOR TABLE FOR STM8 devices
 *   Copyright (c) 2007 STMicroelectronics
 */

typedef void @far (*interrupt_handler_t)(void);

struct interrupt_vector {
   unsigned char interrupt_instruction;
   interrupt_handler_t interrupt_handler;
};

@far @interrupt void NonHandledInterrupt (void)
{
   /* in order to detect unexpected events during development,
      it is recommended to set a breakpoint on the following instruction
   */
   return;
}


extern void _stext();     /* startup routine */
//extern @far @interrupt void TIM4_IRQ_handler (void);
extern @far @interrupt void TIM4_IRQ_handler(void);


struct interrupt_vector const _vectab[] = {
   {0x82, (interrupt_handler_t)_stext}, /* reset */
   {0x82, NonHandledInterrupt}, /* trap  */
   {0x82, NonHandledInterrupt}, /* irq0  */
   {0x82, NonHandledInterrupt}, /* irq1  */
   {0x82, NonHandledInterrupt}, /* irq2  */
   {0x82, NonHandledInterrupt}, /* irq3  */
   {0x82, NonHandledInterrupt}, /* irq4  */
   {0x82, NonHandledInterrupt}, /* irq5  */
   {0x82, NonHandledInterrupt}, /* irq6  */
   {0x82, NonHandledInterrupt}, /* irq7  */
   {0x82, NonHandledInterrupt}, /* irq8  */
   {0x82, NonHandledInterrupt}, /* irq9  */
   {0x82, NonHandledInterrupt}, /* irq10 */
   {0x82, NonHandledInterrupt}, /* irq11 */
   {0x82, NonHandledInterrupt}, /* irq12 */
   {0x82, NonHandledInterrupt}, /* irq13 */
   {0x82, NonHandledInterrupt}, /* irq14 */
   {0x82, NonHandledInterrupt}, /* irq15 */
   {0x82, NonHandledInterrupt}, /* irq16 */
   {0x82, NonHandledInterrupt}, /* irq17 */
   {0x82, NonHandledInterrupt}, /* irq18 */
   {0x82, NonHandledInterrupt}, /* irq19 */
   {0x82, NonHandledInterrupt}, /* irq20 */
   {0x82, NonHandledInterrupt}, /* irq21 */
   {0x82, NonHandledInterrupt}, /* irq22 */
   //{0x82, NonHandledInterrupt}, /* irq23 */
   {0x82, TIM4_IRQ_handler}, /* irq23 - tim4*/
   {0x82, NonHandledInterrupt}, /* irq24 */
   {0x82, NonHandledInterrupt}, /* irq25 */
   {0x82, NonHandledInterrupt}, /* irq26 */
   {0x82, NonHandledInterrupt}, /* irq27 */
   {0x82, NonHandledInterrupt}, /* irq28 */
   {0x82, NonHandledInterrupt}, /* irq29 */
};



main.c
Спойлер

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

/* MAIN.C file
 *
 * Copyright (c) 2002-2005 STMicroelectronics
 */
 
 #include <iostm8s105.h>
 
unsigned int i;

@far @interrupt void TIM4_IRQ_handler(void)
{
   TIM4_SR=~TIM4_SR;
   if (PD_ODR == 0)
      PD_ODR = 0xFF;
   else PD_ODR = 0x00;   
   TIM4_SR = 0x00;
   return;
}

main()
{
   PD_DDR = 0xff; //all line for out
  PD_CR1 = 0x01;
  PD_CR2 = 0x01;
  PD_ODR = 0x00;
   
   //********************TIM4- init**********************
   //TIM4 control register
   //ARPE - Autoreload preload register 0
   //reserved
   //reserved
   //reserved
   //OPM  - One pulse mode              0
   //URS  - Update request Source       1
   //UDIS - Update disable              0
   //CEN  - Counter enabled             1
   TIM4_CR1 = 0x05;
   //TIM4_IER interrupt enable register
   //reserved
   //reserved
   //reserved
   //reserved
   //reserved
   //reserved
   //reserved
   //UIE - update interrupt enable
   TIM4_IER = 0x01;
   
   //clear counter register
   TIM4_CNTR = 0x00;
   //TIM4_PSCR - prescaler register
   //reserved
   //reserved
   //reserved
   //reserved
   //reserved
   //PSC2
   //PSC1
   //PSC0
   TIM4_PSCR = 0x00; //no prescaling
   //TIM4_ARR - autoreload register
   TIM4_ARR = 0x15;
   //clear interrupt flag
   TIM4_SR = 0;
   
   
   while (1)
   {
         i = 0xFFFF;
      
while(i) {
          i--;};
         //PD_ODR = 0x00;
   //   i = 0xFFFF;   
   //while(i) {i--;};   
   //      PD_ODR = 0xFF;
     };
}
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

может надо добавить (interrupt_handler_t), так работало:

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

.....
   {0x82, NonHandledInterrupt}, /* irq12 */
   {0x82, (interrupt_handler_t)TIM2_UPD}, /* irq13 */
   {0x82, NonHandledInterrupt}, /* irq14 */
.....
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

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

Сообщение Panda_Y2K »

Неа, не пашет.
Уже задолбался. Может еще что то в проекте ставить нужно для разрешения прерываний?
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

А пошаговая отладка что показывает? Адрес обработчика точно прописан в таблице векторов? Кажется мне что где-то промахнулся с адресами и векторами, и последующая перезагрузка говорит именно об этом.
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

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

Сообщение Panda_Y2K »

как то так
Изображение
Вложения
stm_vect.jpg
(241.77 КБ) 1242 скачивания
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

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

Сообщение Panda_Y2K »

Все, победил. Думаю же должно же быть еще что то вроде #asm sei :)
#asm
rim
#endasm
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Serj_K
Опытный кот
Сообщения: 718
Зарегистрирован: Сб апр 14, 2012 16:11:35

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

Сообщение Serj_K »

Я как-то напоролся на интересный момент при инициализации прерываний.
Сейчас рабочий фрагмент кода в main такой (IAR):

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

...
init_lcd();
init_irq();

__enable_interrupt();
...

Но когда размещал __enable_interrupt(); в конце init_irq();, что в принципе логично, то прерывания не включались.
Чудеса.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Вероятно, никаких чудес. Перед инициализацией прерываний вероятно сохраняется состояние прерываний и прерывания принудительно гасятся чтобы во время настройки ничто не помешало даже если вызвать процедуру посреди работающего кода, а перед выходом состояние восстанавливается в том виде как было на входе - т.е. прерывания запрещены. Попробуйте пройтись отладчиком внимательно наблюдая за признаком разрешения прерываний.
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

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

Сообщение pcb »

а есть компилер C для stm8? *ну вы поняли*
хочу несколько проектов сравнить скорость/размер на AVR8/STM8

а то assembler навивает грусть-тоску
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

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

Сообщение Panda_Y2K »

Ну Cosmic и кто то уже даже сравнивал, по моему на easyelectronix
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

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

Сообщение pcb »

лучше ссылку на сравнение.

Я в инетах видал примерно такое:
АВР 350 Дмипс
СТМ 439 Дмипс

Но дристоны от жизни сильно оторваны )
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Ответить

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