<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=STM8_SDCC</id>
	<title>STM8 SDCC - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=STM8_SDCC"/>
	<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=STM8_SDCC&amp;action=history"/>
	<updated>2026-06-08T15:53:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://w.electrodragon.com/w/index.php?title=STM8_SDCC&amp;diff=27493&amp;oldid=prev</id>
		<title>Chao at 04:01, 6 July 2020</title>
		<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=STM8_SDCC&amp;diff=27493&amp;oldid=prev"/>
		<updated>2020-07-06T04:01:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== STM8 SDCC commands ==&lt;br /&gt;
* [[http://www.colecovision.eu/stm8/|Official SDCC guide]], commands&lt;br /&gt;
 sdcc -mstm8 --std-c99 led.c&lt;br /&gt;
Important compiler options for STM8 developers include:&lt;br /&gt;
* -c to compile into object files to be linked later&lt;br /&gt;
* --std-c99 for compilation in C99 mode (some C99 features, e.g. variable-length arrays are not yet supported in sdcc though)&lt;br /&gt;
* --opt-code-size for optimization for code size&lt;br /&gt;
* --max-allocs-per-node to select the optimization level. the default value is 3000. Higher values result in more optimized code, longer compiler runtime, and higher memory usage during compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Guide in Linux SDCC ==&lt;br /&gt;
&lt;br /&gt;
==== Install ====&lt;br /&gt;
* Install ubuntu on virtualbox, Install sdcc: apt-get install sdcc&lt;br /&gt;
* update sdcc for stm8, manually remove and install sdcc&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get remove sdcc sdcc-libraries&lt;br /&gt;
 sudo apt-get install sdcc&lt;br /&gt;
* Install stm8flash&lt;br /&gt;
 git clone https://github.com/vdudouyt/stm8flash.git&lt;br /&gt;
 cd stm8flash&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
==== Demo code example ====&lt;br /&gt;
* git clone stm8 blink example:&lt;br /&gt;
 git clone https://github.com/vdudouyt/sdcc-examples-stm8.git&lt;br /&gt;
 cd sdcc-examples-stm8&lt;br /&gt;
* edit code for stm8s103f3:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define PB_ODR *(unsigned char*)0x5005&lt;br /&gt;
#define PB_IDR *(unsigned char*)0x5006&lt;br /&gt;
#define PB_DDR *(unsigned char*)0x5007&lt;br /&gt;
#define PB_CR1 *(unsigned char*)0x5008&lt;br /&gt;
#define PB_CR2 *(unsigned char*)0x5009&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int d;&lt;br /&gt;
    // Configure pins&lt;br /&gt;
    PB_DDR = 0x20;&lt;br /&gt;
    PB_CR1 = 0x20;&lt;br /&gt;
    // Loop&lt;br /&gt;
    do {&lt;br /&gt;
        PB_ODR ^= 0x20;&lt;br /&gt;
        for(d = 0; d &amp;lt; 15000; d++) { }&lt;br /&gt;
    } while(1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Or use&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt; &lt;br /&gt;
#define PB_ODR *(unsigned char*)0x5005&lt;br /&gt;
&lt;br /&gt;
// Port B data direction register, for setting pins as INPUT or OUTPUT &lt;br /&gt;
#define PB_DDR *(unsigned char*)0x5007&lt;br /&gt;
&lt;br /&gt;
// Port B control register 1, &lt;br /&gt;
#define PB_CR1 *(unsigned char*)0x5008&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int d;&lt;br /&gt;
    // Configure pins&lt;br /&gt;
    PB_DDR = 0x20; // 0x20(00100000) pin 5 set to 1 -&amp;gt; setting it as OUTPUT &lt;br /&gt;
    PB_CR1 = 0x20; // 0x20(00100000) pin 5 set to 1 -&amp;gt; setting it as PUSH-PULL Mode (only when configured as output)&lt;br /&gt;
    // Loop&lt;br /&gt;
    do {&lt;br /&gt;
        PB_ODR ^= 0x20; // 0x20(00100000) pin 5 XOR/toggle between HIGH and LOW&lt;br /&gt;
        for(d = 0; d &amp;lt; 29000; d++) {&lt;br /&gt;
        }&lt;br /&gt;
    } while(1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* change the makefile:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
SDCC=sdcc&lt;br /&gt;
SDLD=sdld&lt;br /&gt;
OBJECTS=blinky.ihx&lt;br /&gt;
&lt;br /&gt;
.PHONY: all clean flash&lt;br /&gt;
&lt;br /&gt;
all: $(OBJECTS)&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
        rm -f $(OBJECTS)&lt;br /&gt;
&lt;br /&gt;
flash: $(OBJECTS)&lt;br /&gt;
        stm8flash -cstlinkv2 -pstm8s103f3 -w $(OBJECTS)&lt;br /&gt;
&lt;br /&gt;
%.ihx: %.c&lt;br /&gt;
        $(SDCC) -lstm8 -mstm8 --out-fmt-ihx $(CFLAGS) $(LDFLAGS) $&amp;lt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* run make again and run commands to convert c file to ihx and write flash: &lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
==== Flash ====&lt;br /&gt;
 stm8flash -c stlinkv2 -p stm8s103 -w blinky.ihx&lt;br /&gt;
* or convert first by &lt;br /&gt;
 sdcc -lstm8 -mstm8 --out-fmt-ihx blinky.c&lt;br /&gt;
* read flash&lt;br /&gt;
 stm8flash -c stlinkv2 -p stm8s003?3  -r aa.hex&lt;br /&gt;
* ./stm8flash -c stlink -p stm8s103k3 -w led.ihx&lt;br /&gt;
==== Alternative official demo code ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Source code under CC0 1.0&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define CLK_DIVR	(*(volatile uint8_t *)0x50c6)&lt;br /&gt;
#define CLK_PCKENR1	(*(volatile uint8_t *)0x50c7)&lt;br /&gt;
&lt;br /&gt;
#define TIM1_CR1	(*(volatile uint8_t *)0x5250)&lt;br /&gt;
#define TIM1_CNTRH	(*(volatile uint8_t *)0x525e)&lt;br /&gt;
#define TIM1_CNTRL	(*(volatile uint8_t *)0x525f)&lt;br /&gt;
#define TIM1_PSCRH	(*(volatile uint8_t *)0x5260)&lt;br /&gt;
#define TIM1_PSCRL	(*(volatile uint8_t *)0x5261)&lt;br /&gt;
&lt;br /&gt;
#define PB_ODR	(*(volatile uint8_t *)0x5005)&lt;br /&gt;
#define PB_DDR	(*(volatile uint8_t *)0x5007)&lt;br /&gt;
#define PB_CR1	(*(volatile uint8_t *)0x5008)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned int clock(void)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char h = TIM1_CNTRH;&lt;br /&gt;
	unsigned char l = TIM1_CNTRL;&lt;br /&gt;
	return((unsigned int)(h) &amp;lt;&amp;lt; 8 | l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
	CLK_DIVR = 0x00; // Set the frequency to 16 MHz&lt;br /&gt;
&lt;br /&gt;
	// Configure timer&lt;br /&gt;
	// 1000 ticks per second&lt;br /&gt;
	TIM1_PSCRH = 0x3e;&lt;br /&gt;
	TIM1_PSCRL = 0x80;&lt;br /&gt;
	// Enable timer&lt;br /&gt;
	TIM1_CR1 = 0x01;&lt;br /&gt;
&lt;br /&gt;
	PB_DDR = 0x20;&lt;br /&gt;
	PB_CR1 = 0x20;&lt;br /&gt;
&lt;br /&gt;
	for(;;)&lt;br /&gt;
		PB_ODR = (clock() % 1000 &amp;lt; 500) &amp;lt;&amp;lt; 5;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Error fix: Unlock ====&lt;br /&gt;
* The issue written in pdf datasheet pg 45.&lt;br /&gt;
* sudo stm8flash -c stlinkv2 -p &amp;quot;stm8s103f3&amp;quot; -w blinky.ihx&lt;br /&gt;
 Determine FLASH area&lt;br /&gt;
 Writing Intel hex file 182 bytes at 0x8000... Tries exceeded&lt;br /&gt;
* Run command &lt;br /&gt;
 echo &amp;quot;00 00 ff 00 ff 00 ff 00 ff 00 ff&amp;quot; | xxd -r -p &amp;gt; factory_defaults.bin&lt;br /&gt;
 stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w factory_defaults.bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: STM8 ]]&lt;br /&gt;
&lt;br /&gt;
[[category: SDCC ]]&lt;/div&gt;</summary>
		<author><name>Chao</name></author>
	</entry>
</feed>