Forum: Mikrocontroller und Digitale Elektronik STM8S-Discovery IDE läuft nicht


von tweaker (Gast)


Lesenswert?

Hi,

hab das STM8S-Discovery Board auf dem Tisch liegen und bekomm die 
dazugehörige IDE nicht zum laufen.

Es soll 2 C compiler geben Cosmic und Raisonance.

Wie kann ich die Einbinden? in STVD?

Welche Option gibt es noch als kostenlose IDE?

THX
tweaker

von Bastler (Gast)


Lesenswert?

Nimm den Cosmic, den nutze ich schon seit Jahren.

Ist etwas langsam beim compilieren aber ansonsten ok.

von Alex E. (alex_e)


Lesenswert?

der ist aber für 1 jahr begrenzt oder?

von Alex E. (alex_e)


Lesenswert?

hat noch jemand ne Idee?

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Hallo,

weiß nicht wie aktuell das noch ist, aber guck mal hier:
http://chrimbo.de/index.php/stm8/einrichtung-der-toolchain

Gruß
Christopher

von Bastler (Gast)


Lesenswert?

Nur die 32k Version ist begrenzt, die 16k Version nicht.

von Alex E. (alex_e)


Lesenswert?

Bastler schrieb:
> Nur die 32k Version ist begrenzt, die 16k Version nicht.

und wo finde ich die 16k version? finde die nicht mehr...

von mknoelke (Gast)


Lesenswert?

Moin,

ich meine bei ST gelesen zu haben das in Zukunft nur noch der IAR direkt 
unterstützt wird.
Ich habe mir Cosmic, Raisonance und IAR angeschaut und bin mit dem IAR 
am besten zurecht gekommen.
Alles aus einem Guss ohne Zuhilfenahme von 3rd party Beschreibungen 
problemlos in Betrieb zu nehmen.
(max. code size ??? Mein stm8s003 hat nur 8K)

Den Cosmic in die merkwürdige ST IDE einzubinden fand ich gruselig.
Wenn sich noch nicht mal die Examples ohne Fehlermeldung kompilieren 
lassen und in der sehr dürftigen Doku Schritte und Menues beschrieben 
werden die unauffindbar sind ... Weiß nicht ...

Raisonace hat eine ganz nette IDE wollte aber von dem STlink nichts 
wissen.

Für Lau, ohne Beschränkungen: http://sourceforge.net/projects/sdccstm/
Der STM8 Port ist soweit ich weiß recht neu.
Ich mag den SDCC habe aber nur auf 8051 Derivaten damit gearbeitet und 
kann zum STM8 Port nix sagen.

Stichwort ST Doku:
Tretet ein und lasset alle Hoffnung fahren.
Ganz schlimmer verquerer Kram den ST da raushaut, sofern man es 
geschafft hat das was überhaupt dokumentiert ist in den Tiefen der ST 
Server zu finden.

Die Peripheral Librarys sind eher so grobe Ideen wie Peripherie 
anzusprechen wäre. Nett um mal in den Code zu schauen wie die das 
machen.
Minimaler Nutzen mit maximaler Befehlsanzahl scheint die Devise zu sein.

Gruß
Michael

von Alex E. (alex_e)


Lesenswert?

kann man das ganze auch in vergleich zu nem Atmega setzten?
Sind jetzt auf den ersten blick nur negative Punkte.

Wieso wird der STM8 aber dann so oft eingesetzt?

von mknoelke (Gast)


Lesenswert?

@Alex

Der 003 kostet gerade mal 30Cent. Darum werden die viel eingesetzt.

Pro:
- SEHR viel MCU fürs Geld
- Debugger / Programmer für 5 Euro
- Gute und durchdachte Peripherie

Der Wechsel auf die sehr populären STM32 soll relativ einfach sein.
So sagt man ...

ATmega:

Schwierig direkt zu vergleichen.
Risc statt Cisc und Harvard statt von Neumann.
Die Megas sind wirklich toll, die IDE und das Software Framework ist 
sehr anständig.
Megas sind älter, teurer und sehr gut beschrieben.

