Минимальный Hello World для STM8S-Discovery для компиляторов от Raisonance и Cosmic
«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);
}
}
