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
    • Обсуждение материалов с сайта
    • Competition 2019
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube
  • Радиолюбительская доска объявлений exDIY's Надежность и группы продавцов

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 9 results

  1. Привет, знатоки. Написал свою первую программу для контроллера 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(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается. Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг. Спасибо.
  2. Привет. Хочу узнать ваше мнение. Я новичок в 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. И сидишь вдупляешь... ну почему... я же в правильный регистр кладу правильную маску... ох, наболело. Такое ощущение что не для людей это всё делали, не для людей. Ваше мнение?
  3. Запускаем новый видеокурс по микроконтроллерам семейства STM8. Курс планируем сделать интересным и интерактивным. Будут различные задания для проверки ваших знаний. От вас хотим услышать обратную связь и активное обсуждение, а также ждем любых вопросов! Ведет курс Василий (Профиль на сайте cxem.net для доната: i80186) Урок #1: Рассмотрены основные особенности микроконтроллеров серии STM8 серии STMicroelectronics. Проведено сравнение их с микроконтроллерами фирм Atmel и Microchip. Так же уделено внимание средствам разработки и отладки для данных микроконтроллеров, требующимся для начала работы с ними, а именно среде IAR EMBEDDED WORKBENCH для STM8 и отладочному набору на базе микроконтроллера STM8S105 - STM8S-DISCOVERY.
  4. Здравствуйте! Помогите пожалуйста разобраться с заголовочным файлом. По идее pragma vector должен быть прописан в IOSTM8s003f3.h но там почему то не прописаны аектора внешних прерываний. Помогите! И еще вопросик. Как посмотреть что описано в "#define" файле. Может его можно самому написать. А В ДАТАШИТЕ ВЕКТОРА ЕСТЬ
  5. Суть программы нажали на кнопку ушли в прерывание, в прерывании от кнопки поменяли уровень на порту со светодиодом, порт с 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) { } }
  6. Начал тестовый проект. Использую ST Visual Develop + Cosmic. Интересует возможность узнать размер занятой памяти (код, озу и т.п.). Лазил в настройках, ничего похожего не нашел. Гугл тоже не помог. Может знает кто, как это сделать?
  7. Рассмотрены основные особенности микроконтроллеров серии STM8 серии STMicroelectronics. Проведено сравнение их с микроконтроллерами фирм Atmel и Microchip. Так же уделено внимание средствам разработки и отладки для данных микроконтроллеров, требующимся для начала работы с ними, а именно среде IAR EMBEDDED WORKBENCH для STM8 и отладочному набору на базе микроконтроллера STM8S105 - STM8S-DISCOVERY.
  8. Добрый вечер. Есть несколько непонятных для меня вопросов: 1. Что есть программатор? Зачем нужен? 2. Зачем делать свой программатор, если к данному МК существует заводской? 3. Что есть отладочная плата? Зачем нужна? 4. Подойдет ли для начинающего STM8? Почему? 5. Подойдет ли для начинающего STM32? Почему? 6. С чего нужно начинать изучения МК? (знаю язык C (C++)) 7. Можно ли программировать МК на С++? Можете пожалуйста разъяснить все это. Данные вопросы возникли после чтения статей и уроков по МК из интернета. Спасибо.
  9. Пытаюсь завести 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...