Stm8. настройки среды st visual develop

ST-Visual-Develop видео – Видео

2 лет назад

STVD – Get Started with STM8 Microcontroller Programming Tutorial |||||||||||||||||Affiliate-Links||||||||||||||||| Amazon-Link: http://amzn.to/1yr6OdD My Books: C#: …

12 меc назад

http://embedded-lab.com/blog/starting-stm8-microcontrollers/ http://embedded-lab.com/blog/continuing-stm8-microcontroller-expedition/ …

2 лет назад

Ejercicios de programación Tarjeta de desarrollo: http://articulo.mercadolibre.com.mx/MLM-555029447-microcontrolador-stm8s003f3-sistema-minimo-_JM …

5 лет назад

ST Visual Develop software is the IDE used with Cosmic compiler stm8s.. for more details just check the site… http://www.st.com/stm8s-discovery.

1 лет назад

Видео о том, как освоить минимальные навыки работы с микроконтроллером STM8 за один день, настроив все необхо…

1 лет назад

Subscribe to my channel instead of thank. Đăng ký kênh ủng hộ mình nhé. How to fix: Error unable write to workspace file C:Program …

3 лет назад

http://www.futureelectronics.com/en/Search.aspx?dsNav=Ntk:ManufacturerPartNumberUpshiftedSearch%7c*Nucleo*%7c1%7c,Ny:True,Nea:True Hi, I'm …

1 лет назад

Descrição: Tutorial sobre Microcontrolador STM8 Para a compra do módulo STM8S003F3: …

5 лет назад

How to program STM8S boards using STM8 programmer.

2 лет назад

Рассмотрены основные особенности микроконтроллеров серии STM8 серии STMicroelectronics. Проведено сравнение их с…

2 лет назад

Welcome to this new series of tutorials where we learn how to program STM8 micro-controllers from ground up! our only source of knowledge will be the …

2 лет назад

Группа ВК: https://vk.com/electronics_in_camera Инстаграм: https://www.instagram.com/electronics_in_focus/ STM8 на сайте STMicroelectronics: …

2 лет назад

Программирование ST-LINK/V2 по SWD DS150E(NEW VCI). Используем программы STM32 ST-LINK Utility, ST Visual Programmer, STM32CubeMX, ST …

6 лет назад

ST-LINKV2, a JTAG In-Circuit Programmer-Debugger for STM8 and STM32 Microcontrollers ST-LINKV2 is an in-circuit programmer/debugger for …

2 лет назад

Math function error during compilation. Simulation on STVD platform, Create a project on STVD for STM8 MCUs.

3 лет назад

Find out more information: http://www.st.com/mcu The ST MCU Finder app for mobile devices is the best way to explore the STM32 and STM8 portfolio of more …

7 лет назад

Источник: https://inlove.kz/video/ST-Visual-Develop

Stm8 Discovery Swim

11.09.2018Stm8 Discovery Swim 

После того, как наиграетесь с отладкой, ее можно завершить, нажав на кнопку с крестиком. Автоматическое сохранение контекста при входе в прерывание и восстановление при выходе. SB11,12,14 — должны быть разорваны, stm8 discovery swim необходимо использовать пины Diecovery, C4 и E6. Она приветствует нас окошком настроек:Читать дальше…

Программатор Для Stm8 Stm32

Создание проекта для STM8 подобно созданию проектов в IAR для других платформ, но я повторюсь, чтобы не прерывать последовательность курса. Наличие библиотек не программатор для stm8 stm32 возможность работы напрямую с регистрами.

Но прежде, чем что-то компилировать, следует сначала настроить проект. Для того, чтобы защититься от мелких ошибок, на исправление которых, как правило, теряется большая часть времени, STMicroelectronics предлагает стандартную периферийную библиотеку.

Читать дальше…

Настройка Iar Stm8

Код, запускающий термодатчик, и считывающий его показания в переменную result: Создание нового проекта Структура проекта состоит из следующих директорий: Обращение к памяти, eeprom, регистрам происходит одними и теми же командами.

Крайне невысокая цена контроллеров линейки Value Line делает их весьма конкурентоспособными на рынке средств для построения различных датчиков дыма, газа там, где массовость, компактный размер и цена настройка iar stm8 в равной настройка iar stm8.

Среда разработки ST Visual Develop имеет встроенный инструментарий для настртйка программного обеспечения на языке assembler, но у нее также имеется возможность подключения и использования Си-инструментария от Raisonance и Cosmic software.Читать дальше…

Stm8 Распиновка

Короче коротыш попал на входное питание от USB. Качество изготовления, на мой взгляд, неплохое. ОУ AD stm8 распиновка заменить на любой в том числе одиночный с входами и выходами!!!Читать дальше…

Регистры Can В Stm8

Вообще штука stmm8, так как во-первых позволяет прошивать МК безо всяких ST-Link, а во-вторых случайно регистры can в stm8 его.

Основной регистр статуса, в нем выставляются флаги прерываний, которые необходимо анализировать при обработке прерываний. Последняя цифра на данный момент A, B или Z это и есть ревизия.

Возможно вы смотрели на 8L – контроллеры, у них может отличаться и библиотека своя.Читать дальше…

Stm8 St Visual Develop

Изложенный способ будет наиболее удобен тем, кто использует среду ST Visual Develop с компилятором от Cosmic или Stm8 st visual develop. Изучение и разработка идет для себя самого, а денег платные версии просят достаточно. Минимальное напряжение питания 2,95 Вольт.Читать дальше…

Программатор Stm8 Stm32

В первую очередь изучите файл-шаблон main. После автотрассировки перебрасываем все обратно и доводим до финального варианта — добавляем земляные полигоны, выравниваем где необходимо дорожки. Можно пользоваться и наслаждаться работой собранного собственными руками программатора.Читать дальше…

Модель Stm8 Proteus

Этот макрос находится в файле vsm. Информационная панель Данная часть окна выполняет информативную функцию. Вот краткий алгоритм работы приемника декодера:Читать дальше…

Источник: https://voltweb.net/stm8-discovery-swim-2

Инициализация STM8. Option Bytes. Bootloader. EEPROM

  • Частота
  • STM8 Option Bytes
  • EEPROM
  • STM8 Bootloader
  • Софт

В этой заметке я упомяну некоторые особенности инициализации микроконтроллера STM8, которые оказывают влияние на всю программу в целом. Описанные приёмы относятся к компилятору Raisonance.

