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
Nimm den Cosmic, den nutze ich schon seit Jahren. Ist etwas langsam beim compilieren aber ansonsten ok.
Hallo, weiß nicht wie aktuell das noch ist, aber guck mal hier: http://chrimbo.de/index.php/stm8/einrichtung-der-toolchain Gruß Christopher
Bastler schrieb: > Nur die 32k Version ist begrenzt, die 16k Version nicht. und wo finde ich die 16k version? finde die nicht mehr...
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
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?
@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
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 | }
|
>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.
hat jemand ne idee zu meinem Problem beim Interrupt? Hab das in der Hilfe von IAR nochmal nachgelesen, ich mache anscheinend alles richtig,
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(); " ?
Vielleicht den timer 3 interrupt flag von channel xy löschen? Wäre meine Vermutung.
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.
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?
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?
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.