Например TDA7294

Форум РадиоКот :: Просмотр темы - Программирование STM8
Форум РадиоКот
https://radiokot.ru/forum/

Программирование STM8
https://radiokot.ru/forum/viewtopic.php?f=62&t=35768
Страница 70 из 125

Автор:  a5021 [ Вс дек 11, 2016 20:47:56 ]
Заголовок сообщения:  Re: Программирование STM8

Так RM0016 же. Кой-какие нюансы по регистрам еще в даташите на сам камень могут быть.

Автор:  Chettuser [ Вс дек 11, 2016 21:14:12 ]
Заголовок сообщения:  Re: Программирование STM8

Там что то совсем не густо, думал что где то есть подробнее, с примерами.

Автор:  scorpi_0n [ Вс дек 11, 2016 21:24:42 ]
Заголовок сообщения:  Re: Программирование STM8

После кодинга СТМ32 это, как минимум, звучит странно. При полном непонимании можно брать сниппетсы от СТМ32Ф0, для понимания логики работы периферии, с учётом различия регистров конечно.

Автор:  a5021 [ Вс дек 11, 2016 21:35:57 ]
Заголовок сообщения:  Re: Программирование STM8

Некий набор примеров можно найти в "STM8S optimized examples package". Они, правда, уже довольно древние и могут иметь проблемы с компиляцией IAR-ом, но в целом по ним можно посмотреть, как управляться с периферией без SPL.

Автор:  ptr128 [ Вс дек 11, 2016 22:55:48 ]
Заголовок сообщения:  Re: Программирование STM8

Chettuser писал(а):
Ткните носом в документ с описанием регистров STM8?

Если без примеров, то только в Reference Manual (RM0016). Но без примеров очень тяжело, почему я и использую SPL в качестве документации, о чем и писал выше.

Автор:  oleg110592 [ Пн дек 12, 2016 08:44:47 ]
Заголовок сообщения:  Re: Программирование STM8

ptr128 писал(а):
Есть еще кто, столь же уверенный, что это не бага в SPL? :)))

на всякий проверил на большом брате (TDM-GCC-32):
Спойлер
Код:
#include <stdio.h>
#include <iostream>
#include <conio.h>

uint8_t tim2sr2;

/** TIM2 Flags */
typedef enum
{
    TIM2_FLAG_UPDATE                   = ((uint16_t)0x0001),
    TIM2_FLAG_CC1                      = ((uint16_t)0x0002),
    TIM2_FLAG_CC2                      = ((uint16_t)0x0004),
    TIM2_FLAG_CC3                      = ((uint16_t)0x0008),
    TIM2_FLAG_CC1OF                    = ((uint16_t)0x0200),
    TIM2_FLAG_CC2OF                    = ((uint16_t)0x0400),
    TIM2_FLAG_CC3OF                    = ((uint16_t)0x0800)
} TIM2_FLAG_TypeDef;

void TIM2_ClearFlag(TIM2_FLAG_TypeDef TIM2_FLAG)
{
    tim2sr2 = (uint8_t)(~((uint8_t)((uint8_t)TIM2_FLAG >> 8)));
    printf("TIM2->SR2 = 0x%X \n", tim2sr2);
    tim2sr2  = (uint8_t)(~((uint8_t)(TIM2_FLAG >> 8)));
    printf("TIM2->SR2 = 0x%X", tim2sr2);      
}

int main(void)
{
    TIM2_ClearFlag(TIM2_FLAG_CC2OF);
    getch();
    return 0;
}

результат:
TIM2->SR2 = 0xFF
TIM2->SR2 = 0xFB

Автор:  a5021 [ Пн дек 12, 2016 22:16:26 ]
Заголовок сообщения:  Re: Программирование STM8

Сравнение компиляторов для STM8: A comparison of C compilers targeting the STM8.

Скорость выполнения (больше лучше):

Изображение

Размер кода (меньше лучше):

Изображение

Автор:  ptr128 [ Пн дек 12, 2016 23:17:44 ]
Заголовок сообщения:  Re: Программирование STM8

Все течет, все изменяется:
Изображение
https://community.st.com/thread/8847

Автор:  scorpi_0n [ Пн дек 12, 2016 23:47:36 ]
Заголовок сообщения:  Re: Программирование STM8

То что ИАР один из лучших для СТМ8 почему-то и не удивляет. Об этом уже писано переписано. Тем более что у иаровцев еще есть над чем работать в плане оптимизации.

Автор:  dosikus [ Вс янв 08, 2017 13:34:55 ]
Заголовок сообщения:  Re: Программирование STM8

scorpi_0n писал(а):
Тем более что у иаровцев еще есть над чем работать в плане оптимизации.

А так же любителям асма будет интересно знать ,что инлайн асм у IAR никакой...