Частота, на которой работает микроконтроллер — важная вещь, от неё зависит, насколько быстро исполняется программа, энергопотребление устройства, работа с периферийными устройствами.

Частота

Микроконтроллер STM8 может брать частоту как из внутреннего источника, так и с внешнего кварцевого резонатора. В случае использования внутреннего источника максимальная частота работы микроконтроллера ограничена 16 МГц. Реальную частоту работы определяет ещё и предделитель. Предделитель можно настроить от 1 до 128.

/** * @brief Настройка тактовой частоты микроконтроллера * @par * Параметры отсутствуют * @retval * Возвращаемое значение отсутствует */ void Init_CPU(void) { // Сброс настроек CLK_DeInit(); // Внутренний источник, 16 МГц CLK_HSICmd(ENABLE); // предделитель может варьироваться от 1 до 8. // 8 = 2 МГц CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8); }

В том случае, если используется внешний кварц, инициализация частоты микроконтроллера будет выглядеть так:

void Init_CPU(void) { u8 cnt = 0; CLK_DeInit(); // Внешний источник, 20 МГц CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE); // Ждать стабилизации частоты while (CLK_GetSYSCLKSource() != CLK_SOURCE_HSE) { if ( –cnt == 0 ) return; } }

Часть с CLK_GetSYSCLKSource() является необязательной.

Следует помнить, что при задании внешней частоты программа сама не сможет определить, сколько МГц составляет эта частота. Где-то в программе нужно будет определить макрос HSE_VALUE, который будет содержать значение внешней частоты в Гц. Например, для 20 МГц:

#define HSE_VALUE ((u32)20000000)

Теперь это значение будет правильно возвращаться функцией CLK_GetClockFreq(), а эта функция используется при инициализации всей периферии. Если бы эта функция возвращала не то значение, периферия неправильно бы инициализировалась. Тогда перестанет правильно работать, к примеру, UART.

Проверить, правильно ли определяется текущая частота работы микроконтроллера можно так:

printf(“Частота: %.3f МГц
“, ((float)CLK_GetClockFreq())/1000000.);

STM8 Option Bytes

В STM8 есть так называемые Option Bytes — настройки работы микроконтроллера, которые можно задавать при прошивке. Они располагаются в особой области памяти — в EEPROM.

Обычно EEPROM доступна из программы только на чтение, так что менять option bytes можно только заранее, перед прошивкой.

Однако, запись в EEPROM всё же можно разрешить, а значит, можно при необходимости, менять option byte прямо из программы.

EEPROM

Обычно, EEPROM используется для хранения констант, или для тех данных, которые должны сохраняться тогда, когда микроконтроллер отключен от питания. Слишком часто перезаписывать данные в EEPROM не стоит, так как у этого типа памяти ограничен ресурс перезаписи.

Первое, что надо сделать, это открыть запись в EEPROM. Делается это так:

// Открыть возможность записи в EEPROM FLASH_DeInit(); FLASH_Unlock(FLASH_MEMTYPE_DATA);

В EEPROM можно хранить собственные константы и переменные. Например, в обычных условиях, переменная, объявленная так: u8 eeprom uBrightness = 0x10; будет константой, изменить её нельзя. Однако, если возможность записи в EEPROM включена указанным выше способом, то можно.

Но при каждой перепрошивке микроконтроллера её значение будет вновь становится 0x10. Если нужно там хранить данные, которые должны сохраняться даже при перепрошивке, инициализацию (= 0x10) целесообразно убрать.

Тогда компилятор будет выводить раздражающий warning о том, что у переменной неопределённое значение.

На самом деле там будет то значение, которое последнее попало в эту область памяти последний раз: при перепрошивке ли, или значение было изменено из самой программы, не важно.

Чтобы warning не возникал, в этом месте его можно отключить:

#pragma WARNINGLEVEL(0) at 0x4000 u8 eeprom uBrightness; #pragma WARNINGLEVEL(2)

Директива at 0x4000 указывает, по какому точно адресу в памяти будет располагаться переменная. Это дополнительно гарантирует, что переменная не сменит адрес (и значение) между перепрошивками. Адрес 0x4000 это самое начало области EEPROM STM8.

Допустим, мы хотим из программы менять состояние того option byte, который отвечает за возможность прошивки микроконтроллера через RS-232. Если включить данную возможность, активируется Bootloader.

Это встроенная в STM8 функция, которая будет активироваться при включении самой первой.

В течение 1 секунды она будет ожидать активности на UART и если с другой стороны подключен по RS-232 компьютер с программой STMicroelectronics Flash Loader Demonstrator, то эта программа сможет прошить микроконтроллер. Если на UART нет активности, то запустится текущая прошивка.

Когда Bootloader не нужен, его можно отключить. Тогда при включении, микропрограмма запускается сразу, а не с задержкой в 1 секунду, а прошить STM8 можно только через интерфейс SWIM, например. Тогда понадобится программатор и специальный софт, например RFlasher7 или ST Visual Programmer (STVP).

Если запись в EEPROM доступна, тогда поменять option byte, отвечающий за включение и выключение Bootloader можно так:

#define BOOT_LDR_ADDR 0x487E // Включить Bootloader для возможности прошивки через COM-порт. // Требуется ещё раз включить-выключить, чтобы вступило в силу. if (FLASH_ReadOptionByte(BOOT_LDR_ADDR) != 0x55AA) { FLASH_ProgramOptionByte(BOOT_LDR_ADDR, 0x55); } // Выключить Bootloader if (FLASH_ReadOptionByte(BOOT_LDR_ADDR) != 0x00FF) { FLASH_EraseOptionByte(BOOT_LDR_ADDR); }

Дополнительная проверка if нужна для того, чтобы не писать в EEPROM, если там и так уже есть нужное значение. Это нужно для того, чтобы не тратить попусту ресурс записи памяти.

Софт

Скачать STMicroelectronics Flash Loader Demonstrator: um0462.zip (7,72 Мб).

система комментирования CACKLE

Источник: http://hex.pp.ua/stm8-freq-eeprom-bootloader.php

[SOLVED] STM8 Raisonance C compiler и большие массивы

доброго времени суток всем!задача у меня простая: положить во флеш 6 килобайт данных и читать их по порядку блоками по 3 байта – как uint8_t и uint16_t.

использовал самое очевидное решение – описал struct из uint8_t и uint16_t и массив из неё.

всё хорошо, но вот засада: после размера массива >42 элементов, компилятор пишет: “ERROR 107: ADDRESS SPACE OVERFLOW -SEGMENT: ?D0?MAIN(MAIN)” и/или “ERROR 115: INPAGE SEGMENT IS GREATER THAN 256 BYTES -SEGMENT: CSTDLIB_REGISTERS(REGISTERS)“.

вот что говорит по этому поводу Raisonance ST7/STM8 linker manual:

ERROR 107: ADDRESS SPACE OVERFLOWCause: The segments for a particular memory space are too large to fit into memoryResolution: The error message indicates the memory space that has overflowed. Reduce the requirements on that memory space by optimizing the source code or removing unused sections. For example if the DATA memory space has overflowed, then there may be some data that can be moved to CODE memory space and uses as constants or stored in a serial memory device. If the CODE memory space has overflowed then ensure the highest level of optimization is being used. Try changing the optimization settings to favor size. Look for places in the source code that can be optimized. If the DATA memory space has overflowed then look to see which variables may be moved to the other memory spaces.ERROR 115: INPAGE SEGMENT IS GREATER THAN 256 BYTES”Cause: An attempt has been made to relocate a segment using the INPAGE directive, but the segment size is greater than 256 bytes (the size of a page) and therefore cannot fit inside a page.

Resolution: The error message indicates which segment has the problem. Either do not specify the segment with the INPAGE directive, or move some of the variables in the segment into another segment, which can also be located using the INPAGE directive.

причём с ростом размера массива сообщения вылазят то по очереди, то вместе. самое главное: флеша в таргете ещё хоть жопой жри, влезет туда 6 кило с копейками, а не влазит уже начиная со 129 байт.

подскажите, пожалуйста, как можно это решить (где “убрать директиву INPAGE”?), и (опционально) нахер так житьна кой чёрт там сдалась эта сегментация?

среда – ST Visual Develop, если важно. можно даже предложить заменить что-нибудь, например, головукомпилятор на космик. но киньте в личку тогда линк на человечески вылеченный – канителиться раз в год с лягушатными лицензиями не дело.

[SOLVED]: лезем в свойства проекта (Shift+F7), вкладка C compiler. Устанавливаем Global variables в in Data, в сырцах перед именем больших переменных/констант пишем fcode и радуемся жизни.
via raisonance forum

Источник: https://ru-radio-electr.livejournal.com/944692.html

Сайт Angel5a: Преодолевая пределы. Часть первая. Ресурсы

При выборе среды разработки для контроллеров не мало важным является наличие ограничений по времени использования, объему кода, набора поддерживаемых архитектур и компиляторов. Использование платных версий сред часто затруднительно, а порой и не возможно, ввиду высокой их стоимости.

Наиболее популярным решением, к сожалению, является использование crack’ов и keygen’ов. Но мало кто задумывается над способами легального использования средств разработки «не загоняющими вас в узкие рамки».

В предлагаемой серии публикаций будет рассмотрено два способа использования среды разработки с ограничением по объему для создания прошивок, куда большего размера.

Как всё начиналось (вода)

Естественно, что появление в свободном доступе дешёвых восьми битных контроллеров вызвало у меня интерес. Отличная замена AVR подумал я. А появление на рынке дешёвого внутрисхемного отладчика в виде STM8Discovery окончательно поставило крест на микроконтроллерах AVR. Накачав всевозможных средств разработки, я приступил к их изучению. Вот тут то и оказалась загвоздка.

ST Visual Develop. Компания STM для своих контроллеров предлагает бесплатную среду разработки, но она включает только ассемблер. На ассемблере писать то можно, но не 32 килобайта же кода.

Это сколько времени уйдет на разработку. Да и в конце концов, не в 20 веке живем, когда каждый байт, и каждый такт были на счету (золотое было время, однако). Нет, такой вариант нас не устраивает.

Надо думать что-то другое.

К счастью к среде можно подключить Си компилятор других разработчиков: Cosmic и Raisonance. К чему я и приступил.

Raisonance. Ребята оказались красавцы. Мой запрос регистрации они просто проигнорировали. В итоге их компилятор у меня больше не живет.

Cosmic. Я конечно не спорю, я сам долго тормозил и не ставил среду. Недостаток ли свободного времени то был или лень, но между загрузкой cxstm8_16k (бесплатная версия до 16кбайт и без лимита по времени) и попыткой её активации прошло 3 месяца.

За это время указанная версия перестала существовать (с 1 сентября 2011года она не доступна) и активирована быть так же не может. Таким образом, из доступных вариантов осталась только годовая версия на 32кбайта. Но что-что, а ограничения по времени не для меня. Так Cosmic постигла та же участь что и Raisonance.

Но всё же стоит поблагодарить поддержку Cosmic. Если я дорасту до платной версии, то вы будите первыми претендентами.

Печально, в прочем средства от ST удалять спешить не будем, они ещё пригодятся.

IAR. Практически от всех кто её использовал, мне доводилось слышать «Она лучше ***, так как *** основана на Eclipse» и прочий абсолютный бред. По сему установлена IAR была в последнюю очередь. Что сказать: активация прошла без проблем… оба раза, компилирует, отладка работает, внутрисхемная тоже. Из ограничений бесплатной версии 8кбайт кода.

Платные версии не рассматривались. Изучение и разработка идет для себя самого, а денег платные версии просят достаточно много. Я не готов пока отдавать такие средства, за неизвестно что.

Кряки не рассматривались в принципе. Думаю все и так в курсе моих мировоззрений в отношении лицензионного ПО.

Итог: В качестве среды разработки выбрана бесплатная версия IAR. В качестве вспомогательных утилит бесплатный набор ST Toolset.

Как быть с ограничением в 8кбайт (вода)

А мозг как всегда требует выноса. Половина контроллеров STM8 имеет 32кбайт флэш-памяти, как их можно задействовать, имея среду с ограничением в 8кбайт? И не важно же потребуются ли они мне. Интересен сам процесс. Интересно преодолевать преграды, порою поставленные самим собой, брать ране непреодолимые высоты, покорять новые вершины. Интересно развиваться.

И ей богу, ну не понимаю я людей что, встретив ограничение в программе, качают кряки. Вы увядаете в развитие. И никакое «не отдадим буржуям наши деньги» тут не оправдание. Вы попросту грабите разработчиков. Превращаетесь в жалких тупых воров. Но впрочем, я отвлекся.

И так, задача ясна: «Получить возможность использовать всю доступную в контроллере флэш-память, при использовании среды с меньшими возможностями». Ориентируемся на IAR, а по возможности учитываем и существование других сред.

Подопытный кролик

Изначально хотелось помигать светодиодом, да что-то передумал. Наверное, потому что Discovery и сама это прекрасно умеет делать. Тогда в качестве жертвы выберем многострадальный и куда только не втуляемый дисплей от Nokia 3310. А что поделать, нравятся мне всевозможные дисплейчики. Так совместим приятное с полезным.

Как создавать проекты в IAR объяснит dcoder с сообщества в своем курсе, я надеюсь. Для самого дисплея возьмем ту же библиотеку что и в восьмом уроке моего курса по LPC1343 и чуток подработаем её напильником для запуска на discovery (полный код в архиве).

Ресурсы (Resources)

Что такое ресурсы? Ресурсы – это просто набор байт данных.

Что может быть в ресурсах? Да что угодно. Ресурсы могут быть строковые, графические, числовые или просто двоичные. Предположим мы хотим, что бы наш контроллер выводил на экран логотип при загрузке. Данная картинка и будет являться ресурсом. Строка приветствия – ресурс. Таблица шрифта для вывода символов на дисплей так же является ресурсом.

Ресурсы хорошо знакомы программистам под Windows (с применением WinAPI). Но конечно предлагаемая мной модель ресурсов отличается от модели применяемой в WinAPI. В частности я отказываюсь от такого понятия как «загрузка ресурса», чем меньше копирований, тем лучше. Так же у моих ресурсов не предполагается поиска по имени, имя у ресурса будет только чисто символически.

И так, ресурс – набор байт, расположенный по определенному адресу. Давайте сделаем вид, что нам не хватило 500 байт под логотип, и поместим изображение в ресурсы.

Как создать?

Я не ищу лёгких путей и пошел через лесы-горы-напрямик.

Для создания ресурсов применяем ST Visual Develop.

Создаём assembler проект и в основном файле размещаем (заменив любезно созданный средой шаблон) примерно следующее:stm8/ WORDS segment byte at A000-A1F7 'logo' segment 'logo' image dc.

b $02, $01, $00, $00, $00, $00, $00, $03 … и ещё 60 строк данных картинки dc.b $ca, $a5, $d2, $65, $32, $1c, $08, $00 dc.b $00, $00, $00, $00, $00, $00, $00, $00 end

Да, не для слабонервных. Но кто заставляет вас набирать всё это дело ручками? Для получения такого файла вполне можно написать небольшую утилиту и пользоваться потом ей. Так в архиве ConvertIntro.zip имеется программа, формирующая C-source, stm8-asembler и двоичный файл.

А без всевозможных утилит в ассемблере легко создаются ресурсы строк: WORDS segment byte at A200-A2FF 'strings' segment 'strings' table dc.b “Hello World”, 0

По своему усмотрению либо собираем все файлы вместе в одном проекте, либо вообще все в один файл сливаем, либо с каждым файлом работаем по отдельности. Хоть в одном проекте по очереди, хоть в разных проектах – не суть важно.

Далее убеждаемся что в меню “Project” -> “Settings” на закладке “ST Link” поле “Format” имеет значение “Motorola S-record”.

После чего жмем “Build(F7)”. Всё, теперь у нас есть *.s19 файл ресурса картинки. В прикрепленном архиве res.zip можно его попробывать найти.

Как прошивать?

Для заливки ресурса картинки во флэш-память контроллера можно воспользоваться, например ST Visual Programmer.

Для этого выбираем раннее сгенерированный файл *.s19 и жмем «Program address range», указываем начальный и конечный адреса ресурса и жмем «OK». Вот собственно и всё.

Важно отметить, что прошивать надо именно область, дабы не затереть имеющуюся прошивку. Так же рекомендовал бы рядом с ресурсом поместить строку с его «именем». По данному имени в дальнейшем можно будет легче локализовать область расположения ресурса и произвести его замену.

Как использовать?

С получением доступа к ресурсу всё гораздо проще, чем может быть. Адрес ресурса нам известен. Нам достаточно подставить этот адрес там, где требуется использовать ресурс.

При этом не важно какой вы используете компилятор: Cosmic, Raisonance или IAR.

// исключительно для удобства пишем макрос (даём ресурсу «локальное имя») #define intro ((const unsigned char*)0xA000) // используем ресурс (intro – данное ресурсу «локальное имя») LCD_screen( intro );

Таким же образом можно было бы вынести и все строки, и таблицу символов, и любые другие неизменяемые данные. При задании соответствующего макроса нет разницы, что данные находятся в ресурсах, что тут же в коде. Полный код можно посмотреть в прикрепленном архиве odo.zip.

Результат

Собственно после запуска программы в среде IAR мы можем наблюдать картинку из ресурса:

Почему именно так? (вода)

Почему контроллер прошивается ST Visual Programmer? Просто было взято то, что есть под рукой. Программа поддерживает прошивку только выбранной области, что и используется. Если у вас имеется boot-loader какой или другая программа позволяющая залить страницу-другую в требуемую область, то вполне можно ей воспользоваться.

Почему для ресурса используется *.s19 файл? Просто я так решил. Файл *.s19 был выбран первым при открытии ST Visual Programmer, и его умеют формировать обе среды. С тем же успехом можно применить и *.hex файл. А вот двоичные файлы, к сожалению, не поддерживаются программой ST Visual Develop, из-за этого и пришлось прибегнуть к услугам ассемблера.

Почему для формирования *.s19 файла применялась ST Visual Develop? И просто так тоже. Но основное внимание уделялось «что бы всегда было доступно». Среда от ST предлагается бесплатно и без ограничений.

Таким образом, даже не имея под рукой оригинальной среды разработки, остаётся возможность заменить тот или иной ресурс.

В следующей статье будет предложен вариант подготовки ресурсов в среде IAR, только что бы ни использовать десяток сред для простой задачи.

Читайте также:  Обзор тепловизора flir one 2

Почему утилита формирует ассемблер-файл, который затем компилируется студией, почему не формировать сразу *.s19 или *.hex файл? Просто мне было лень разбирать данные форматы, и сделал то, что знал. Пока мне это не критично и у меня есть студия. В дальнейшем, что маловероятно, сделаю программу с GUI интерфейсом и культурным выбором формата. Вы же для себя можете написать что пожелаете.

Разработка в заводских масштабах

Естественно, что прошить таким методом десяток контроллеров не представляет большого удовольствия. Одна и та же рутинная работа, да ещё бы и не забыть чего. Вообще пользоваться невозможно. Однако кто нас заставляет прошивать все контроллеры по кусочкам?

Возвращаемся к ST Visual Programmer и обнаруживаем в нем возможность “клонирования” контроллеров.

На самом деле, после всей этой заливки прошивки по частям мы можем нажать “Read current tab or active sectors” или “Read all tabs” и у нас будет полная прошивка контроллера. Просто в меню выбираем “File” -> “Save As…” и получаем *.s19/*.

hex файл, который можем одним махом записать во все остальные контроллеры. Я дополнительно из этого файла убираю ненужные нулевые строки. Но в принципе то это не обязательно.

А вот если вам в десяток устройств надо поместить один код, но разные картинки, текст, последовательности команд вашей виртуальной машины, то «ресурсы» самый подходящий для вас выбор.

Прилагаемый файл complite.s19 представляет полную прошивку платы STM-Disсovery с примером из данной статьи.

Вместо заключения

Использование «ресурсов» в единичных разработках не доставляет больших неудобств. Применение в серийном производстве так же не является проблемой.

Изложенный выше принцип естественно не ограничивается ни семейством STM8, ни средой IAR. Технологию “ресурсов” можно применять для STM32, LPC и AVR (остальные полагаю тоже не исключение). И пускай программа пример и так укладывалась в лимиты, но ведь это только пример.

Изложенный способ будет наиболее удобен тем, кто использует среду ST Visual Develop с компилятором от Cosmic или Raisonance. В следующей публикации будет рассмотрен способ формирования ресурсов в среде IAR.

P.S.: Эта самая «есен-пень» статья столь очевидна, что никто соответствующую «технологию» попросту не применяет. Видать считают это ниже своего уровня (странно, воровство почему-то не ниже их уровня).

Файлы: complite.s19.zip, odo.zip, res.zip

Следующая >

Источник: http://angel5a.narod.ru/stm8/libs1.html

Создаем первый проект для STM8S в среде ST Visual Develop

Запускаем ST Visual Develop:

Выбираем меню Debug instrument->Target settings… Для STM8S-discovery в окне указываем способ связи: Swim ST-Link. Нажимаем ОК:

ИЛИ

Если в наличии нет физической платы МК, можно воспользоваться симулятором. Для этого в окне указываем способ связи: SimulatorНажимаем ОК. Если будут появляться окна с настройками виртуального МК, нажимаем ОК.

Меню File->New workspace… Далее идут разные окна, вводим данные и нажимаем ОК:

На плате STM8S-discovery установлен МК STM8S105C6. Важно точно указывать модель МК, чтобы не возникало непонятных ошибок и “глюков”:

Будет создан новый проект (project) и рабочее пространство (workspace), в котором размещается этот проект. К проекту будут добавлены файлы исходного кода. Файл main.c содержит главную функцию main() на языке Си.

Программа на языке Си начинает выполняться с этой функции (до этого выполняется подготовка МК к работе и инициализация окружения языка Си, но для программиста на Си эта часть программы незаметна и добавляется автоматически компилятором и средой разработки). 

Сохраняем – меню File->Save workspace

Изменим настройки проекта, меню Project->Settings…

Эта настройка позволяет избежать сообщения об ошибке, что область памяти .ubsct слишком мала (у меня эта ошибка возникла, когда моей программе понадобился глобальный массив на 255 байт). Это сделать желательно:

Эта настройка включает генерацию файла карты памяти (*.map). Это делать необязательно. Этот файл полезен, чтобы посмотреть, как программа располагается в памяти, сколько памяти занимает, по какому адресу расположены переменные и функции, и др:

Далее из исходных файлов на языке Си необходимо подготовить двоичный образ программы для записи в память МК. Этот процесс называется компиляцией и сборкой программы. 

Выбираем конфигурацию Debug (это значит, что выходной elf файл будет содержать информацию, необходимую для отладки), далее меню Build->Build или F7 на клавиатуре. Если компилятор языка Си Cosmic C Compiler был успешно установлен и нашел свою лицензию, то программа будет успешно собрана с сообщением “0 errors(s), 0 warning(s)“:

Подключаем плату STM8S-discovery к USB, выбираем меню Debug->Start Debugging. Если настройки связи были выбраны верно, то программа будет записана во Flash память МК (и будет хранится там после выключения питания), МК будет остановлен на первой команде и показано окно отладчика:

F5 запускает программу на выполнение. Shift+F5 останавливает программу в отладчике. Видно, что программа всё время выполняет цикл while(1). Также видно, по какому адресу происходит выполнение, и видно команду на языке ассемблера (JRT 0x80d3).

Таким образом создаётся минимальный проект в среде ST Visual Develop, который собирается, записывается в память МК и запускается под отладчиком.

Меню Debug->Stop Debugging прекращает отладку.

Источник: http://almalabs.blogspot.com/2015/02/stm8s-st-visual-develop.html

STVD-STM8 – ST Visual develop IDE for developing ST7 and STM8 applications – STMicroelectronics

By using this Licensed Software, You are agreeing to be bound by the terms and conditions of this License Agreement. Do not use the Licensed Software until You have read and agreed to the following terms and conditions. The use of the Licensed Software implies automatically the acceptance of the following terms and conditions.

Licensed Software: means the enclosed SOFTWARE/FIRMWARE, EXAMPLES, PROJECT TEMPLATE and all the related documentation and design tools licensed and delivered in the form of object and/or source code as the case maybe.

Product: means Your and Your’s end-users’ product or system, and all the related documentation, that includes or incorporates solely and exclusively an executable version of the Licensed Software and provided further that such Licensed Software or derivative works of the Licensed Software execute solely and exclusively on microcontroller devices manufactured by or for ST.

STMicroelectronics (“ST”) grants You a non-exclusive, worldwide, non-transferable (whether by assignment or otherwise unless expressly authorized by ST) non sub-licensable, revocable, royalty-free limited license of the Licensed Software to:

(i) make copies, prepare derivative works of the object code versions of the Licensed Software for the sole purpose of designing, developing and manufacturing the Products;

(ii) make copies, prepare derivative works of the documentation part of the Licensed Software, for the sole purpose of providing documentation for the Product and its usage;

(iii) make, have made, use, sell, offer to sell, import and export or otherwise distribute Products also through multiple tiers.

Title to the Licensed Software, related documentation and all copies thereof remain with ST and/or its licensors. You may not remove the copyrights notices from the Licensed Software and to any copies of the Licensed Software. You agree to prevent any unauthorized copying of the Licensed Software and related documentation.

Unless otherwise explicitly stated in this Agreement, You may not sell, assign, sublicense, lease, rent or otherwise distribute the Licensed Software for commercial purposes, in whole or in part.

You acknowledge and agree that any use, adaptation translation or transcription of the Licensed Software or any portion or derivative thereof, for use with processors manufactured by or for an entity other than ST is a material breach of this Agreement and requires a separate license from ST.

No source code relating to and/or based upon Licensed Software is to be made available or sub-licensed by You unless expressly permitted under the Section “License”.

The Licensed Software is provided “as is” and “with all faults” without warranty of any kind expressed or implied.

ST and its licensors expressly disclaim all warranties, expressed, implied or otherwise, including without limitation, warranties of merchantability, fitness for a particular purpose and non-infringement of intellectual property rights.

ST does not warrant that the use in whole or in part of the Licensed Software will be interrupted or error free, will meet your requirements, or will operate with the combination of hardware and software selected by You.

You are responsible for determining whether the Licensed Software will be suitable for your intended use or application or will achieve your intended results. ST will not be liable to You and/or to any third party for the derivative works of the Licensed Software developed by You.

ST has not authorised anyone to make any representation or warranty for the Licensed Software, and any technical, applications or design information or advice, quality characterization, reliability data or other services provided by ST shall not constitute any representation or warranty by ST or alter this disclaimer or warranty, and in no additional obligations or liabilities shall arise from ST’s providing such information or services. ST does not assume or authorize any other person to assume for it any other liability in connection with its Licensed Software.

Nothing contained in this Agreement will be construed as:

(i) a warranty or representation by ST to maintain production of any ST device or other hardware or software with which the Licensed Software may be used or to otherwise maintain or support the Licensed Software in any manner; and

(ii) a commitment from ST and/or its licensors to bring or prosecute actions or suits against third parties for infringement of any of the rights licensed hereby, or conferring any rights to bring or prosecute actions or suits against third parties for infringement.

However, ST has the right to terminate this Agreement immediately upon receiving notice of any claim, suit or proceeding that alleges that the Licensed Software or your use or distribution of the Licensed Software infringes any third party intellectual property rights.

All other warranties, conditions or other terms implied by law are excluded to the fullest extent permitted by law.

Источник: https://www.st.com/en/development-tools/stvd-stm8.html

STM8+SPL+COSMIC+STVD: Быстрый старт

разделы: STM8 , среда разработки , дата: 6 ноября 2016г

Как всем известно, с марта этого года компилятор COSMIC for STM8 стал полностью бесплатен и без ограничений на размер генерируемого кода. Он имеет полную поддержку SPL(Standard Peripheral Library) и фирменой среды разработки – STVD(ST Visual develop IDE).

К сожалению, Cosmic работает только под операционными системами Windows, и для активации требует лецензионный ключ который можно прождать несколько дней. С другой стороны, stm8flash в Linux не умеет прошивать STM8L151C8, а с COSMIC через виртуалку вполне можно работать, да из под Wine он тоже запускается.

Ок, для начала нам потребуется скачать SPL и STVD c сайта https://my.st.com, а с сайта http://www.cosmic-software.com/download.php сам компилятор COSMIC.

Как скачать SPL я рассматривал год назад в Введение в STM8: программирование и прошивка с помощью клона ST-Link v2, версия для Linux, а связку STVP+STVD весной в STM8 + IAR + ST-LINK2: программирование, прошивка и отладка из под Windows.

Однако с тех многие ссылки побились, поэтому предлагаю пройти квест заново. Потому что поиск чего-то на st.com, действительно напоминает дурной квест.

В качестве целевого чипа я буду использовать STM8S103F3P6, изредка переключаясь на STM8L051/STM8L151 там, где есть необходимость.

1) Установка и настройка среды разработки

Сначала нам нужно скачать SPL и STVD. Будем считать, что драйвер ST-LINK v2 уже установлен. Заходим на сайт фирмы ST Microelectonics https://my.st.com, регистируемся или логинимся, и в стоке поиска вводим: “STM8S103F3”. В появившимся окне кликаем по ссылке с нужным чипом:

Открывшуюся страницу проматываем вниз до пункта “Tools and Software”, и щелкаем по вкладке “EMBEDDED SOFTWARE”:

В открывшийся таблице нас будет интересовать пункт “STM8S/A Standerd peripheral library”:

Щелкаем и скачиваем:

Точно также, поиском, по например: STM8L051F3, можно найти SPL для L-cерии:

STVD находится поиском по самому себе:

Скачаные архивы следует распаковать, а STVD нужно будет установить. Напомню, что в связке с STVD ставиться флешер – STVP(ST Visual Programmer). STVD – это фирменная среда программирования на ассеблере STM8 и STM7. Что бы программировать на Си, нужно будет установить Си-компилятор с сайта http://www.cosmic-software.com/download.php

В придачу нам пытаются втюрить копилятор для STM32 с ограничением в 32 Кбайта. Придется брать;)

Однако, прежде нам предлагают заполнить анкету:

После установки, будет предложено получить лицензионный ключ. Для этого нужно отправить емэйл на адрес stm8_free@cosmic.fr указав в качестве темы: “STM8FSE, STM32 32K License Request”:

После закрытия “блокнота”, появится текст который который следует скопировать в тело емайлa:

Т.к. я отправлял запрос в то время когда во Франции были праздничные дни, ихний почтовый робот мне в ответ отправил сообщение, о том, что лицензионый ключ мне будет отправлен после праздников, и просили не отправлять повторные запросы:

Что и было сделано в свое время емэйлом, в аттаче которого содержался ключ:

В самом емэйле написано, что ключ следут скопировать в папку с программой Cosmic.

Выполнив все рекомендации можно будет для проверки запустить Cosmic, и если никаких пердупреждений не появилось, значит все номрально. Если же нет, по появится окно, через которое попросят указать путь к ключу. От Cosmic нам нужен будет только компилятор, поэтому программу можно будет закрыть и запусить STVD:

Через меню->File->New Workspace создаем новый проект:

Задаем название workspace'а и выбираем каталог:

Пишем имя проекта, в Toolchain из выпадающего списка выбираем “Cosmic STM8”, указываем путь к компилятору:

Выбираем тип микроконтроллера:

В древовидном списоке проекта, в source файлах, находим main.c и двойным щелчком отрываем его. Пробуем скомпилировать проект щеклнув по кнопке Build(F7):

Теперь нужно будет скопировать SPL в папку проекта:

Кроме того пондобиться скопировать файл stm8s_conf.h из папки Project/STM8S_StdPeriph_Template в папку inc:

Осталось дело за малым, добавить SPL в проект. Для этого, в древовидном списоке проекта, следут щелкнуть правой кнопкой мышки на “Include Files” и выбрать опцию “Add Files to Folder…”

После чего выбрать заголовочные файлы SPL:

Теперь добавляем в текст программы заголовочный файл stm8s.h и пробуем персобрать проект:

и… получаем ошибку. Что бы ее исправить, откроем файл stm8s.h и в самом начале найдем такой блок из дефайнов:

Здесь предлагается раскоментировать строку со своей линейкой чипов. Однако более грамотно будет задать это через свойства проекта. Для этого через меню->Project->Settings… задаем нужный define в свойствах Си компилятора:

Пробуем пересобрать проект еще раз, и в этот раз все должно пройти успешно:

Теперь можно начинать программировать. Для начала, попробуем добавить вызов функции GPIO_DeInit(GPIOB), и скомпилировать проект:

И снова получаем ошибку, на этот раз от линковщика. Что бы ее испрать, в “Source Files” нужно добавить файл stm8s_gpio.c:

Жмем “Rebuild All” и снова получаем ошибку:

Виной всему служит неопределенная функция assert_failed в файле stm8_conf.h. Чтобы исправить ситуацию, добавим после функции main() следующий код:

#ifdef USE_FULL_ASSERT void assert_failed(uint8_t* file, uint32_t line)
{ while (1) { }
}
#endif

В этот раз все в порядке:

2) Примеры для STM8S103F3

Состовляем простейший blink:

#include “stm8s.h” #define LED GPIO_PIN_5
#define LED_PORT GPIOB static void delay(uint32_t t) { while(–t);
}
main()
{ GPIO_DeInit(LED_PORT); GPIO_Init(LED_PORT, LED, GPIO_MODE_OUT_PP_LOW_FAST); for(;;){ delay(60000); GPIO_WriteReverse(LED_PORT, LED); }
} #ifdef USE_FULL_ASSERT void assert_failed(uint8_t* file, uint32_t line)
{ while (1) { }
}
#endif

Теперь можно подключить программатор к компьютеру. Чтобы загрзить прошивку в чип и приступить к отладке, в меню->Debug Instrument->Target Settings… выберем Swim ST-Link, после чего можно будет нажать на кнопку начала отладки на панели инструментов:

Панель отладки станет активной, и откроется окно с ассемблерным кодом. Мы можем нажать на восклицательный знак, дав команду на выполнение – Run, или мы можем нажать на красный крестик завершая сеанс отладки, после чего микроконтроллер перезагрузится и начнет выполнение программы:

Зеленый светодиод начнет периодически мигать.

Попробуем добавить тактирование. Для этого в Source Files добавим файл stm8s_clk.c, а программу приведем к следующему виду:

#include “stm8s.h” #define LED GPIO_PIN_5
#define LED_PORT GPIOB static void delay(uint32_t t) { while(–t);
} uint8_t i;
main()
{ GPIO_DeInit(LED_PORT); GPIO_Init(LED_PORT, LED, GPIO_MODE_OUT_PP_LOW_FAST); CLK_DeInit(); i=0; for(;;){ delay(60000); GPIO_WriteReverse(LED_PORT, LED); if (++i == 5) { CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); } }
} #ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line){ while (1);
}
#endif

После двух медленных миганий светодиода, частота мигания должна ускориться:

Теперь о прерываниях. По мотивам поста STM8S+STM8L+SDCC+SPL: функции delay_ms() и delay_us() на таймере TIM4 попробуем составить Blink с задержкой по таймеру TIM4. Для этого, в директорию проекта нужно будет добавить заголовочный файл main.h с объявлением обработчика прерывания:

#ifndef __MAIN_H
#define __MAIN_H @far @interrupt void IRQ_Handler_TIM4(void); #endif

Этот заголовочный файл нужно будет добавить в “Include Files” проекта.

Файл main.c будет такого содержания:

#include “stm8s.h” #define LED GPIO_PIN_5
#define LED_PORT GPIOB
#define TIM4_PERIOD 124 volatile uint16_t count; @far @interrupt void IRQ_Handler_TIM4(void)
{ if (count) count–; TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
} void delay_ms(uint16_t ms)
{ TIM4_Cmd(DISABLE); TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD); TIM4_ClearFlag(TIM4_FLAG_UPDATE); TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); count = ms; TIM4_Cmd(ENABLE); while(count);
} ErrorStatus status = FALSE; main()
{ GPIO_DeInit(LED_PORT); GPIO_Init(LED_PORT, LED, GPIO_MODE_OUT_PP_LOW_FAST); CLK_DeInit(); CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); TIM4_DeInit(); enableInterrupts(); for(;;){ GPIO_WriteReverse(LED_PORT, LED); delay_ms(500); }
} #ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line){ while (1);
}
#endif

Само собой, файл stm8s_tim4.c должен быть добавлен в Source Files проекта.

Осталось изменить пару строк в файле stm8_interrupt_vector.c

Нужно добавить объявление заголовочного файла main.c:

И добавить имя функции-обработчика 23-го прерывания в таблицу векторов:

Теперь можно собирать проект нажав на кнопку “Rebuild All” и загрузить в чип нажав значек “D” на панели отладки. Должно работать.

При возникновении проблем, на обратчике прерывания можно поставить точку остановки, и нажав Run(восклицательный знак на панели отладки), проследить за выполнением кода:

Кроме того, открыв вкладку Console мы, попадем в консоль прекрастно знакомого отладчика gdb, с возможностью управления прогаммой в ручном режиме:

Теперь попробуем включить UART интерфейс. Как не сложно догдаться, первым делом потребуется добавить файл stm8s_uart1.c в “Source Files”.

Исходник main.c примет следующий вид:

#include “stm8s.h”
#include “stdio.h” #define LED GPIO_PIN_5
#define LED_PORT GPIOB
#define TIM4_PERIOD 124
#define PUTCHAR_PROTOTYPE char putchar(char c) volatile uint16_t count;
uint16_t i; @far @interrupt void IRQ_Handler_TIM4(void)
{ if (count) count–; TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
} void delay_ms(uint16_t ms)
{ TIM4_Cmd(DISABLE); TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD); TIM4_ClearFlag(TIM4_FLAG_UPDATE); TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); count = ms; TIM4_Cmd(ENABLE); while(count);
} ErrorStatus status = FALSE; main()
{ GPIO_DeInit(LED_PORT); GPIO_Init(LED_PORT, LED, GPIO_MODE_OUT_PP_LOW_FAST); CLK_DeInit(); CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); TIM4_DeInit(); UART1_DeInit(); UART1_Init((uint32_t)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); enableInterrupts(); i=0; for(;;){ GPIO_WriteReverse(LED_PORT, LED); delay_ms(1000); printf(“count: %u
“,++i); }
} PUTCHAR_PROTOTYPE
{ UART1_SendData8(c); while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
} #ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line){ while (1);
}
#endif

Результат работы выглядит как-то так:

На этом думаю можно остановиться, основные вопросы использования компилятора Cosmic я постарался разобрать.

3) Примеры для STM8L151C8

В L-серии, так же как и в STM32 чипы делятся по размеру флеш-паняти. 151-я линейка делится на Medium-density с рамером флеш-пямяти 32 Кбайта и на High-density с размерм флеш-пямяти 64-Кбайта. STM8L151C8 относится к high-density чипам:

Поэтому в опциях препроцессора слеует указать STM8L15X_HD:

Простейший Blink будет выглядить так:

#include “stm8l15x.h” #define PORT GPIOA
#define LED GPIO_Pin_2 static void delay(uint32_t t)
{ while(t–);
} main()
{ GPIO_DeInit(PORT); GPIO_Init(PORT, LED, GPIO_Mode_Out_PP_Low_Fast); for(;;){ delay(60000); GPIO_ToggleBits(PORT, LED); }
} #ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ while (1);
}
#endif

Здесь следует добавить в проект файл stm8l15x_gpio.c.

Теперь добавим к Source Files файл stm8l15x_clk.c а в main.c добавим фукции настройки скоростного генератора – HSI:

#include “stm8l15x.h” #define PORT GPIOA
#define LED GPIO_Pin_2 static void delay(uint32_t t)
{ while(t–);
} main()
{ GPIO_DeInit(PORT); GPIO_Init(PORT, LED, GPIO_Mode_Out_PP_Low_Fast); CLK_DeInit(); CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); for(;;){ delay(60000); GPIO_ToggleBits(PORT, LED); }
} #ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ while (1);
}
#endif

Светодиод начал мигать значительно быстре.

Чтобы добавить прерывание по таймеру TIM4, нужно добавить в проект заголовочный файл main.h. Его содержимое тоже, что и для STM8S103F3:

#ifndef __MAIN_H
#define __MAIN_H @far @interrupt void IRQ_Handler_TIM4(void); #endif

Так же должен быть добавлен к Source Files файл stm8l15x_tim4.c.

В файле stm8_interrupt_vector.c дожен быть объявлен заголовочный файл main.h, а в таблице прерываний обраотчик должен быть объявлен как 25-е прерывание, а не 23-е как stm8s103f3.

Тогда Blink с задержкой на таймере TIM4 для STM8L151C8 будет выглядить так:

#include “stm8l15x.h” #define PORT GPIOA
#define LED GPIO_Pin_2
#define TIM4_PERIOD 124 volatile uint16_t count; @far @interrupt void IRQ_Handler_TIM4()
{ if (count) count–; TIM4_ClearITPendingBit(TIM4_IT_Update);
} void delay_ms(uint16_t ms)
{ TIM4_Cmd(DISABLE); TIM4_TimeBaseInit(TIM4_Prescaler_128, TIM4_PERIOD); TIM4_ClearFlag(TIM4_FLAG_Update); TIM4_ITConfig(TIM4_IT_Update, ENABLE); count = ms; TIM4_Cmd(ENABLE); while(count);
} main()
{ GPIO_DeInit(PORT); GPIO_Init(PORT, LED, GPIO_Mode_Out_PP_Low_Fast); CLK_DeInit(); CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE); TIM4_DeInit(); enableInterrupts(); for(;;){ delay_ms(1000); GPIO_ToggleBits(PORT, LED); }
} #ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ while (1);
}
#endif

Первый UART в STM8L151C8 висит на ножках 41(RX) и 42(TX). Для его использования в Source Files следует добавть файл SPL – stm8l15x_usart.c

Исходник будет такой:

#include “stm8l15x.h”
#include “stdio.h” #define PORT GPIOA
#define LED GPIO_Pin_2
#define TIM4_PERIOD 124 #define PUTCHAR_PROTOTYPE char putchar (char c) volatile uint16_t count;
uint16_t i; @far @interrupt void IRQ_Handler_TIM4()
{ if (count) count–; TIM4_ClearITPendingBit(TIM4_IT_Update);
} void delay_ms(uint16_t ms)
{ TIM4_Cmd(DISABLE); TIM4_TimeBaseInit(TIM4_Prescaler_128, TIM4_PERIOD); TIM4_ClearFlag(TIM4_FLAG_Update); TIM4_ITConfig(TIM4_IT_Update, ENABLE); count = ms; TIM4_Cmd(ENABLE); while(count);
} main()
{ GPIO_DeInit(PORT); GPIO_Init(PORT, LED, GPIO_Mode_Out_PP_Low_Fast); CLK_DeInit(); CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE); CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE); TIM4_DeInit(); USART_DeInit(USART1); USART_Init(USART1, (uint32_t)9600, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx)); enableInterrupts(); i=0; for(;;){ delay_ms(1000); GPIO_ToggleBits(PORT, LED); printf(“count: %d
“,++i); }
} PUTCHAR_PROTOTYPE
{ USART_SendData8(USART1, c); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } #ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ while (1);
}
#endif

Результат работы:

На этом пожалуй все.

поделиться:

Источник: http://www.count-zero.ru/2016/stm8_spl_cosmic/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}