Ich persönlich finde die Xmegas Turbo gut, aber die haben zum Teil noch 
hässliche bugs wenn man versucht die nagelneue Peripherie in sehr 
speziellen Kombinationen zu betreiben. Muss man ja aber auch nicht tun.
Der unzuverlässige Debugger nervt da viel mehr.

Microchip Pics liegen irgendwo dazwischen.
Für wirklich jeden absurden Spezialfall gibt es einen ideal passenden 
PIC.
Zumeist ein sehr anständiges Preis Leistungsverhältniss.
Finde ich auch gut, aber man muss ordentlich extra Zeit einplanen um 
diese absurden PIC Bugs zu finden, oder den alles entscheidenden kleinen 
Satz in 1000 Seiten Fließtext der erklärt warum es nicht geht obwohl es 
gehen müsste.

Ein Kriterium ist auch wie leicht man ein MCU Model upgraden kann ohne 
den Code umzuschreiben. mega = gut, xmega = exzellent, PIC = mal so mal 
so,
ST = grusel. (stm8s003: TSSOP & QFN Gehäuse sind nicht 
softwarekompatibel)

Ergo:
Zeige mir die MCU bei der alles stimmt.
Es gibt einfache, schnelle, billige und vielseitige MCUs
Ich habe aber noch keine gefunden die alles zugleich wäre.

Gruß
Michael

von Alex E. (alex_e)


Lesenswert?

vielen Dank, dann mal ein konkretes problem:

