Минимальный Hello World для STM8S-Discovery для компиляторов от Raisonance и Cosmic

14.05.2011 11:36 / Артём Волк / 1282 просмотра / ...

«Hello world» в мире микроконтроллеров — это «помигать светодиодом». Простейшая программа позволяет проверить работу toolchain'а, программатора, отладчика и целевой платы.

Для контроллеров STM8 есть два компилятора c ограничением до 32Кб в бесплатной версии: Raisonance и Cosmic. Вместо использования STM8S/A Standard Peripherals Library будет использоваться прямой доступ к регистрам с помощью заголовчных файлов, поставляемых с компиляторами. В качестве отладочной платы использовалась бюджетная STM8S-Discovery.

Для Raisonance:

/*
	STM8S-DISCOVERY minimal blink for Raisonance C compiler		
	LED is connected to high sink pin PD0 (active low)
*/
#include <stm8/stm8s105c_s.h> // register defines
#include <intrins.h> // nop is defined here

typedef unsigned short uint16_t;
#define _BV(bit) (1 << (bit))

#define LED_BIT 0 

void main()
{		
	uint16_t d = 0;	

	PD_DDR |= _BV(LED_BIT); // Set to output
	PD_CR1 |= _BV(LED_BIT); // Push-pull output

	for (;;)
	{	
		// dummy delay loop
		for (d = 0; d < 50000; d++) 
		{
			_nop_();
		}

		// Toggle output bit
		PD_ODR ^= _BV(LED_BIT);
	}
}

Для Cosmic:

/*
	STM8S-DISCOVERY minimal blink for Cosmic C compiler		
	LED is connected to high sink pin PD0 (active low)
*/	
#include <iostm8s105.h> // register defines

typedef unsigned short uint16_t;

#define _BV(bit) (1 << (bit))
#define LED_BIT 0 
#define nop()                 {_asm("nop\n");}  /* No Operation */

void main()
{		
	uint16_t d = 0;	

	PD_DDR |= _BV(LED_BIT); // Set to output
	PD_CR1 |= _BV(LED_BIT); // Push-pull output

	for (;;)
	{	
		// dummy delay loop
		for (d = 0; d < 50000; d++) 
		{
			nop();
		}

		// Toggle output bit
		PD_ODR ^= _BV(LED_BIT);
	}
}