Большое спасибо за статью. Мне очень понравилось. Написано простыми словами. Очень легко читать. Пожалуй прочитаю весь цикл статей этого автора по теме STM8. Но тут ответ на мой вопрос все же не полный. По сути можно не заморачиваться и пользоваться готовой таблицей из заголовочного файла IOSTM8S103F3.h(ведь не зря же он подключен ) , но мне все же хотелось бы разобраться до конца. Как получилась эта таблица в заголовочном файле? Вот таблица из DataSheet Нужно брать номер вектора прерывания из первого столбца таблицы, прибавлять к нему 2, а затем переводить в шестнадцатеричный формат? Т.е. для TIM2 capture/compare это значение будет 14+2=16(dec)=10(hex),верно?
Все вектора описаны в системном заголовочном файле
Bill_, все вектора описаны в даташите. "Системный заголовочный файл" не является ни обязательным, ни стандартом. Он идёт со средой разработки, библиотеками и т.д., может быть различным (вот приведённого Вами у меня нет и никогда не было), может не генерироваться при создании проекта, а кто-то может вообще пишет в блокноте и скармливает компилятору в командной строке.
Все вектора описаны в системном заголовочном файле
Большое спасибо за ответ. С этим я уже разобрался. Бегло пробежался по заголовочному файлу. Там много чего непонятного написано . Хотелось бы во всем этом разобраться. Может есть какая литература на эту тему? Сейчас параллельно читаю - Основы микропроцессорной техники: микроконтроллеры STM8S: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина и др.; Томский политехнический университет. − Томск: Изд-во Томско- го политехнического университета, 2014. – 130 с. - Начало работы с микроконтроллерами STM8. Матюшов Николай Викторович. - Лосев, С.А. Построение информационно-измерительных систем на базе МК STM8: учебное по-собие / С.А.Лосев; Балт. гос. техн. ун-т. – СПб., 2017. – 33 с. - Практическое руководство по программированию STM-микроконтроллеров: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина - Лабораторный практикум по изучению микроконтроллеров STM8 на базе отладочного модуля STM8S Value Line Discovery / Бугаев В.И., Мусиенко М.П., Крайнык Я.М. – Москва-Николаев: МФТИ-ЧГУ, 2013. – 24 с. - Лосев, С.А. Микропроцессорные системы и устройства: лабораторный практикум / С.А. Лосев; Балт. гос. техн. ун-т. – СПб., 2019. – 46 с. - Керниган Б., Ритчи Д. Язык программирования Си Пер. с англ., 3-е изд., испр. — СПб.: "Невский Диалект", 2001. - 352 с: ил. Конечно же DataSheet и Reference manual + статьи из интернета. Но как видите, вопросы все равно появляются. Спросить мне не у кого, поэтому задаю вопросы здесь. Большое спасибо всем за ответы. Стараюсь конечно же не злоупотреблять вашей помощью Поэтому, думаю, чем большей информацией я буду владеть, тем меньше вопросов у меня будет возникать в процессе изучения. Точнее сказать, тем больше вероятность, что я найду ответы на свои вопросы в имеющемся у меня материале.
Bill_, все вектора описаны в даташите. "Системный заголовочный файл" не является ни обязательным, ни стандартом. Он идёт со средой разработки, библиотеками и т.д., может быть различным (вот приведённого Вами у меня нет и никогда не было), может не генерироваться при создании проекта, а кто-то может вообще пишет в блокноте и скармливает компилятору в командной строке.
Хм... Я сам никогда этим не пользовался. Я сделал свою таблицу векторов на ассемблере и включаю этот файл в свои проекты.
Все вектора описаны в системном заголовочном файле
Большое спасибо за ответ. С этим я уже разобрался. Бегло пробежался по заголовочному файлу. Там много чего непонятного написано . Хотелось бы во всем этом разобраться. Может есть какая литература на эту тему? СпойлерСейчас параллельно читаю - Основы микропроцессорной техники: микроконтроллеры STM8S: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина и др.; Томский политехнический университет. − Томск: Изд-во Томско- го политехнического университета, 2014. – 130 с. - Начало работы с микроконтроллерами STM8. Матюшов Николай Викторович. - Лосев, С.А. Построение информационно-измерительных систем на базе МК STM8: учебное по-собие / С.А.Лосев; Балт. гос. техн. ун-т. – СПб., 2017. – 33 с. - Практическое руководство по программированию STM-микроконтроллеров: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина - Лабораторный практикум по изучению микроконтроллеров STM8 на базе отладочного модуля STM8S Value Line Discovery / Бугаев В.И., Мусиенко М.П., Крайнык Я.М. – Москва-Николаев: МФТИ-ЧГУ, 2013. – 24 с. - Лосев, С.А. Микропроцессорные системы и устройства: лабораторный практикум / С.А. Лосев; Балт. гос. техн. ун-т. – СПб., 2019. – 46 с. - Керниган Б., Ритчи Д. Язык программирования Си Пер. с англ., 3-е изд., испр. — СПб.: "Невский Диалект", 2001. - 352 с: ил.Конечно же DataSheet и Reference manual + статьи из интернета. Но как видите, вопросы все равно появляются. Спросить мне не у кого, поэтому задаю вопросы здесь. Большое спасибо всем за ответы. Стараюсь конечно же не злоупотреблять вашей помощью Поэтому, думаю, чем большей информацией я буду владеть, тем меньше вопросов у меня будет возникать в процессе изучения. Точнее сказать, тем больше вероятность, что я найду ответы на свои вопросы в имеющемся у меня материале.
Здравствуйте. Пишу программу для STM8S103F3P6 Подскажите, пожалуйста, где ошибка?
Код:
void interrupt_init(void);
#pragma vector=TIM1_OVR_UIF_vector __interrupt void Pin6_interrupt(void) { k++; if (k == 9) { k = 1; } x=6; TIM1_SR1_bit.UIF = 0; //Cброс флага прерывания }
if (x >= 5 && x < 10) { PB_ODR_bit.ODR5 = !PB_ODR_bit.ODR5; }
Компилятор в IAR ошибок не выдал, но при х = 6 , например, программа не заходит в тело оператора. Точнее сказать, если объявить х=6 в прерывании, то программа не заходит в тело оператора. Если объявить х=6 в основной программе, то условие выполнится и программа выполнит тело оператора.
Видимо если объявить переменную внутри функции, обрабатывающей прерывание, то и видна она будет только внутри этой самой функции... это называется область видимости переменных... Если Вам нужна переменная, видимая отовсюду, объявляйте ее в глобальной области видимости, т.е. до начала функции main
во-первых, если нет каких-то особых причин, то сброс флага прерывания делается в начале. во-вторых, чтобы прерывания сработали, их надо включить. в-третьих, начинающим настоятельно рекомендуется приводить весь код программы, а не участки, где по их соображению может быть ошибка, потому что это соображение рискует быть неверным, и здесь именно так.
Добавлено after 1 minute 46 seconds: и почему у прагмы и функции обработки прерывания столь разные наименования? первая на таймер, вторая на вход... непонятно.
Поставьте breakpoint внутри функции обработки прерывания и в режиме отладчика посмотрите, попадает ли туда выполнение
В периферии необходимо тактирование таймера включить, то есть, подать на него частоту. Наверное, в CLK_PCKENR1 или CLK_PCKENR2 , я не помню уже. Сейчас таймер просто не тактируется и не считает, а раз не считает, то и прерывания нет.
А как поставить этот бит? Если написать так CLK_PCKENR1_bit.PCKEN17 = 1; То компилятор выдает ошибку Error[Pe020]: identifier "CLK_PCKENR1_bit" is undefined Если записать единицу в весь регистр CLK_PCKENR1 = 1; то компиляция проходит без ошибок. Но результата это не приносит. При этом в прерывания программа вообще перестает заходить.
Добавлено after 7 minutes 52 seconds: вообще, в даташите сказано, что значение по умолчанию этого регистра 0xFF, то есть, вся периферия включена. Раз "в прерывания программа вообще перестает заходить.", значит, раньше заходила, тогда так и надо было сказать, что прерывания отрабатывают, значит, тактирование работает... ошибка где-то в другом месте. Может, watchdog тоже по умолчанию включен.
Я подумал, что неправильно понял даташит. Если люди(гораздо опытнее меня) что-то советуют, значит это нужно делать беспрекословно. У меня есть еще вот такая программа
флаг прерывания и счетчик нужно сбрасывать в том числе ДО запуска таймера. у таймера есть режим работы с теневымы регистрами, а есть без. насколько вы себе это хорошо представляете?
VladislavS Большое спасибо за подсказку. Все заработало. Почитал про этот квалификатор. Появились вопросы Правильно ли я понял, что его обязательно нужно применять при программировании любых МК, если переменная используется(читай меняет свое значение) в функциях и прерываниях?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения