Jump to content

Search the Community

Showing results for tags 'STM8'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube

Blogs

There are no results to display.

There are no results to display.

Marker Groups

  • Пользователи форума

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Found 10 results

  1. По приходящему на ножку A1 импульсу настроено прерывание. Прерывание должно отработать один раз и должно делать следующее: пауза 7 секунд, потом на 1,5 секунды открыть реле. Во время прерывания светодиод на плате гаснет и загорается в такт секундам. Код отрабатывает верно за исключением того, что прерывание отрабатывает 2 раза. Т.е. подали импульс, заморгал светодиод в течении 7ми секунд, потом щёлкнуло реле (открылось), затем опять щёлкнуло (закрылось), потом всё повторяется еще раз (7+1,5). В режиме дебага работает нормально. Пробовал отключать реагирование на прерывания во время его отработки: disableInterruupts(); ... enableInterruupts(); но не помогает. STM8S103F3P6 Код прерывания Код в main.c
  2. Запускаем новый видеокурс по микроконтроллерам семейства STM8. Курс планируем сделать интересным и интерактивным. Будут различные задания для проверки ваших знаний. От вас хотим услышать обратную связь и активное обсуждение, а также ждем любых вопросов! Ведет курс Василий (Профиль на сайте cxem.net для доната: i80186) Урок #1: Рассмотрены основные особенности микроконтроллеров серии STM8 серии STMicroelectronics. Проведено сравнение их с микроконтроллерами фирм Atmel и Microchip. Так же уделено внимание средствам разработки и отладки для данных микроконтроллеров, требующимся для начала работы с ними, а именно среде IAR EMBEDDED WORKBENCH для STM8 и отладочному набору на базе микроконтроллера STM8S105 - STM8S-DISCOVERY.
  3. Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален. Используемая периферия: DAC, DMA, TIM4, CLK, GPIO Задача у программы такая: В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод. Проблема: Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом. Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается. Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг. Спасибо.
  4. Привет. Хочу узнать ваше мнение. Я новичок в embedded. Можно сказать, что пришел с веба. Малость Python, JS, C. Меня, конечно, предупреждали начать с AVR, но я уверенный в себе решил сразу залезть на STM32. Вынашивая идею для проекта, параллельно курив Reference Manual и Data Sheet по STM32, я понял что его будет слишком жирно для проекта. Я перескочил на STM8L. И тут меня начал огорчать мир embedded. При переходе между stm8 и stm32 нужно менять IDE (TrueStudio на STVD). Во избежание таких курьёзов я пересаживаюсь на IAR. В процессе подключения родной библиотеки от ST, понимаю что библиотека от IAR для того же самого STM8L152C6T6 дико отличается (макросы, структуры). Привет веб-разработка. Как такое могло произойти, что под один и тот же контроллер ST даёт одну библиотеку, а IAR другую. И нигде в уроках тебя не предупредят об этом. Ну, ребят, у меня всего одна жизнь. Вы уже договоритесь там между собой? Придите к единому стандарту. Или они так решили новичков завендерлочить? Моё мнение (не претендует на правильное): пробираясь сквозь тернии популярной архитектуры ARM, инфраструктуры, инструментария, забываешь про бизнес-логику устройств. А еще просто пропасть между "я ничего не понимаю" и "господи, я зажег светодиод". Речь не о копипастерах с уроков, а действительно понимая что ты делаешь, в каком регистре, что меняешь. Это путь в 2000 (а то и больше) страниц на английском перечитанных по несколько раз, чтобы отоложилось. И в конце тебя ждут разные версии одной и той же библиотки в разных IDE. И сидишь вдупляешь... ну почему... я же в правильный регистр кладу правильную маску... ох, наболело. Такое ощущение что не для людей это всё делали, не для людей. Ваше мнение?
  5. Здравствуйте! Помогите пожалуйста разобраться с заголовочным файлом. По идее pragma vector должен быть прописан в IOSTM8s003f3.h но там почему то не прописаны аектора внешних прерываний. Помогите! И еще вопросик. Как посмотреть что описано в "#define" файле. Может его можно самому написать. А В ДАТАШИТЕ ВЕКТОРА ЕСТЬ
  6. Суть программы нажали на кнопку ушли в прерывание, в прерывании от кнопки поменяли уровень на порту со светодиодом, порт с LED соединён с другим портом на котором тоже есть прерывание при переходе из 0 в 1, Соответственно при нажатии кнопки ушли в прерывание там выставили смену уровня на другой ноге и должно сработать другое прерывание. Проблема, прерывание от кнопки работает, прерывание от смены уровня нет. Хотя этаже программа работала, плата STM8L152C6T6 пере прошивалась затем залилась этаже прога и не заработала. Ещё вопрос при прерывании от кнопки устанавливается бит флага EXTI_SR1_bit.P1F а чтоб его сбросить почему то работает EXTI_SR1_bit.P2F=0; а не EXTI_SR1_bit.P1F=0; Код программы полностью: В IAR /* *15.11.2016 *STM8L152C6T6 * *Измерять таймером задержку от нажатия кнопки до начала генерации */ #include "iostm8l152c6.h" int perep; unsigned int tic; /**************Обработка вектора прерывания от кнопки**************/ #pragma vector=EXTI1_vector __interrupt void Pin1_interrupt(void) { EXTI_SR1_bit.P2F=0;//Сброс флага прерывания TIM1_CR1_bit.CEN = 1; //Запускаем таймер PC_ODR_bit.ODR7^=1; //Инверсия порта С7 } /**************Обработка вектора прерывания от начала генерации**************/ #pragma vector=EXTI6_vector __interrupt void Pin6_interrupt(void) { EXTI_SR1_bit.P2F=0;//Сброс флага прерывания TIM1_CR1_bit.CEN = 0; //Останавливаем таймер tic=TIM1_CNTRL; PE_ODR_bit.ODR7^=1; //Инверсия порта E7 } /************************При переполнении таймера*******************************************************/ /*#pragma vector=TIM1_OVR_UIF_vector __interrupt void TIM1_OVF(void) { //perep++; }*/ int main( void ) { /***************Выберем частоту SYSCLK************/ //По умолчанию тактируемся от HSI/8 CLK_CKDIVR=0;// Выбираем делитель на 1 /********Инициализация пина который моргает Светодиодом ИИИИИИИИИИИИИИИНДИКАЦИЯ********/ PC_DDR_bit.DDR7 = 1; //Настраиваем 7й пин порта C на выход PC_CR1_bit.C17 = 1; //Переключаем его в режим push-pull (это когда он может выдавать //и низкий и высокий уровень), а то по-умолчанию он прикидывается пинов с открытым стоком //(это когда может выдавать только низкий уровень, а вместо высокого переключается на вход) /********Инициализация пина который моргает Светодиодом********/ PE_DDR_bit.DDR7 = 1; //Настраиваем 7й пин порта C на выход PE_CR1_bit.C17 = 1; //Переключаем его в режим push-pull (это когда он может выдавать //и низкий и высокий уровень), а то по-умолчанию он прикидывается пинов с открытым стоком //(это когда может выдавать только низкий уровень, а вместо высокого переключается на вход) /****************************************************************************************/ /*****************ПРЕРЫВАНИЕ ОТ КНОПКИ****************************************************************************/ /*С начало настраиваем пины с кнопкой*/ PC_DDR_bit.DDR1 =0; //Настраиваем 1й пин порта C на вход PC_CR1_bit.C11=1; //Настроили порт кнопки на вход pull-up PC_CR2_bit.C21=1; //Размещаем прерывание /***************Настройка прерываний**************/ /*В регистре EXTI_CONF1 по умолчанию все 0 тоесть каждый пин даёт нам отдельное прерывание*/ //Настраиваем фронт срабатывания прерывания //Т.к. кнопка замыкается на землю то выбираем задний фронт EXTI_CR1_bit.P1IS=2; //Прерывание на ножке срабатывает по заднему фронту //ITC_SPR1_bit.VECT1SPR=0; //Высокий прерывание от нашей кнопки /**************************************************************************************************************/ /*********************ПРЕРЫВАНИЕ ПРИ НАЧАЛЕ ГЕНЕРАЦИИ**********************************************************/ PC_DDR_bit.DDR6 =0; //Настраиваем 6й пин порта C на вход PC_CR1_bit.C16=1; //Настроили порт на вход pull-up PC_CR2_bit.C26=1; //Размещаем прерывание /***************Настройка прерываний**************/ /*В регистре EXTI_CONF1 по умолчанию все 0 то есть каждый пин даёт нам отдельное прерывание*/ //Настраиваем фронт срабатывания прерывания //Фронт прерывания передний EXTI_CR2_bit.P6IS=1; //Прерывание на ножке срабатывает по переднему фронту //ITC_SPR2_bit.VECT6SPR=3; //Средний приоритет прерывание от нашей кнопки /*********Настройка таймера TIM1***************************/ CLK_PCKENR2_bit.PCKEN21 = 1; //Включаем тактирование таймера TIM1 //Делитель на 160 //НО выставляем 15(так как всегда +1) TIM1_PSCRH = (15) >> 8; TIM1_PSCRL = (15)& 0xFF; TIM1_PSCRH = (0) >> 8; TIM1_PSCRL = (0)& 0xFF; //Счет по умолчанию вверх TIM1_CR1 DIR=0 //Значение регистра сравнения(До чего тикает таймер) TIM1_ARRH = (10000) >> 8; TIM1_ARRL = (10000)& 0xFF;//Частота переполнений = 16М / 1600 / 10000 = 1 Гц /*Новый пред делитель в таймер записывается только после события Update (Update Event — UEV) чтоб сразу инициализировать нужный пред делитель вызовем программно Update (Update Event — UEV), и чтоб в это время не уйти в какое нибудь прерывание разрещим прерывание только от переполнения таймера */ TIM1_CR1_bit.URS = 1; //Прерывание только по переполнению счетчика TIM1_EGR_bit.UG = 1; //Вызываем Update Event TIM1_IER_bit.UIE = 0; //Запрещаем прерывание при совпадении с ARR TIM1_CR1_bit.CEN = 0; //не Запускаем таймер asm("RIM");//Глобальное разрешение прерываний while(1) { } }
  7. Начал тестовый проект. Использую ST Visual Develop + Cosmic. Интересует возможность узнать размер занятой памяти (код, озу и т.п.). Лазил в настройках, ничего похожего не нашел. Гугл тоже не помог. Может знает кто, как это сделать?
  8. Рассмотрены основные особенности микроконтроллеров серии STM8 серии STMicroelectronics. Проведено сравнение их с микроконтроллерами фирм Atmel и Microchip. Так же уделено внимание средствам разработки и отладки для данных микроконтроллеров, требующимся для начала работы с ними, а именно среде IAR EMBEDDED WORKBENCH для STM8 и отладочному набору на базе микроконтроллера STM8S105 - STM8S-DISCOVERY.
  9. Добрый вечер. Есть несколько непонятных для меня вопросов: 1. Что есть программатор? Зачем нужен? 2. Зачем делать свой программатор, если к данному МК существует заводской? 3. Что есть отладочная плата? Зачем нужна? 4. Подойдет ли для начинающего STM8? Почему? 5. Подойдет ли для начинающего STM32? Почему? 6. С чего нужно начинать изучения МК? (знаю язык C (C++)) 7. Можно ли программировать МК на С++? Можете пожалуйста разъяснить все это. Данные вопросы возникли после чтения статей и уроков по МК из интернета. Спасибо.
  10. Пытаюсь завести UART на сабжевом микроконтроллере. В принципе таки все есть, но UART упорно молчит при передаче и не выходит на прерывание при приеме. Чутье подсказывает, что я просто напросто не так подал тактирование на модуль USART, но уже раз 10 все перепроверил. Все именно так. Вот код: #include "iostm8l152c6.h" int main ( void ) { PC_DDR_bit.DDR3 = 1; PC_CR1_bit.C13 = 1; PC_CR2_bit.C23 = 0; PC_DDR_bit.DDR2 = 0; PC_CR1_bit.C12 = 1; PC_CR2_bit.C22 = 1; //UART init CLK_PCKENR1_bit.PCKEN15 = 1; USART1_CR1 = 0; USART1_CR3 = 0; USART1_CR4 = 0; USART1_CR5 = 0; USART1_BRR2 = 0x03; USART1_BRR1 = 0x68; USART1_CR2_bit.RIEN = 1; USART1_CR2_bit.REN = 1; USART1_CR2_bit.TEN = 1; asm("RIM"); while (1) { //Loop while(!(USART1_SR_bit.TC)); USART1_DR = '!'; } return 0; } #pragma vector=USART_R_OR_vector __interrupt void USART_RXNE(void) { while(!(USART1_SR_bit.TC)); USART1_DR = '?'; } По поводу железа... Передачу (TX со стороны STM) я жду на лапе PC3, а прием (RX) на PC2
×
×
  • Create New...