Автор:  RingQ [ Ср янв 11, 2017 13:27:44 ]
Заголовок сообщения:  Re: Программирование STM8

Вчера решил попробовать программный USB на stm8s103f3p примеры нашел самодвигающейся мыши. сколько не пытался девайс прошитый даже не опознается сниффером. pc6 D-/pc7 D+. Кто-нибудь пробовал эти примеры какие выложены в сети товарища Железнякова?

Автор:  aerokostia [ Ср фев 01, 2017 12:39:03 ]
Заголовок сообщения:  Re: Программирование STM8

Всем доброго времени суток. Вот начал постигать тайны микроконтроллеров. Приобрел себе STM8S-DISCOVERY. По интернет урокам, статейкам, гайдам сумел засветить светодиод и заставить его мигать. Дальше захотел сделать, что бы он светился при нажатии кнопки. И тут я застрял. Она сенсорная и никак не могу понять, как она общается с МК. Уже 4й день роюсь в инетах в поисках решения. Пролистал ПДФки с оф. сайта, форумы, но без примера не пойму. Работаю в IAR, язык С. Прошу помочь в этом деле. Было бы хорошо увидеть пример кода с комментариями :)

Автор:  shads [ Ср фев 01, 2017 23:33:39 ]
Заголовок сообщения:  Re: Программирование STM8

Привет.
Написал свой нехилый криптозагрузчик, потратил кучу времени, и в конце с ужасом обнаружил, что таблица прерываний не передвигается..... я то думал что с помощью служебных регистров она как то привязывается, т.е. работает загрузчик - работает основная таблица, загрузилась прошивка - активировал работу с другой таблицей... Оказалось нет, она всегда расположена в начале FLASH...
Даже не знаю теперь что делать...

1 - если бы в моем буте прерываний не использовалось, можно было бы сразу там указать адреса нового места... Но у меня загрузчик использует несколько прерываний, т.е просто так туда не впишешь перенаправления на таблицу прерываний пользовательской прошивки...

2 - переносить загрузчик вверх тоже не хочу, т.к. хочу использовать защиту от записи загрузочной области...

3 - Как думаете, как быть???

Автор:  Jeka_M [ Сб фев 04, 2017 14:59:20 ]
Заголовок сообщения:  Re: Программирование STM8

aerokostia писал(а):
И тут я застрял. Она сенсорная и никак не могу понять, как она общается с МК.
Она работает так же, как и любая другая кнопка. Меняет логический уровень на пине - высокий (лог.1) или низкий (лог.0). Нужно просто считать уровень на пине микроконтроллера.

Автор:  Z_h_e [ Чт фев 16, 2017 11:25:38 ]
Заголовок сообщения:  Re: Программирование STM8

МК ST8S103F3.

Пробую запустить какой-нибудь PWM на таймере 1, канал 4. Или хотя бы вообще что-нибудь запустить на Т1.

Вот один из вариантов кода. Среда IAR для STM8. То что строки закомментированы, не обращайте внимание. Просто пробовал разные варианты и с копипастил из кода текущую.
Спойлер
Код:
//Настройка таймера 1
       //настройка порта
        PC_DDR=MASK_PC_DDR_DDR4; //Pc4 выход
        PC_CR1=MASK_PC_CR1_C14;  //пушпул
        PC_CR2=MASK_PC_CR2_C24;  //10MHz
        //PC_ODR^=MASK_PC_ODR_ODR4;
     
       
       CLK_PCKENR1|=1<<7; //включение тактирования таймера 1       
       
       //TIM1_PSCRL=(160-1)&0x00FF;       //предделитель так что таймер досчитает до 1000 за 10мс
       //TIM1_PSCRH=(160-1)>>8;
       
       //TIM1_ARRL=(255)&0x00FF;          //считать будем максимум до тысячи
       //TIM1_ARRH=(255)>>8;
       
       //TIM1_CCR4L=(128)&0x00FF;          //Регистр сравнения
       //TIM1_CCR4H=(128)>>8;
       
       TIM1_CCER2=MASK_TIM1_CCER2_CC4E | MASK_TIM1_CCER2_CC4P;// CH4 таймера 1 как выход и полярность
       
       TIM1_CCMR4=( 0x6<<4) | MASK_TIM1_CCMR4_OC4PE;//PWM моде и буферное обновление регистра сравнения.
       
       //TIM1_CR1=//MASK_TIM1_CR1_ARPE;// | MASK_TIM1_CR1_DIR;// | MASK_TIM1_CR1_OPM;      //буферное обновление максимума счета и однократный счет
       TIM1_CR2=1;//Bit 0CCPC: Capture/compare preloaded control
       
       //TIM1_BKR =0x80; // OC and OCN outputs are enabled if their respective enable bits are set (CC/E in Tim1_CCERi)
       
       //TIM1_RCR=0xFF;
       
       TIM1_IER=1;
       
       TIM1_CR1|=MASK_TIM1_CR1_CEN; //запускаем таймер


