Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/86: Рейтинг темы: голосов - 86, средняя оценка - 4.55
shivtyokov

Управление STM8S-Discovery программой на C++ Builder

26.01.2013, 00:55. Показов 16681. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем за время своего ознакомления с отладочным набором Stm8s-Dyscovery возник такой вопрос... А можно ли взаимодействовать с ним через приложение написанное на C++Builder или Visual Studyo? Иными словами... Хочу понять как сделать так что бы в программе написанной с помощью C++Builder, по нажатию на кнопку зажигался светодиод на самом модулеStm8s-Dyscovery? Я так понимаю надо подключать какие-то библиотеки или что?
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2013, 00:55
Ответы с готовыми решениями:

STM8S-Discovery
Здравствуйте, товарищи STM исследователи). Занялся изучением STM8S-Dyscovery. Установил IAR, скачал стандартные библиотеки с STI (...

Stm8S-Discovery + Rfm22
Возникла проблема с посылкой байта с помощью трансивера rfm22. Отправка происходит в цикле. После отправки возникает прерывание, на ножке...

ST-LiNK от stm8s-discovery
ни как не могу понять. Возможно ли зашить в st-link от stm8s-discovery какую нибудь другую прошивку для прошивки stm32? versaloon - на этом...

23
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
26.01.2013, 01:33
STM8S на плате дисковери подключен к пк только через SWIM/ST-Link и только для программирования, моста USB-UART как у многих других плат (arduino, launchpad, PB ...) для передачи данных там нет.

Если есть внешний USB-UART мост или конвертер уровней RS232-UART вроде max232, цепляйте его к UARTу мк и пишите прошивку и программу для управления, это не сложно.
0
shivtyokov
26.01.2013, 03:44
Цитата Сообщение от яверт
STM8S на плате дисковери подключен к пк только через SWIM/ST-Link и только для программирования, моста USB-UART как у многих других плат (arduino, launchpad, PB ...) для передачи данных там нет.

Если есть внешний USB-UART мост или конвертер уровней RS232-UART вроде max232, цепляйте его к UARTу мк и пишите прошивку и программу для управления, это не сложно.
Похоже что вы меня не поняли. Я имел в виду другое... Вот к примеру в IAR можно написать код на С/С/++ и помигать светодиодом подключенным к Stm8s-Dyscovery. А вот если есть приложение написанное на С++ Builder`е в котором при нажатии на кнопочку в программе надо что бы помигал светодиод. Все же я думаю надо либо библиотеки от IAR к Builder`у подключить или что-то иное... А, если все таки я вас не правильно понял, то значит ситуации с моим Stm8s-Dyscovery совсем плоха. Значит надо искать другое решение, другой модуль...
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
26.01.2013, 04:27
Цитата Сообщение от shivtyokov
Вот к примеру в IAR можно написать код на С/С/++ и помигать светодиодом подключенным к Stm8s-Dyscovery.
Хм, только для этого IAR скормит код компилятору, результат запишет во флеш мк, ну и сделает ему сброс.
Это таки медленный велосипед получается, не говоря про то, что во флеш писать так часто плохо, ресурс ведь 10К записей всего.
0
shivtyokov
26.01.2013, 04:41
Цитата Сообщение от яверт
Цитата Сообщение от shivtyokov
Вот к примеру в IAR можно написать код на С/С/++ и помигать светодиодом подключенным к Stm8s-Dyscovery.
Хм, только для этого IAR скормит код компилятору, результат запишет во флеш мк, ну и сделает ему сброс.
Это таки медленный велосипед получается, не говоря про то, что во флеш писать так часто плохо, ресурс ведь 10К записей всего.
Ух... Если честно я совсем недавно начал разбираться с Stm8s-Dyscovery но уже сейчас понимаю как много с ним неудобств и его мало функциональные возможности... Как я понял невозможно программно управлять светодиодами подключенными к Stm8s-Dyscovery через программу написанную на C++Builder`е? Ладно... Жалко конечно. :(
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
26.01.2013, 05:21
Цитата Сообщение от shivtyokov
Как я понял невозможно программно управлять светодиодами подключенными к Stm8s-Dyscovery через программу написанную на C++Builder`е? Ладно... Жалко конечно. :(
http://we.iosyitistromyss.ru/anton19286 ... o-usb.html
0
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
26.01.2013, 05:58
Вот у ST есть аппноут по управлению мк через терминал с пк.
Они рекомендуют распаять st232(max232) в so16 с обвязкой на макетном поле для подключения к COM порту, но как по мне лучше прикупить/сделать USB-UART мостик на cp2102 или ft232.
В C++ Builder для работы с COM портом должен быть готовый компонент.
0
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 219
26.01.2013, 15:32
shivtyokov, представьте пожалуйста задачу более четко.
Если вам нужна какая-либо железка, с помощью которой вы сможите из программы на компьютере зажечь светодиод, и не желаете при этом думать, то ваш выбор Arduino или готовые модули ввода-вывода (IOIO и пр.).
Если вам надо железку именно на STM8, и не хотите сильно патиться, то как уже предлагали:
Цитата Сообщение от яверт
Вот у ST есть аппноут по управлению мк через терминал с пк.
Они рекомендуют распаять st232(max232) в so16 с обвязкой на макетном поле для подключения к COM порту, но как по мне лучше прикупить/сделать USB-UART мостик на cp2102 или ft232.
Если у вас цель обойтись исключительно средствами STM8S-Dyscovery, то вам надо поработать мозгами и раскурить интерфейс отладчика ST-link, и через него писать напрямую в порты целевого мк.
Управлять можно, но не так просто, как вам хотелось бы.
0
shivtyokov
26.01.2013, 15:58
Цитата Сообщение от Omkit5o
shivtyokov, представьте пожалуйста задачу более четко.
Ну я даже не знаю куда четче... В общем есть сама плата Stm8s-Dyscovery с микроконтроллером STM8S105C6 на борту. К расположенным на плате контрольного модуля Stm8s-Dyscovery контактным разъемам CN1 - CN2 подключен мною светодиод. В общем, подключаю светодиод к ножке PD0 на CN4 и VDD на CN2. После чего компилирую вот этот код в IAR`е...
Code
1
2
3
4
5
6
7
#include "iostm8.h"
 
int main( void )
{
PD_DDR_bit.DDR0 = 1;  //Ножка PD0 конфигурируется на вывод
PD_ODR_bit.ODR0 = 1;  //Зажигаем нужный светодиод
}
После чего подключенный мною светодиод загорается. Все это очень круто конечно... Но есть одно но! Не уж то это можно делать только из IAR или Cosmic... Почему нельзя написать тот же самый код в C++Builder`е или Visual Studyo и поморгать светодиодом из ixi`шника? Вот как на пример описывается тут: http://www.kirmitchip.ru/articles/KA002.php или вот так: http://microsin.org/programming/avr/avr ... uages.html По первой ссылке описывается работа с модулем Ke-USB24A в другой с AVR-USB-MEGA16. Я вот уже подумываю о том что бы забросить Stm8s-Dyscovery и взяться за Ke-USB24A или AVR-USB-MEGA16.
P.S.: Да и по ним документации, материалов исходников и т.д. на порядок больше чем по Stm8s-Dyscovery.
0 / 0 / 0
Регистрация: 16.07.2005
Сообщений: 826
26.01.2013, 16:43
Программа для ПК одно, программа для МК - другое, Вы сами понимаете, что хотите?
Можно написать программу для ПК в билдере, которая по USB/UART/etc будет отправлять состояние кнопки.
Для МК же придется написать программу, которая принимает посылку с ПК, разбирает её, и в зависимости от того, что там пришло включает/выключает светодиод.
Итого надо будет писать две программы, одну в билдере - для ПК, вторую в IAR/Cosmic/etc для МК...
0
shivtyokov
26.01.2013, 18:05
Цитата Сообщение от Bomyo
Программа для ПК одно, программа для МК - другое, Вы сами понимаете, что хотите?
Можно написать программу для ПК в билдере, которая по USB/UART/etc будет отправлять состояние кнопки.
Для МК же придется написать программу, которая принимает посылку с ПК, разбирает её, и в зависимости от того, что там пришло включает/выключает светодиод.
Итого надо будет писать две программы, одну в билдере - для ПК, вторую в IAR/Cosmic/etc для МК...
Ок, понятно! Допустим я пишу первую программу на IAR и заливаю ее на микроконтроллер на Stm8s-Dyscovery, потом пишу в C++Builder`е и уже через нее посылаю. команды на программу в памяти микроконтроллера, так? А как это сделать, иными словами я не знаю как связать между собой две этих программы, можете выручить примером или как?
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
26.01.2013, 18:40
а каким именно образом физически связаны между собой контроллер stm8 и ПК, понимаете?
0
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 219
27.01.2013, 14:20
shivtyokov, ясно.
Самый простой вариант связать эти 2 устройства - собрать USB-UART (посложнее) или COM-UART (попроще, но есть не на каждом компе), либо купить дата-кабель от телефона (например, DKU-5). подключать к UART STM8S105C6. Как принять байт с UART примеры есть в сообществе, либо у меня.

Обойтись только средствами Stm8s-Dyscovery будет сложно. Это всё же отладочная плата, а не "заготовкеа под конечное устройство", как по приведённым ссылкам.
Из вариантов "дешего и сердито" были примеры к LaunchPad от TI, ссылки у меня не осталось.
0
shivtyokov
28.01.2013, 00:10
Цитата Сообщение от Omkit5o
Обойтись только средствами Stm8s-Dyscovery будет сложно. Это всё же отладочная плата, а не "заготовкеа под конечное устройство", как по приведённым ссылкам.
Ок, понятно! Ладно, последний вопрос. Наверное я уже повторяюсь, но... Вот в IAR`е откомпилировав следующий код на самой плате Stm8s-Dyscovery загорится светодиод подключенный к контактным разъемам, ножкам PD0 на CN4 и VDD на CN2...
Code
1
2
3
4
5
6
7
#include "iostm8.h"
 
int main( void )
{
PD_DDR_bit.DDR0 = 1;  //Ножка PD0 конфигурируется на вывод
PD_ODR_bit.ODR0 = 1;  //Зажигаем нужный светодиод
}
Все выполняется ресурсами IAR, так? Ух... В общем, а что если к проекту C++ Builder`у или Visual Studyo каким ни будь образом подключить библиотеки и т.д. от IAR`а? Или иное развитие событий... Пишем одну программу в IAR`е, заливаем ее на сам микроконтроллер STM8S105C6, потом пишем программку на C++ Builder`е и через нее отправляет какие-то команды к программе в памяти микроконтроллера, тем самым и организовав решение задачи... Или это невозможно? В общем как я понял не один из мною предложенных вариантов не получиться. :(
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
28.01.2013, 00:34
Цитата Сообщение от shivtyokov
Ок, понятно!
не похоже.
Цитата Сообщение от shivtyokov
Ладно, последний вопрос. Наверное я уже повторяюсь, но... Вот в IAR`е откомпилировав следующий код на самой плате Stm8s-Dyscovery загорится светодиод подключенный к контактным разъемам, ножкам PD0 на CN4 и VDD на CN2...
Код:
#include "iostm8.h"
int main( void )
{
PD_DDR_bit.DDR0 = 1; //Ножка PD0 конфигурируется на вывод
PD_ODR_bit.ODR0 = 1; //Зажигаем нужный светодиод
}
Все выполняется ресурсами IAR, так?
всё выполняется ресурсами МК, а IAR лишь превращает написанный выше код сначала в ассемблерные инструкции вроде
tood r1,1
out DDR0, r1
out ODR0, r1
ну или как-то так, ассемблер stm8 никогда в глаза не видел.
а затем уже данный код на ассемблере кодируется в набор циферок. которые потом прошиваются во флэш МК и после включения питания начинают декодироваться и исполняться.
Цитата Сообщение от shivtyokov
Ух... В общем, а что если к проекту C++ Builder`у или Visual Studyo каким ни будь образом подключить библиотеки и т.д. от IAR`а?
buylder и студия точно также написанный код превращают в набор инструкций на ассемблере для x86 (с совсем другими командами), которые потом преобразуются в совсем другой набор циферок которые потом декодируются и исполняются в центральном процессоре ПК.
если, как ты хочешь, скрестить ужа с ежом, что потом с полученным набором байт делать? кто именно его будет исполнять?

Цитата Сообщение от shivtyokov
Или иное развитие событий... Пишем одну программу в IAR`е, заливаем ее на сам микроконтроллер STM8S105C6, потом пишем программку на C++ Builder`е и через нее отправляет какие-то команды к программе в памяти микроконтроллера, тем самым и организовав решение задачи... Или это невозможно? В общем как я понял не один из мною предложенных вариантов не получиться. :(
так и надо делать, есть программа в ПК которая обрабатывает нажатие мышкой на кнопочки и посылает определённые команды в МК.
например: байт 0х01 - зажечь светодиод, а байт 0х00 - потушить.
а другая программа в МК принимает эту команду и
PD_DDR_bit.DDR0 = 1;
while(1){
while(RxBufferIsEmpty());
cmd = ReceiveByte();
if (cmd==0x01) PD_ODR_bit.ODR0 = 1;
if (cmd==0x00) PD_ODR_bit.ODR0 = 0;
}

одна проблема, на discovery, МК никак не связан с компьютером.
тот USB что есть он идёт в другой МК на котором сделан отладчик, который получая специальные команды по USB может через специальный интерфейс залезть в потроха STM8S105C6, и прочитать/записать его память.
связь через этот интерфейс организовать в принципе можно, выше я ссылку приводил, но так делать не очень красиво
0
shivtyokov
28.01.2013, 13:25
Цитата Сообщение от _pv
Цитата Сообщение от shivtyokov
Ок, понятно!
не похоже.
Цитата Сообщение от shivtyokov
Ладно, последний вопрос. Наверное я уже повторяюсь, но... Вот в IAR`е откомпилировав следующий код на самой плате Stm8s-Dyscovery загорится светодиод подключенный к контактным разъемам, ножкам PD0 на CN4 и VDD на CN2...
Код:
#include "iostm8.h"
int main( void )
{
PD_DDR_bit.DDR0 = 1; //Ножка PD0 конфигурируется на вывод
PD_ODR_bit.ODR0 = 1; //Зажигаем нужный светодиод
}
Все выполняется ресурсами IAR, так?
всё выполняется ресурсами МК, а IAR лишь превращает написанный выше код сначала в ассемблерные инструкции вроде
tood r1,1
out DDR0, r1
out ODR0, r1
ну или как-то так, ассемблер stm8 никогда в глаза не видел.
а затем уже данный код на ассемблере кодируется в набор циферок. которые потом прошиваются во флэш МК и после включения питания начинают декодироваться и исполняться.
Цитата Сообщение от shivtyokov
Ух... В общем, а что если к проекту C++ Builder`у или Visual Studyo каким ни будь образом подключить библиотеки и т.д. от IAR`а?
buylder и студия точно также написанный код превращают в набор инструкций на ассемблере для x86 (с совсем другими командами), которые потом преобразуются в совсем другой набор циферок которые потом декодируются и исполняются в центральном процессоре ПК.
если, как ты хочешь, скрестить ужа с ежом, что потом с полученным набором байт делать? кто именно его будет исполнять?

Цитата Сообщение от shivtyokov
Или иное развитие событий... Пишем одну программу в IAR`е, заливаем ее на сам микроконтроллер STM8S105C6, потом пишем программку на C++ Builder`е и через нее отправляет какие-то команды к программе в памяти микроконтроллера, тем самым и организовав решение задачи... Или это невозможно? В общем как я понял не один из мною предложенных вариантов не получиться. :(
так и надо делать, есть программа в ПК которая обрабатывает нажатие мышкой на кнопочки и посылает определённые команды в МК.
например: байт 0х01 - зажечь светодиод, а байт 0х00 - потушить.
а другая программа в МК принимает эту команду и
PD_DDR_bit.DDR0 = 1;
while(1){
while(RxBufferIsEmpty());
cmd = ReceiveByte();
if (cmd==0x01) PD_ODR_bit.ODR0 = 1;
if (cmd==0x00) PD_ODR_bit.ODR0 = 0;
}

одна проблема, на discovery, МК никак не связан с компьютером.
тот USB что есть он идёт в другой МК на котором сделан отладчик, который получая специальные команды по USB может через специальный интерфейс залезть в потроха STM8S105C6, и прочитать/записать его память.
связь через этот интерфейс организовать в принципе можно, выше я ссылку приводил, но так делать не очень красиво
Вот попытался откомпилировать присланный вами код и сразу же нахватался ошибок...
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "iostm8.h"
 
int main(void)
{
PD_DDR_bit.DDR0 = 1;
while(1)
{
while(RxBufferIsEmpty());  //Ошибка тут
{
cmd = ReceiveByte();  //И тут
if (cmd==0x01) PD_ODR_bit.ODR0 = 1;
if (cmd==0x00) PD_ODR_bit.ODR0 = 0;
}
}
}
В общем код не выполняется показывает какие-то ошибки... Что может быть не так? И как должна выгладить программа на C++Builder`е что бы она посылала байты программе в микроконтроллере, то есть можно исходник посмотреть?
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
28.01.2013, 14:55
Цитата Сообщение от shivtyokov
В общем код не выполняется показывает какие-то ошибки... Что может быть не так?
Иногда код пишут для того, что бы более наглядно показать принцип работы алгоритма, без оглядки на то что он не полный, например без инициализации периферии и подключения библиотек UART`а, и иногда с синтаксическими ошибками, например с лишней скобкой в while.

Если вам нужен готовые куски кода, не поленитесь открыть апликуху указанную выше. Ну и почитать референс мануал RM0016 по работе с UARTом тоже полезно.

Цитата Сообщение от shivtyokov
И как должна выгладить программа на C++Builder`е что бы она посылала байты программе в микроконтроллере, то есть можно исходник посмотреть?
В любой книге по билдеру есть глава посвященная элементу работы с последовательным портом, почему бы там не почитать?
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
28.01.2013, 15:13
Цитата Сообщение от яверт
Иногда код пишут для того, что бы более наглядно показать принцип работы алгоритма, без оглядки на то что он не полный, например без инициализации периферии и подключения библиотек UART`а, и иногда с синтаксическими ошибками, например с лишней скобкой в while.
Цитата Сообщение от яверт
Иногда код пишут для того, что бы более наглядно показать принцип работы алгоритма, без оглядки на то что он не полный, например без инициализации периферии и подключения библиотек UART`а, и иногда с синтаксическими ошибками, например с лишней скобкой в while.
да, компилятор ругается на отсутсвие определений функций RxBufferEmpty() которая должна проверять наличие новых данных в буфере уарта, и ReceiveByte() которая из буфера очередной байт достаёт.
а вот по поводу лишних скобок - всё там правильно.
0
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
28.01.2013, 15:17
Цитата Сообщение от _pv
а вот по поводу лишних скобок - всё там правильно.
Да, сорри, что то протупил ;)
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
28.01.2013, 16:19
И как должна выгладить программа на C++Builder`е что бы она посылала байты программе в микроконтроллере, то есть можно исходник посмотреть?
еще раз спрошу: а каким именно образом соединен stm8 с копьютером?
ответ "через усб" неправильный, чтобы в этом убедиться можно для начала посмотреть в даташит на отсутствие усб у stm8, а потом еще посмотреть на электричекую схему самого дискавери.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2013, 16:19
Помогаю со студенческими работами здесь

stm8s-discovery + stm8s207cb(c8)
Всем привет. Благополучно препарировал discovery, с пересадкой мозга. Цена вопроса 400 рублей все вместе. Теперь вопрос, какой размер...

Проблемы с I2C - STM8S Discovery
Не могу понять, как запустить I2C на STM8S - Dyscovery. I2C поднимаю впринципе впервые. Компилятор IAR. Конфигурирую I2C модуль,...

Подключение к STM8S-Discovery и IAR
Уже несколько недель пытаюсь разобраться с данным микроконтроллером, но пока что всё безуспешно. Может кто подсказать, как подключить к...

st-link встроенный в stm8s discovery
вопрос в том шьет ли этот прогер только с серию или льки 8битные тоже шьет?слухи не интересуют,интересует проверенная инфа

Большое потребление STM8S-discovery.
Здравствуй, сообщество. Пытался сейчас замерить потребление платы STM8S-DISCOVERY в Halt режиме и обнаружил какие-то странности. Платка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru