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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

Все течет, все изменяется:
Изображение
https://community.st.com/thread/8847
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

То что ИАР один из лучших для СТМ8 почему-то и не удивляет. Об этом уже писано переписано. Тем более что у иаровцев еще есть над чем работать в плане оптимизации.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

scorpi_0n писал(а):Тем более что у иаровцев еще есть над чем работать в плане оптимизации.
А так же любителям асма будет интересно знать ,что инлайн асм у IAR никакой...
Родился
Сообщения: 12
Зарегистрирован: Ср окт 14, 2015 12:16:40

Сообщение RingQ »

Вчера решил попробовать программный USB на stm8s103f3p примеры нашел самодвигающейся мыши. сколько не пытался девайс прошитый даже не опознается сниффером. pc6 D-/pc7 D+. Кто-нибудь пробовал эти примеры какие выложены в сети товарища Железнякова?
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 1
Зарегистрирован: Пн июл 20, 2015 10:40:55

Сообщение aerokostia »

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

Сообщение shads »

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

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

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

3 - Как думаете, как быть???
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 101
Зарегистрирован: Пт окт 03, 2014 14:50:06

Сообщение Jeka_M »

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

Сообщение Z_h_e »

МК 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.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

//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)    
}
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

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

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

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

В общем как всегда, затык из-за какой-то "мелочи".
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
kedr63

Сообщение kedr63 »

При использовании таймеров в режиме PWM в STM8 порты не нужно настраивать. В примерах STDPL есть.
Спойлертак попробуйте
в регистры можно хоть 32 битные значения указывать, просто младшие разряды возьмутся.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

в примерах паранойя приведения типов, может не зря:

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

...
      /* 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);
...
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вт ноя 02, 2010 20:21:53

Сообщение Ser-B »

Немогу найти примеров перевода МК в режим сна(halt mode). МК - stm8s103. Может кто подскажет?
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 29
Зарегистрирован: Сб фев 06, 2016 14:26:07

Сообщение JustRom »

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

__halt()
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вт ноя 02, 2010 20:21:53

Сообщение Ser-B »

JustRom, спасибо. В иаре это asm("halt");. А как выйти из этого режима изменению уровня на ножке?
Я так понимаю для начала надо настроить прерывание: PA_CR2_bit.C23 =1;?
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Вот что написано про команду HALT в документе Programming manual.
The interrupt mask is reset, allowing interrupts to be fetched. Then the
oscillator is stopped thus stopping the CPU and all internal peripherals,
reducing the microcontroller to its lowest possible power consumption. The
microcontroller resumes program execution after an external interrupt or
reset, by restarting the oscillator,and then, fetching the corresponding
external interrupt, which is generally an I/O interrupt, or the reset vector.
Ser-B писал(а):Я так понимаю для начала надо настроить прерывание: PA_CR2_bit.C23 =1;?
Кроме этого еще есть специальный регистр для внешних прерываний.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 3085
Зарегистрирован: Вт дек 25, 2012 14:51:33
Откуда: Санкт-Петербург

Сообщение a_klyuev »

Всем привет. Приперло мне тут на STM8L051F3 завести бибикалку. Погуглил примеры - все какая то лажа попадалась. Даже уважаемый DI HALT в своих уроках, об этом девайсе презрительно отозвался, и ничего не привел в пример. Поэтому пришлось как следовает вкурить RM0031, и вот что получилось (код в IAR 100% рабочий):
//------------------------------------------------------------------------------
// Начальная инициализация бибикалки - без калибровки
// Нагрузка бибикалки высокоомная - вход операционника через RC цепь
// Поэтому на работу сигнала SWIM бибикалка не влияет
//------------------------------------------------------------------------------
void beeper_init(void)
{
/*
// На работу бипера не влияет
PA_DDR_bit.DDR0 = 1; // 0-й пин порта A на выход
PA_CR1_bit.C10 = 1; // режим push-pull on
CPU_CFG_GCR_SWD = 1; // Отключаем SWIM
*/

// Включаем тактирование BEEP
CLK_PCKENR1_bit.PCKEN16 = 1;

// Выключаем LSI 38кгц
CLK_ICKCR_LSION = 0;

// Сброс предделителя beeper'a
BEEP_CSR2_bit.BEEPDIV = 0x1F;

// Выключить калибровочный таймер
BEEP_CSR1_bit.MSR = 0;

// Калибровочная константа
BEEP_CSR2_bit.BEEPDIV = 0x0F;
// Частота 1 кгц +-1км
BEEP_CSR2_bit.BEEPSEL = 0x00;

// Источник тактирования BEEP - LSI
CLK_CBEEPR_bit.CLKBEEPSEL0 = 1;
CLK_CBEEPR_bit.CLKBEEPSEL1 = 0;

// Включаем LSI 38кгц
CLK_ICKCR_LSION = 1;
SomeDelay(1000);
}

//------------------------------------------------------------------------------
// Звуковой сигнал
//------------------------------------------------------------------------------
void beep(long delay, unsigned char tone)
{
// Сохраняем значение по умолчанию
unsigned char st = BEEP_CSR2_bit.BEEPDIV;

// Изменяем тон звучания
BEEP_CSR2_bit.BEEPDIV = tone;

// Включаем сигнал
BEEP_CSR2_bit.BEEPEN = 1;

// Гудим-с
SomeDelay(delay);

// Выключаем сигнал
BEEP_CSR2_bit.BEEPEN = 0;

// Возвращаем тон по умолчанию
BEEP_CSR2_bit.BEEPDIV = st;
}
Буду рад, если кому-нить пригодится.
Processor not found. Loaded software emulation ......
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

К слову сказать, STML051F3 и STM151F3 -- это один и тот же камень на идентичном кристалле.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

На сайте СТМ появился STM8CubeMX.
Chettuser

Сообщение Chettuser »

:shock: Бгыыы!!! :))) :))) :))) Щас начнётся... ждём кучу статей по его использованию :)))
Ответить

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