bekomme den timer3 interrupt nicht zum laufen am stm8s105c6 
Discovery-Board.
Habe das Beispiel-Projekt für das STM8S-Discovery mit dem 
Touch-blink-Led umgeschrieben.
Aber der geht nach ein paar zyklen immer in exeption...
Woran kann das liegen`? Irgendwie passt was mit dem Interrupt vector 
nicht?!?...
1
/* Includes ------------------------------------------------------------------*/
2
#include "stm8s.h"
3
#include "stm8_tsl_rc_api.h"
4
#include "stm8s_tim3.h"
5
6
/* Private typedef -----------------------------------------------------------*/
7
/* Private define ------------------------------------------------------------*/
8
#define MilliSec       1
9
#define Sec           10
10
/* Private macro -------------------------------------------------------------*/
11
/* Private variables ---------------------------------------------------------*/
12
/* Private function prototypes -----------------------------------------------*/
13
void CLK_Configuration(void);
14
void GPIO_Configuration(void);
15
void ExtraCode_Init(void);
16
void ExtraCode_StateMachine(void);
17
void Delay(void action(void), int NumberofTIMCycles);
18
void Toggle(void);
19
20
#pragma vector = TIM3_IER_CC2IE
21
__interrupt void TIM3_Compare_vector(void)
22
{
23
  GPIO_WriteReverse(GPIOD, GPIO_PIN_0);
24
}
25
#pragma vector = TIM3_SR1_UIF
26
__interrupt void TIM3_Update_vector(void)
27
{
28
  GPIO_WriteReverse(GPIOD, GPIO_PIN_0);
29
}
30
/* Private functions ---------------------------------------------------------*/
31
/* Global variables ----------------------------------------------------------*/
32
u8 BlinkSpeed = 6;
33
int PWMvalue = 999;
34
int NumberOfStart;
35
int CheckFlag = 1;
36
37
/* Public functions ----------------------------------------------------------*/
38
39
/**
40
  ******************************************************************************
41
  * @brief Main function.
42
  * @par Parameters:
43
  * None
44
  * @retval void None
45
  * @par Required preconditions:
46
  * None
47
  ******************************************************************************
48
  */
49
void main(void)
50
{
51
  /* Configures clocks */
52
  CLK_Configuration();
53
54
  /* Configures GPIOs */
55
  GPIO_Configuration();
56
  
57
  /* Initialize Touch Sensing library */
58
  TSL_Init();
59
  
60
  /* Initialize all the Touch Sensing keys */
61
  ExtraCode_Init();
62
63
  /* Start the 100ms timebase Timer */
64
  TSL_Tick_Flags.b.User_Start_100ms = 1;
65
  
66
  /* Initialize Timer3 */
67
  TIM3_DeInit(); 
68
  TIM3_TimeBaseInit(TIM3_PRESCALER_1, 999);
69
  TIM3_OC2Init(TIM3_OCMODE_PWM2, TIM3_OUTPUTSTATE_DISABLE, 999, TIM3_OCPOLARITY_LOW);
70
  TIM3_Cmd(ENABLE);
71
  TIM3_ITConfig(TIM3_IT_CC2,ENABLE);
72
  TIM3_ITConfig(TIM3_IT_UPDATE,ENABLE);
73
  enableInterrupts();
74
  
75
  for (;;)
76
  {
77
78
    /* User code */
79
    ExtraCode_StateMachine();
80
   
81
    /* Main function of the Touch Sensing library */
82
    TSL_Action();
83
84
  }
85
86
}

von MCUA (Gast)


Lesenswert?

>Es soll 2 C compiler geben Cosmic und Raisonance.
Raisonance hat wohl eine modernere IDE.

>Der 003 kostet gerade mal 30Cent.
Ja, wenn man damit hinkommt.
Die CPU ist oft schneller als AVR, aber STM8 haben auch Nachteile.
Ua sind nur wenige IOPins schnell schaltbar und haben höheren I (weshalb 
man das jedesmal extra nachprüfen muss). Auch gibt es da mMn (noch) 
wenige Derivate.

von Alex E. (alex_e)


Lesenswert?

hat jemand ne idee zu meinem Problem beim Interrupt?
Hab das in der Hilfe von IAR nochmal nachgelesen, ich mache anscheinend 
alles richtig,

von mknoelke (Gast)


Lesenswert?

Hab ich auch erst so gemacht.
Hat auch nicht geklappt und da hab ich mich an das ST Konzept gehalten.


stm8s_it.h / .c einbinden

in der .c den richtigen Abschnitt suchen und editieren.
Bei mir z.B. der Timer1 overflow


/**
  * @brief Timer1 Capture/Compare Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
  TIM1_OCx_IRQ_Routine();  // das ist meine Routine in der main()
}


in der main()

void TIM1_OVF_IRQ_Routine(void)
{
//
}

Wo ist Dein " enableInterrupts(); "  ?

von mknoelke (Gast)


Lesenswert?

Die Seite hat mir beim Einstieg geholfen:

http://benryves.com/tutorials/stm8s-discovery/

von bambi (Gast)


Lesenswert?

Vielleicht den timer 3 interrupt flag von channel xy löschen?  Wäre 
meine Vermutung.

von Mehmet K. (mkmk)


Lesenswert?

Meine Interrupt-Routine für Timer 2 ist wie folgt:
1
//=====================================
2
// TIM2   Update/Overflow/Trigger Interrupt routine.
3
//=====================================
4
INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler,19)
5
{
6
  tim2_10us++;
7
  TIM2->SR1 = (uint8_t)(~(uint8_t)TIM2_IT_Update);
8
  timer_status.f10us_task_request = true;
9
}

Du scheinst das Flag nicht zurückzusetzen.

von Alex E. (alex_e)


Lesenswert?

vielen Dank.

Ich habs nun so gelöst mit hilfe der iostm8s105c6.h habe ich die nummern 
der Vectoren ausgelesen.(Die Header lässt sich nicht compileren warum 
auch immer...)
und direkt reingeschrieben. Jetzt springt er in den TimerInterrupt.

richtig die Flags hab ich auch zurücksetzten müssen.
1
/* Includes ------------------------------------------------------------------*/
2
#include "stm8s.h"
3
#include "stm8_tsl_rc_api.h"
4
#include "stm8s_tim3.h"
5
//#include "iostm8s105c6.h"
6
7
/* Private typedef -----------------------------------------------------------*/
8
/* Private define ------------------------------------------------------------*/
9
#define MilliSec       1
10
#define Sec           10
11
/* Private macro -------------------------------------------------------------*/
12
/* Private variables ---------------------------------------------------------*/
13
/* Private function prototypes -----------------------------------------------*/
14
void CLK_Configuration(void);
15
void GPIO_Configuration(void);
16
void ExtraCode_Init(void);
17
void ExtraCode_StateMachine(void);
18
void Delay(void action(void), int NumberofTIMCycles);
19
void Toggle(void);
20
21
#pragma vector = 0x12
22
__interrupt void TIM3_Compare_vector(void);
23
#pragma vector = 0x11
24
__interrupt void TIM3_Update_vector(void);
25
26
/* Private functions ---------------------------------------------------------*/
27
/* Global variables ----------------------------------------------------------*/
28
u8 BlinkSpeed = 6;
29
u16 PWMvalue = 500;
30
u16 nowCounterTim3;
31
int NumberOfStart;
32
int CheckFlag = 1;
33
34
/* Public functions ----------------------------------------------------------*/
35
36
/**
37
  ******************************************************************************
38
  * @brief Main function.
39
  * @par Parameters:
40
  * None
41
  * @retval void None
42
  * @par Required preconditions:
43
  * None
44
  ******************************************************************************
45
  */
46
void main(void)
47
{
48
  /* Configures clocks */
49
  CLK_Configuration();
50
51
  /* Configures GPIOs */
52
  GPIO_Configuration();
53
  
54
  /* Initialize Touch Sensing library */
55
  TSL_Init();
56
  
57
  /* Initialize all the Touch Sensing keys */
58
  ExtraCode_Init();
59
60
  /* Start the 100ms timebase Timer */
61
  TSL_Tick_Flags.b.User_Start_100ms = 1;
62
  
63
  /* Initialize Timer3 */
64
  TIM3_DeInit(); 
65
  TIM3_TimeBaseInit(TIM3_PRESCALER_1, 16535);
66
  TIM3_OC2Init(TIM3_OCMODE_PWM2, TIM3_OUTPUTSTATE_DISABLE, 999, TIM3_OCPOLARITY_LOW);
67
  TIM3_Cmd(ENABLE);
68
  TIM3_ITConfig(TIM3_IT_CC2,ENABLE);
69
  TIM3_ITConfig(TIM3_IT_UPDATE,ENABLE);
70
  enableInterrupts();
71
  
72
  for (;;)
73
  {
74
75
    /* User code */
76
    ExtraCode_StateMachine();
77
   
78
    /* Main function of the Touch Sensing library */
79
    TSL_Action();
80
81
  }
82
83
}
84
85
/* Interrupt functions */
86
__interrupt void TIM3_Compare_vector(void)
87
{
88
  TIM3_ClearITPendingBit(TIM3_IT_CC2);
89
  nowCounterTim3 = TIM3_GetCounter();
90
  GPIO_WriteHigh(GPIOD, GPIO_PIN_0);
91
}
92
__interrupt void TIM3_Update_vector(void)
93
{
94
  TIM3_ClearITPendingBit(TIM3_IT_UPDATE);
95
  nowCounterTim3 = TIM3_GetCounter();
96
  GPIO_WriteLow(GPIOD, GPIO_PIN_0);
97
}

Jetzt kommen aber die Interrupts immer an unterschiedlichen stellen.
Normalerweise sollte ja einer nach Timer überlauf und der andere am 
Vergleichsergebnis kommen?

von Alex E. (alex_e)


Lesenswert?

mal noch ne Frage:

Wenn ich die "iostm8s003f3.h" einfüge bekomme ich beim compilieren immer 
folgende Fehlermeldung
Error[Pe018]: expected a ")" C:\Program Files (x86)\IAR Systems\Embedded 
Workbench 6.5\stm8\inc\iostm8s003f3.h 1164

Woran kann das liegen?

von ./. (Gast)


Lesenswert?

> Woran kann das liegen?

Ein kaputtes Include?

Hat Renesas in der Vectortable vom R8C13 auch schon hingekriegt...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.