ШИМ не работает. Больше всего смущает что не только ШИМ не работает, а что не меняется коэффициенты деления и счетчик считает всегда до "верха" (хотя в регистры PSCR и ARR все пишется) . Специально включил прерывание по переполнению чтобы там дергать ногой, чтобы отследить изменения частоты. Все время частота одна, не важно какой предделитель и какой ARR.

С таймером 2 ШИМ не пробовал, но предделитель работает и ARR тоже. Что-то у меня похоже лыжи не едут с TIM1.

Автор:  oleg110592 [ Чт фев 16, 2017 12:38:20 ]
Заголовок сообщения:  Re: Программирование STM8

Цитата:
//TIM1_ARRL=(255)&0x00FF; //считать будем максимум до тысячи
//TIM1_ARRH=(255)>>8;
....

Регистры вроде 8-мибитные?
Может пригодится настройка шим для 1 канала для S003, там еще альтернативную функцию надо было включить для PC3 в OPTION BYTE
Код:
void TIM1_init(void) // Настройка таймера 1
{
//PWM output signal frequency = TIM1 counter clock/(TIM1_ARR + 1)
//Channel x duty cycle = [TIM1_CCRxx/(TIM1_ARR + 1)] * 100 
    TIM1->PSCRH = 0x00;
    TIM1->PSCRL = 0x00;
    TIM1->ARRH = 0x0F;
    TIM1->ARRL = 0x9F;
    TIM1->CCMR1 |= (uint8_t)0x60; //110: PWM mode 1 - In up-counting, channel 1 is active as long as TIM1_CNT < TIM1_CCR1,
    TIM1->CCER1 |= TIM1_CCER1_CC1E; //CH1 compare Enable
    TIM1->CCR1H = 0x07;
    TIM1->CCR1L = 0xD0;
    TIM1->CR1 |= TIM1_CR1_CEN; 
    TIM1->BKR |= TIM1_BKR_MOE; // OC and OCN outputs are enabled if their respective enable bits are set (CC/E in Tim1_CCERi)   
}

Автор:  Z_h_e [ Чт фев 16, 2017 14:35:00 ]
Заголовок сообщения:  Re: Программирование STM8

oleg110592 писал(а):
Регистры вроде 8-мибитные?
Да там раньше другие числа стояли, значительно больше 255, расчетные. Это сейчас всякие пробыне варианты, не думал что застряну в лыжах на асфальте на таком вопросе.

В оптион байтах вроде только ремапятся альтернативные функции. Да бог с ними, сам таймер то как то криво работает, частота не делится не растет кокос и не ограничивается верх счета. И другого МК нет затестить.

Добавлено after 1 hour 25 minutes 18 seconds:
Завел я и таймер 1 и PWM. Глючил и я и IAR. Ошибка была в том, что я записывал "16 битные" регистры ногами младшим вперед. А IAR скотина такая, почему то в железной отладке отображал значения регистров верно . Кроме того, поменяв местами старший со младшим байты при записи эффекта никакого не давало. Ладно поглядел дизассемблер, компилятор насрал на то что я поменял местами регистры, и записывал в том же неправильном порядке, пока я проект не очистил. Видать такая оптимизация.

В общем как всегда, затык из-за какой-то "мелочи".

Автор:  kedr63 [ Чт фев 16, 2017 14:46:30 ]
Заголовок сообщения:  Re: Программирование STM8

При использовании таймеров в режиме PWM в STM8 порты не нужно настраивать. В примерах STDPL есть.

Спойлертак попробуйте


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

Автор:  oleg110592 [ Чт фев 16, 2017 15:43:26 ]
Заголовок сообщения:  Re: Программирование STM8

в примерах паранойя приведения типов, может не зря:
Код:
...
      /* Set the Prescaler value */
    TIM2->PSCR = (uint8_t)(0);
    /* Set the Autoreload value */
    TIM2->ARRH = (uint8_t)(0);
    TIM2->ARRL = (uint8_t)(0xFF);
    /* Reset the Output Compare Bits  & Set the Ouput Compare Mode */
    TIM2->CCMR1 = (uint8_t)((uint8_t)(TIM2->CCMR1 & (uint8_t)(~TIM2_CCMR_OCM)) |
                            (uint8_t)TIM2_OCMODE_PWM1);
...

Автор:  Ser-B [ Пт фев 17, 2017 20:53:05 ]
Заголовок сообщения:  Re: Программирование STM8

Немогу найти примеров перевода МК в режим сна(halt mode). МК - stm8s103. Может кто подскажет?

Страница 70 из 125 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/