stm8s103f3p6 с нуля
- Войдите на сайт для отправки комментариев
Прошу помощи, инструкции с stm8s103f3p6
Поставил IAR для STM8, st link, st visual programmer. делал по разным инструкциям, но залить так ничего и не получилось
собственно код, все компилируется. синтаксис конечно через жопу, но это вроде можно поправить всякими инклудами
#include "iostm8s103f3.h" static void delay(unsigned int t) { while(t--); } int main( void ) { PB_DDR_bit.DDR5 = 1; while(1){ delay(1000); PB_ODR ^= MASK_PB_ODR_ODR5; } }
взят из инструкции, но напрямую из iar не программируется. получается нужно компилировать, а программировать нужно через st visual programmer? то есть кнопка зеленая со стрелочкой "Downloa and Debug"нам не подходит?
кстати хваленая st link utility для stm8 не подходит, нет в ней выбора swim, только swd
помогите, желательно с картинками. по тексту может показаться я зол, так и есть, пол дня безсполезно потратил практически без результата. лучше уж на ардуине сидеть или использовать STM32F103C8T6
stm8s103f3p6 собирался использовать в одном проекте, просто ногодрыг, ничего серьезного
Не понял - чего не программируется? В настройках проекта есть, чего использовать - эмулятор или закачивать в плату, может, в этом дело? Или я не понял вопроса?
ну тут я может затупил, блокировка записи. но с другой стороны нафига еще нужен программатор в первую очередь как не для записи)))
как фьюзы в stm называются?))
а все просто. методом тыка. в st visual programmer заходим в 3 вкладку снизу option byte. пишет защита отключена, выбираем ее еще раз и заливаем. после этого заливается без проблемм.
ладно тему я оставлю, что получится, шим или ацп буду выкладывать, чего бедных ардуинщиков мучать
кстати кажется a5021 обещал дать настройку, чтобы не писать вырвиглазный код, люблю ардуину))
Ситуацию, когда из STVP шьется, а из ИАР-а нет, я тоже наблюдал. У меня такое выходило, если МК питался от отдельного источника. Какие уж там чудеса происходят внутри IAR-а сказать сложно, но при запитке МК от самого ST-Linka все начинало работать. Виноват, похоже, IAR, т.к. STVP шьет, что так, что так и не очень похоже, что тут есть какая-то серьезная аппаратная проблема.
Попробуйте эту галку включить на случай, если почему-то IAR не говорит st-link-у, что за чип надо шить.
Тема интересная, продолжаем. Самому на днях пришла STM8L-Discovery, надо как-то щупать начинать. Пока в IAR поигрался только блинком на эмуляторе, плату страшно трогать, боюсь поломати :)
а все просто. методом тыка. в st visual programmer заходим в 3 вкладку снизу option byte. пишет защита отключена, выбираем ее еще раз и заливаем. после этого заливается без проблемм.
ладно тему я оставлю, что получится, шим или ацп буду выкладывать, чего бедных ардуинщиков мучать
кстати кажется a5021 обещал дать настройку, чтобы не писать вырвиглазный код, люблю ардуину))
Можно было сделать и в ИАР в закладке СТ-Линк---Оптионс.
Если уже привыкли к ардуине, то это камень не для вас. ИАРовскими хедерами лучше не пользоваться, лучше родные от СТМ. Но они не полные, не все биты расписаны. Придётся расписать биты по аналогии с СТМ32 самому.
Можно юзать СПЛ от СТМ, но тогда весь потенциал камня не раскрывается.
под родными от stm имеется в виду эта? если да как ее установить?
А чего вы так нервно? Я поделился инфой, и только. Никаких "свысока" и не было. Я к тому, что ардуиновский подход здесь не прокатит. Это больше камень для профи, которым пофигу что и на чём писать. Если пороетесь по темам СТМ8, то увидите какой там бардак. Поэтому особо внятной инфы можете и не найти, каждый всё пишет по своему. Поэтому, если решили его осваивать, то привыкайте к мысли что практически всё придётся делать самому. Это и всё что я хотел сказать.
СТМ8 хороши для простых задач на нижнем уровне, без надстроек типа СПЛ и прочего. Весь цимус у них это железо, т.к. ЦП у них всё таки слабенькое, аккумуляторное. Набор команд как-то это нивелирует, но всё равно. Если у вас уж совсем простые задачи, то тогда конечно всё равно что и как.
Мягко говоря, СТМ8 в выигрыше там, где на других МК задачу не решить, ввиду отсутствия соответствующего железа, или это выливается в гемор. Из больших плюсов - периферия похожа на СТМ32.
под родными от stm имеется в виду эта?
Я говорил про хедер камня. Вы юзаете ИАРовский, я предложил юзать stm8s.h, тогда проще прыгать с СТМ32 на СТМ8 и обратно. Но это в общем на любителя.
А это СПЛ для СТМ8.
http://www.st.com/content/st_com/en/products/embedded-software/mcus-embe...
ну ничего пока желание не пропало. если есть что конкретно предложить например ногодрыг с более удобными функциями буду только рад
В SPL действительно не имеет особого залезать, но вот насчет хедеров я бы поспорил. В плане изучения и наглядности, иаровские заголовочные файлы предпочтительней. Каждый бит можно дергать простым выражением. На СТМ-овских хедерах код получается более компактный, что плюс, но менее наглядный и само-документируемый, что, безусловно, минус.
Еще могу посоветовать покопаться в примерах Марка Стивенса. Он подробно описывает, что и как делает и код хорошо комментирован.
Какую я настройку общал дать, я не понял. Если объясните и я действтиельно это общал, то наверное дам.
хедер и имел в виду. можно для примера записи 1 и 0 в регистр на iar и stm хедерах. сравнить чтло удобнее и понятнее
но утверждать не буду, ты как то завел тему про эти стм, вот и показалось ты обещал, но может axill
Ну вот оно дрыгание ногой. Пятый пин порта "B" формирует положительный импульс некой ширины:
да уж)) iar удобнее. понятнее чтоли
вот что понял после гугления
//настройка на выход
только непонятно какое будет состояние выходов если только настроить на выход, не указывая тип выхода и частоту, короче какой выход по умолчанию?
только не понял куда подтянут вход к земле или плюсу, наверно к плюсу
и правильно ли я написал как считывать состояние пина?
Ну вот оно дрыгание ногой. Пятый пин порта "B" формирует положительный импульс некой ширины:
Запись для CTMовских хидеров мне кажется более понятной и удобной.
Open Drain -- тип выхода по умолчанию. Если его не менять, то для формирования импульсов на выходе, этот выход надо подтягивать резистором к плюсу. Образно говоря, в полумосте выходного формирователя отсутствует верхний мосфет. К земле пин прижать можно, а вот поднять над землей только за счет влияния извне.
Частота там, это даже не частота, а скорость нарастания выходного сигнала. Ее сделали регулируемой, чтобы снизить потребление выходного формирователя. По умолчанию потребление низкое, фронты пологие (относительно, 2мгц, как никак). Хочется фронты поострее, нужно включать 10мгц.
Привычка, не более. Понятийно иаровкие хедеры удобнее. Пишем единицу --- взводим пин, ноль -- опускаем. А на стмовских хедерах куча крчков и палочек. Опытный глаз безусловно различает, что к чему, но на этот навык нужна тренировка.
а со входом у меня правильно написано?
делаю ардуину))
главное работает)) к чему все эти длинные названия запоминать)) кстати по эта настройка D5_OUT настраивает на выход пуш-пул 2мгц. по момему самый оптимальный по умолчанию. надо другой режим - придется писать полные настройки или дополнить хедер. сейчас выглядит так:
delay не стал показывать, делает задержку с еденицей измерения попугай, поэтому не стоит))
Вход правильно, а подтяжка включается и выключается в Px_CR1. Px_CR2 для подключения внешних прерываний.
подтяжка к Vcc?
короче все пины проверил, на всех есть меандр кроме D1 и B4
на D1 постоянно 1 и с муосором периодическим на землю. на B4 земля с небольшими наводками. есть мысли?
в iar можно узнать сколько памяти занято? и флеш и оперативка
короче все пины проверил, на всех есть меандр кроме D1 и B4
на D1 постоянно 1 и с муосором периодическим на землю. на B4 земля с небольшими наводками. есть мысли?
D1 - SWIM
B4 и B5 - (T) True open drain (P-buffer and protection diode to VDD not implemented).
Запись для CTMовских хидеров мне кажется более понятной и удобной.
Это классика. Будет работать и на других МК.
Понятийно иаровкие хедеры удобнее. Пишем единицу --- взводим пин, ноль -- опускаем. А на стмовских хедерах куча крчков и палочек. Опытный глаз безусловно различает, что к чему, но на этот навык нужна тренировка.
Как будет выглядеть групповая установка-сброс битов с ИАРовскими хедерами?
делаю ардуину))
А зачем? Почему не писать осмысленно LED_RED_ON или MOTOR_ON, вместо бессмысленного D4_HIGH?
немного поправил на всякий случай, вруг "частота" пина менялась
блин они еще и пин программирования развели. имеет смысл для готового устройства, например пинов не хватает, а менять прошивку не будут. глупо, ну ладно
B4 и B5 значит имеет только open drain. ну ладно. спасибо
А зачем? Почему не писать осмысленно LED_RED_ON или MOTOR_ON, вместо бессмысленного D4_HIGH?
что писать в дефайне для MOTOR_ON? если не помнишь значит октрываешь инк и вспоминаешь, либо
#define MOTOR_ON D4_HIGH
ну это мой подход. по максимому упростить, оформить в функции чтобы не тратить время на поиск инфы, а это я запомню. я никого не принуждаю, мне так удобно. я не программист все таки, каждый день не программирую
в iar можно узнать сколько памяти занято? и флеш и оперативка
В закладке Tools --> Options -->Messages в поле Show build messages выбрать All.
мне так удобно. я не программист все таки, каждый день не программирую
Понимаю, но D4_HIGH не несёт никакой информации. Через некоторое время можно просто забыть что это такое и для чего.
спасибо. согласен, но к хедеру будет простая мини инструкция, а после нее аналог того что в 14 посте. так что можно будет и так и так
кстати по шиму кто может подсказать? чтобы оформить в виде функции. да и опрос ацп хотелось бы
Я обычно вообще макросы оформляю с закосом под функцию. Типа такого:
А в чем проблема? У ИАРа определены и регистры целиком и биты поотдельности.
Это наоборот, наглядно по одному битику шевелить на стмовских хедерах не получится, а в стмовском стиле писать на хедерах иара можно сколько влезет.
можно и с закосом под функцию, можно и вообще функцию сделать как в ардуине, но передавать только значение например для управления выходом, так как маски и тп я не осилю
но лучше как по мне сделать так. мои дефайны остались есть , но в программе добавляем такой дефайн
вроде так пишется. и ssss должно больше понравится
Дал же в одиннадцатом посте ссылку. Там все это есть. Разжевано до молекул.
Дал же в одиннадцатом посте ссылку. Там все это есть. Разжевано до молекул.
ты про это?
видно мне нужно до атомов)) я даже не понял на каком пине он настроил шим. по документации всего 3 шима. я правильно понял?
А в чем проблема? У ИАРа определены и регистры целиком и биты поотдельности.
Это наоборот, наглядно по одному битику шевелить на стмовских хедерах не получится, а в стмовском стиле писать на хедерах иара можно сколько влезет.
Мда. Запись просто внушает страх.
я даже не понял на каком пине он настроил шим.
Это
вообще не поддаётся пониманию.
И я говорю. То ли дело на иаровских:
изза особенностей пинов B4 и B5 они могут работать как цифровые входы? если да то как насчет входа с подтяжкой
Оп. Сначала написал одно, а потом посмотрел даташит. Оказалось, с подтяжкой там труба. Извиняюсь за дезу.
хорошо) спасибо
да тоже узнал. проверял все пины с подтяжкой кроме B5, использовал как индикатор. B4 тоже не работает. то есть подтяжки нет, а как вход работать может?
ну чтобы вы не говорили мне нравится)) вот например код для теста
пожалуй сделаю под функции дефайны, а то как то не смотрится, вдруг с переменной перепутают
B4 тоже не работает. то есть подтяжки нет, а как вход работать может?
Может.
пожалуй сделаю под функции дефайны, а то как то не смотрится, вдруг с переменной перепутают
Делайте как хотите. В инете под СТМ8 ещё и не такое можно встретить.
И я говорю. То ли дело на иаровских:
Вообще ужас и тормоз к тому же!
пожалуй сделаю под функции дефайны, а то как то не смотрится, вдруг с переменной перепутают
Только чур наработки в шкаф не прятать ;)
Ваш-то вариант секретный наверное?
Делайте как хотите. В инете под СТМ8 ещё и не такое можно встретить.
где? я не от хорошей жизни целый день на это потратил. было бы то что более менее меня устроило бы стал бы я заморачиваться
но все же для сравнения
ничего не прячу. пока умеет только настраивать на вход и выход записывать и считывать. есть также инфа как остальные варианты настроить
Вот генерация таймером ШИМа с сайта Марка:
объясни пожалуйста на каком пине генерируется шим, как настроить для двух остальных. какой диапазон значений можно записывать в регистры , и как поменять частоту шим. если пойму проверю и добавлю
вот собственно инструкция. надеюсь все понятно и я ничего не зыбыл
Там в коментариях написано какой таймер и какой канал. Теперь ищем его на распиновке.
Я конечно и пальцем могу показать, но когда самому приходится искать, то лучше запомнается. :)
Для двух остальных чего? Каналов или таймеров? Если таймеров, то у 8-битного таймера шим-каналов нет, если каналов, то смотри регистры, но обрати внимание, что часть параметров распихана по двум регистрам: TIM1_ССER1 и TIM1_CCER2. Параметры 1-го и 2-го канала задаются в TIM1_ССER1, а 3-го и 4-го в TIM1_CCER2.
Еще момент: в приведенной выше процедуре инициализации таймера для генерации ШИМ, таймер на счет не запущен. То есть, он полностью готов генерировать, но остановлен. Чтобы стартовать его, надо поднять бит TIM1_CR1_CEN
Если пофиг, когда стартовать, можно эту строчку воткнуть в вышеприведенную процедуру последней.
От разрядности регистров зависит. В 16-битные регистры любое число до 65535, в восьмибитные до 255.
Частота, с которой считает таймер, зависит от значения прескалера. Это 16-битный регистр, состоящий из двух 8-битных TIM1_PSCRL и TIM1_PSCRH. По умолчанию он равен нулю и это означает, что таймер считает с частотой тактирования ядра, т.е. обычно 16мгц. Если записать туда единицу, таймер будет считать на 8мгц, двойку на 16мгц/3, тройку 4мгц и т.д.
Оставим пока прескалер, пусть он остается в нуле и таймер тем самым считает с частотой ядра.
Таймер считает, пока его счетчик не сравняется со значением записанным в TIM1_ARR (это пара регистров TIM1_ARRL и TIM1_ARRH). Когда сравняется, счетчик сбрасывается и считает заново. Если было разрешено прерывание по переполнению, оно вызывается в момент сброса.
Если нам надо входную частоту поделить, скажем на 16, чтобы на выходе получился 1мгц, в ARR надо записать 16-1, т.е. 15. А удобнее так и писать:
Если нужен 1кгц на выходе таймера, то в ARR надо писать 16000 -1 (0x3E7F)
Коэффициент заполнения ШИМ-сигнала задается в 16-битном регистре TIM1_CCR4 (4 канал). Можно сразу пересчитывать в проценты каким-то таким образом
Я не проверял этот код, т.ч. мог где и ляпнуть, но общий смысл должен быть такой.
Посмотрел я сегодня на эту ветку и как-то меня прибило: нафига я все время при распределении ног всякие портянки пишу из повторяющихся почти одинаковых строк. И подумал я, что надо как-то подсократить эту запись и к ардуиновскому стилю приблизить. Посмотрел, как делают другие, но ничего не глянулось. Все равно получается длинно и не очень читаемо. Взялся писать свое. Что получилось, смотрим:
Макросы по виду получились слегка зубодробительные, но работают так, как требуется. Положим, надо сконфигурировать четвертый пин порта С на вход без подтяжки. В этом случае макрос PIN_MODE вызывается в таком виде:
где С -- это имя порта, 4 -- номер пина этого порта, INPUT -- режим входа, FLOAT -- без подтяжки, NO_INT -- прервание не использовать. Если нужно включить подтяжку, то запись станет выглядеть так:
а надо включить прерывание на этом пине, то вот так:
Если посмотреть в определения, то часть их соответствуют нулю и операция сложения вообщем-то выглядит бессмысленной. Это действительно так, но "пустые" сложения можно просто использовать для самодокументированности кода. Тот же первый пример можно записать, как
Обе записи совершенно эквивалентны, т.е. пин на вход, без подтяжки и прерывания, но первая более подробна и понятна для прочтения.
Что же касательно режимов пина на выход, то они тоже могут быть установлены в различных вариантах этим же макросом. Например, запись вида
сначала готовит состояние пина 3 порта D (ноль в данном случае), в котором он окажется, когда будет включен на вывод. А в следующей строке выполняется переключение для работы на выход в режиме PUSH-PULL и с установками выходного формирователя для работы на высокой скорости.
Так как данные установки довольно часто используются при работе пина на выход, то в оперделениях они описаны отдельным дифайном OUTPUT_MODE. Таким образом, вышеприведенный код будет полностью эквивалентен коду
т.е. устанавливаем третий пин порта D в режим выхода PUSH-PULL для работы на частотах до 10 мгц.
А можно эти 10мгц убрать и установить частотный потолок до 2мгц
Или PUSH-PULL заменить открытым стоком
Такая форма записи описывает все возможные режимы работы пина, причем это можно сделать несколькоими способами. Записи вида
и
полностью эквивалентны.
Наконец, я проверил, одинаковый ли код получается после компиляции, когда используется обычная "портяночная" запись и конфигурирование с помощью макроса. Для этого я компилятору с отключенной оптимизаций скормил следующий фрагмент:
Сначала второй пин порта D конфигурируется макросом, а потом "по старинке". Код получился одинаковым полностью.
Ну и можно глянуть, что получается при конфигурировании пина в режиме входа:
Макрос PIN_MODE во всех случаях разворачивается в три команды манипуляций с отдельным битом в трех регистрах, отвечающих за режим работы пина.
В конце концов я переписал инициализацию пинов данными макросами в свой рабочий код приемника NRF24L01 и разницы в работе не отметил. Инициализация же при этом стала более компактной и более читабельной.
Кто всю эту хрень прочитал и хоть чего-нибудь понял, тот молодец. :)