Форум РадиоКот 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/ |