The CircleOS Project

CircleOS is the multi-application operating system used in the different STM32 Primers. This 'Open source' project  was initiated by Raisonance with the objective of providing an API to access both the hardware peripherals and the user interface. CircleOS also manages the MEMS accelerometer, the melody generator, the LCD display, the menu utility and the application launcher.

The source files

All CircleOS sources are available below, or via the project list. It is planned to make them available though a CVS server to facilitate management of evolutions with in the Circle community. The source files are common to both the STM32 Primer and the STM32 Primer2. However, different compile/link options generate different binary files. The online documentation of the API is generated with Doxygen using the code comments from the source files. 


All proposed CircleOS evolutions must guarantee true ascending compatibility to be accepted.  For example, the binary codes of "Maze: and "Breakout" (the very first applications for Primer1 and CircleOS) must run without any need to recompile the applications, on all versions of CircleOS for both Primer1 and Primer2.

However, applications that use the hardware resources of the STM32 directly do not require this same guaranty. For example, the USB port is not managed by CircleOS and applications that use it will need to be adapted from Primer1 to Primer2.  


CircleOS continues to evolve and improve thanks to the goodwill of our many users. Raisonance welcomes all suggestions and improvements that you may propose. From the needs currently expressed within the community, the following are priority projects that could benefit from your contributions:

  • "File system" manager for the SD card
  • Improved audio features (at the moment, the audio chip is used only at its minimal capabilities)
Circle OS 4.62
Update your CircleOS version to 4.62 !

Code size:155 Kb / 24 Kb Author:yrt
Source files included:yes Version:4.62
Use circleOS:no Creation date:2009-09-09 16:51:44
Hardware modification:no Modification date:2014-07-25 13:08:47
Based on the STM32 Primer:no
Downloads:2429 Views:119398
Average ratings:0/5 (0 rates)

Download: (3303 KB)



The STM32-Primer embeds the CircleOS operating system. It provides services that will help you develop your STM32-Primer applications:

  • Application management,
  • LCD graphic functions,
  • Mems functions,
  • LED,
  • Buzzer and Push Button functions,
  • Menu functions,
  • Scheduler task,
  • ...

The small footprint of CircleOS (only 22/128 KB) allows you to keep up to 104/384 KB for the applications. The list of the available applications is stored in a table (FAT) at the top of the memory used by CircleOS. 

Each application is run by CircleOS when selected, has the full availability of the CPU and can use the entire RAM which is not used by CircleOS. It will be scheduled by the CircleOS with full privileges on the device, until it explicitly quits.


Unzip in the directory "[Ride7_INSTALL_DIR]\Lib\ARM"


The CircleOS upgrade files are available for Primer's and Evo Primer's as a download in,,,,, and



The Doxygen CircleOS documentation is available online or as a download in this ZIP file
Moreover, a work document describes the internal conception of CircleOS and the use of the API's    .


 What's new ? 


Version V4.62 (27.06.2014)

  • Fixed some DMA2D issues
  • Compiled with new GCC v4.8.4
  • Fixed FPU options issue (STM3220G and STM324x)

Version V4.61 (04.10.2013)

  • Added object tranformation DMA-2D functions
  • Fixed UTIL_SetTimer function for other platforms than STM32E

(see "DMA2DEMO", "SPACE 2D" and "DMA2D-TR" projects for demo of new DMA-2D functionalites).

Version V4.6 (12.09.2013)

  • Support of new Evo Primer target Board STM32F429ZI
  • Added DMA-2D functions to easily take advantage of the Chrom-ART Accelerator embedded into the STM32F429 MCU
  • Changed FAT structure in order to support application with size > 256Kb (applications max number reduced from 64 to 42)

(New FAT files for application debug : )

Version V4.5 (23.07.2013)

  • Changed filesystem to FatFs (faster, long file names support, more functions...)
  • Added new file management functions (FS_Tell, FS_Copy, FS_Cmp, FS_Gets, FS_Size...)
  • Deployed extension connector management on all platforms (CX functions) 
  • Added UTIL_SaveScreenBMP function : capture/save the current screen on the SD card 
  • Added some utilities (UTIL_GetBatStatus, UTIL_SetTimer functions...)
  • Added configurable handler dividers managed by scheduler

(see "Cx_Demo" project and "FileSystem demo" project for demo of these new functionalites).

Version V4.4 (11.2012)

  • Added extension connector management for STM32G platform (CX functions)
  • Fixed extension USART2 bug that would not work properly out of a debug session

Version V4.32 (19.09.2012)

  • Fixed battery status bug when USB disconnected

Version V4.31 (26.03.2012)

  • Support of new Evo Primer target Board STM32G
  • Fixed SDCard write bug due to new ST F2xx library

Version V4.3 (31.10.2011)

  • Support of new Evo Primer target Board STM32F20G/STM32F40G

Version V4.2 (27.05.2011)

  • Support of new Evo Primer target Board STM32L152,
  • Peripheral ST library updated to v3.5.0,
  • CMSIS library updated to V1.30,
  • Changed TIM2 configuration to avoid conflict with USART2,
  • Fixed LCD_SetBackLight functions v4.1 bug for Primer 2,
  • Fixed LED0 v4.1 bug for Primer 1,
  • Added timeout during audio I2C exchanges.

Version V4.11 (27.01.2011)

  • Fix minor bugs,
  • Rebuild with new GCC version (Primer2 FLASH exceed error fixed) .

Version V4.1 (06.09.2010)

  • Management of user defined fonts up to 16x16 pixels,
  • Choice of three different fonts for menu display,
  • Management of compressed images (BMP RLE format),
  • Added transparence mode for font, 
  • Added API function for allow application to manage the full screen,
  • Changed startup to asm for ST library comptability,

(see "FontExample" project and "Full Screen" project for demo of these new functionalites).

 Version V4.03/4.04 (06.2010)

  • Global folder structure reorganization,
  • Application autorun possibility, 
  • Fix 32 bits alignment bug for SDcard sectors,
  • Add Create Directory functionality for SDCard,
  • Fix VBat display bug in Primer1 test. 

Version V3.82 (19.05.2010)

  •  Touchscreen upgraded (precision, calibration procedure)

Thanks to the ntrf.zns !

Version V3.8 (08.09.2009)

  •  ST library updated to v3.1.0,
  • CMSIS updated to V1.20,
  • SDcard file update,
  • New settings to disable the Buzzer,
  • Touchscreen upgraded (precision, use as only input, a new point added for calibration), 
  • Diagonal joystick implemented,
  • Audio I2C interruption moved,
  • Reorganization of the project structure,
  • shutdown.c was renamed to power.c,
  • Fix LCD initialization bug on Primer 1

 Version V3.7 (02.04.2009)

  • Full audio files support with 8, 16, 22 or 44 KHz, 8 or 16 bits, mono or stereo samples (with DMA tranfer),
  • Added FS_SetPathFilter() (path filter function when navigate into SDCard with the explorer),
  • Init SDIO IT in FS_Mount() SDCard function,
  • Add possibility of manage a popup menu into an application,
  • Fixed several minor bugs

Version V3.6 (05.03.2009)

  • Added SDCard command menu to navigate and download files from a PC explorer (mass storage mode),
  • Added DRAW_Putc and DRAW_Puts functions that implement "C" putc and puts functions,
  • Added functions to change the current font and ascii table extended up to character 255 ,
  • Added UTIL_GetAppAddress function, in order to get the address of an application.

Thanks to the contributor (Simon Markham)  for his character set extension !

Note: this version requires to update the program "Circle_Mgr.exe" : get the file at the root directory of the zip, and copy it to the "~/Ride/bin" directory of your PC.

Version V3.5 (05.02.2009)

  • Include File System API,
  • Added SDCard command menu to navigate into the SDCard folders.

Thanks to the contributor (Sjoerd)  for his file system sources !

Version V3.4 (29.01.2009)

  • Added some audio API functions for I2C registers access.

Version V3.3 (15.01.2009)

  • Changed home page and toolbar icons with more fun pictures,
  • Added scroll application list,
  • Changed menu colors, and added touchscreen functionalities.

 Version V3.1 (14.11.2008)

  • Now supports Primer2 (and Primer1 as well),
  • New functions for new features: audio, touchscreen, joystick, etc...
  • Improved power management for Primer2,
  • Add hardware tests for Primer2.

 Version V2.0 (27.07.2008)

  • Compiled with the gcc/codesourcery version 4.2.3 to be compatible with RKit-ARM release of the 24.07.2008
  • Synchronize with the new version of the STM32 library from STMicroelectronics v2.0.1
  • Fix bugs reported in the forum

 Version V1.7 (08.11.2007)

  • Vectorize the handlers in the scheduler (allow to disable/modify one of the handlers)
  • Added functions to Get/Set Scheduler Handlers
  • Add UTIL_GetTemp() function (Get temperature) and UTIL_SetTempMode(mode) to select Celcius(0) or Fahrenheit(1)
  • Add DRAW_Line() function (draw a line using the Bresenham algorithm)
  • Detect the doubleclick (in fact a "double-shock"),  store it in MEMS_Info that has been extended and use it in the menu selection to launch a command. The "double-shock"  can be done smoothly with one finger. 
  • Various fixes in Circle_Api.h

Thanks to the contributors (Dale Wheat, Bob Seabrook, Thomas Scherrer,...) for their sources and their suggestions !

Version V1.6 (17.10.2007)

  • Place the vector table in RAM for per-user customization of IRQ Handlers
  • Added functions to Get/Set IRQ Handlers

Version V1.5 (12.10.2007)

  • Fix various bugs in mems.c and pointer.c (reported by Ron Miller and suggested in CircleOS-1.4rm)
  • Pointer stabilization again (jittery ok)
  • Better filtering of the MEMS information
  • Compiled with GCC version 4.2.1 (overall size is reduced) 

    WARNING: to fix a bug, the contents of the MEMS_INfo structure has been modified (some s16 types have been extended to s32). Therefore, the application projects must be recompiled. 
    All the projects available on the site have been recompiled and updated to comply with the release V1.5.

Version V1.4 (31.08.2007)

  • Shutting down can be done by holding down the button.
  • Pointer stabilization.
  • Corrected time display.
  • MENU_Quit()  restores full context.

Version V1.3a (23.08.2007)

  • Removed the WFI mode in the main loop (causing locks when debugging).

Version V1.3 (22.08.2007)

  • Optimized time display.
  • The MEMS handler is now launched from the TIMER2 interrupt handler instead of the systick interrupt,
  • The TIMER2 interrupt priority is higher than the systick interrupt priority (in order to guarantee a fixed frequency for the MEMS acquisition),
  • The frequency of the MEMS acquisition is increased (to read as many samples as possible),
  • Menu management is smoother and more stable,
  • A hardware reset is now performed when initializing the LCD monitor.
  • The source files are provided with the complete project.

Version V1.2 (01.08.2007)

  • Typing error in Circle_api.h in LCD_SetBackLight define,
  • LCD_ReadRect changed in LCD_RectRead in CircleOS sources Circle_api.h definition.

Version V1.1 (30.07.2007)

  • Quit option in menu Configuration,
  • Bug fixed in LCD_SetScreenOrientation,
  • POINTER_Save and POINTER_Restore accept now an height,
  • DRAW_SetLogo doesn't smash text color anymore,
  • LCD_SetBackLightOff and LCD_SetBackLightOff added.

Version V1.0  (13.07.2007)

  •  First release.





Project comments

license of circleOS                                                                                                            
#1   2011-02-07 08:12:14
New member


Could someone please clarify the license of circleOS source code? GPL, BSD, non commercial use or proprietary?

#2   2011-02-07 12:20:10


We are thinking to apply the LPGL license to CircleOS.
A announce on the CircleOS web site will be done soon.

#3   2011-06-30 11:02:35
New member


Where is it actually saying the license of CircleOS as LGPL? I appreciate it if you could point me to the link. Thank you.

#4   2013-10-05 07:13:35


Please refer to the pages for explanations and texts:


Migration guide from Circle v3.71 to Circle v 4.03                                                                                                            
#1   2011-09-16 09:59:03
orazio privitera
New member



In the past we devoped some applications using the Circle v3.71 on the STM32Primer2 (STM32F103VET6). We'd like to make an evaluation about porting such application on the new STM32 E Open4 platform using the Circle v4.03. Is there any migration guide?

Thanks a lot for your feedback

Best regards


#2   2011-09-19 06:01:43


Take a look at this application note : … ration.pdf


How to add a new application?                                                                                                            
#1   2010-06-28 07:18:26


I want to add my application to the Circle OS3.82, the steps are as follows:
when the process ended, the app didn't work, but when I use Ride7 to debug and load the application,it works well.I wonder why? Thanks!

C:\Program Files\Raisonance\Ride\Bin>Circle_Mgr.exe AF:\STM32\myproj\objdebug\ap
plication.o S
Circle_Mgr: software for managing CircleOS applications.
Copyright Raisonance 2007.

Connecting to RLink... OK
Connecting to target... OK
          Silicon Revision Id: 0x10016414.
          Option bytes: RDP=0xA5, USER=0xFF, WRP=0xFFFFFFFF
Reading FAT table...
App0: Name=HELLO,  Addr=0x08006000, Size=8KB.... OK

Linking file F:\STM32\myproj\objdebug\application.o...
Link of F:\STM32\myproj\objdebug\application.o succeeded...
Hex file generated...
Blank-checking the FLASH area...
Erase page @8008000 OK

Erase page @8008400 OK

Erase page @8008800 OK

#2   2010-06-29 01:07:54


nobody help me?

#3   2010-06-29 05:23:33


How exactly it "didn't work"?

You can't see application in the list? Make sure you included the correct FAT.elf file to your project.

You also didn't posted the full log. Maybe you have some problems with linking process.

#4   2010-06-30 01:21:12


I can see the application, and my application is to show "Hello world!" on the screen, When I use Ride7 to debug, it worked well, but when I use Circle_Mgr.exe to load the application, Although I can see the application, but when it run ,it shows nothing,and the Primer2 didn't response any operation!

#5   2010-06-30 06:20:46


Can i see your Init routine?

By the way Circle_mgr won't overwrite any applications already installed. So if you still having the same apllication table as in here - your application didn't install correctly.


Reading FAT table...
App0: Name=HELLO,  Addr=0x08006000, Size=8KB.... OK
#6   2010-07-01 07:14:35


/************************* (C) COPYRIGHT 2007 RAISONANCE **********************
* File Name          :  Application.c
* Author             :
* Date First Issued  :
* Description        :  Circle_App CircleOS application template.
* Revision           :

/* Includes ------------------------------------------------------------------*/
#include "circle_api.h"

/* Private defines -----------------------------------------------------------*/

#define NEEDEDVERSION "V 1.5" // Put here the minimal CircleOS version needed by your application

/* Private variables ---------------------------------------------------------*/

/* Private functions ---------------------------------------------------------*/
enum MENU_code MsgVersion(void);

/* Public variables ----------------------------------------------------------*/

const char Application_Name[8+1] = {"HELLO"};  // max 8 characters for application name

* Function Name  : Application_Ini
* Description    : Initialization function of Circle_App. This function will
*                  be called only once by CircleOS.
* Input          : None
* Return         : MENU_CONTINUE_COMMAND
enum MENU_code Application_Ini ( void )
   if(strcmp(UTIL_GetVersion(), NEEDEDVERSION) < 0)
      return MsgVersion();
      // TODO: Write your application initialization function here.

* Function Name  : Application_Handler
* Description    : Management of the Circle_App.
* Input          : None
* Return         : MENU_CONTINUE
enum MENU_code Application_Handler ( void )

   // TODO: Write your application handling here.
   //       This routine will get called repeatedly by CircleOS, until we
   //       return MENU_LEAVE
   const char msg[] = "Hello, World!";
   u32 btn_status;
   DRAW_DisplayString( 5, 20, msg, sizeof(msg)); // X, Y, string, length
   btn_status = BUTTON_GetState();

    if(btn_status == BUTTON_PUSHED)
        return MENU_Quit();
    return MENU_CONTINUE;   // Returning MENU_LEAVE will quit to CircleOS

* Function Name  : MsgVersion
* Description    : Display the current CircleOS version and the version needed
*                  exit to main menu after 4 secondes
* Input          : None
* Return         : MENU_CONTINUE
enum MENU_code MsgVersion(void)
   int hh,mm,ss,ss2;
   DRAW_DisplayString(40,34," required",12);
   ss = ss + 4;                  // 4 secondes
   ss = ss%60;
      }while (ss2 != ss);           // do while < 4 secondes
   return MENU_REFRESH;

#7   2010-07-01 10:27:53


Your application works fine on my PC: correctly installs and cotrrectly functions. Looks like it's problem with your circle_mgr.exe. Try updating the software.

#8   2010-07-02 05:35:14


Please Tell me your CircleOS & Ride version please

#9   2010-07-03 13:58:07



Primer 2 PCB Version: 1.1
CircleOS: 3.8 (+ Touchscreen / LCD-on-FSMC / FS modified).


" Code Size limit exceeded " on Version V3.82                                                                                                            
#1   2010-06-21 02:28:14


I have a Primer 2, when I debug the Circle OS Version V3.82, it popup a dialog said "Code Size limit exceeded !", What can i do?

#2   2010-06-21 05:17:30


Buy the licence key or RLink-Pro. Primer2 is limited to 32Kb for debugging by default. See more here

#3   2010-06-28 03:21:04




build fail                                                                                                            
#1   2010-05-15 17:26:01


I can't get the CircleOS 3.8 (nor 3.7) to build. The  build  fail  on the very first c file compile

----------------Build Started: 'Circle' in configuration 'Standard'--------------------------
Building C:\Program Files\Raisonance\Ride\lib\ARM\circle\OS\circle_api.c
Build failed

Without much details on the message hard to find  what's wrongs.

I basicly unziped the package to "[Ride7_INSTALL_DIR]\Lib\ARM", open the projects with ride and tried to build
i've tried both Circle.rprj or Primer2_Circle.rprj  project  same sad

May it be that i did install the latest ride7 (v  + arm rkit ( directly from the  web not using  the old cd that was coming with the pimer2 ?
Am certainly missing something obvious but what ? any help welcome

#2   2010-05-15 21:21:12


You should try unzipping CircleOS it somwhere else. You could introduce a fonflicd between existing CircleOS library files and new compiled ones. In your case it looks like GCC skips the file as already buit one. After you have succesfully built the CircleOS you can copy the .elf files to $(RIDE7)/lib/arm/circleos directory

#3   2010-05-15 22:30:12


thanks for the sugestion but unziping circle elsewhere didn't help sad
My ride install is definively wrong even an new project is not building ...


Timing analysis bug??                                                                                                            
#1   2010-05-01 15:55:56


void SysTickHandler( void ) __attribute__ ((interrupt ("IRQ")));

void SysTickHandler( void )
    s32 i;
#ifdef TIMING_ANALYSIS     // to debug with a scope
    // Systic flag.
    GPIO_WriteBit( GPIOA, GPIO_Pin_6, Bit_RESET );

#ifdef PRIMER2
    GPIO_WriteBit( GPIOA, GPIO_Pin_3, Bit_RESET );    //

I think second GPIO write must be inside TIMING_ANALYSIS block.

#2   2010-05-03 10:04:42


Of course the right code should be :

void SysTickHandler( void )
    s32 i;
#ifdef TIMING_ANALYSIS     // to debug with a scope
    // Systic flag.
#ifdef PRIMER1
    GPIO_WriteBit( GPIOA, GPIO_Pin_6, Bit_RESET );
    GPIO_WriteBit( GPIOA, GPIO_Pin_3, Bit_RESET );    //


STM32 eval                                                                                                            
#1   2010-03-29 09:11:44
New member


can i port the circle OS to the STM32 evalboard E ???

#2   2010-03-30 07:31:59
New member



#3   2010-03-30 09:16:04


Every thing is possible wink, you just need to re-write all drivers, verify that you have the license to do so


#4   2010-03-30 14:06:16
New member


so what do you mean by writing the driver? and i have a licence


#1   2010-02-24 09:45:18
New member


We got the schematics and made necessary changes, Now it is working.
Thanks alot.


Free RTO                                                                                                            
#1   2009-10-13 16:05:31
New member


We are trying to port Free RTOS on PRIMER2.

The Demo Program For Primer 2 is not working,
Is there any H/W difference between Primer1 and Primer2 (Whether LCD is connected to the same Port.....?)
Please help me?

#2   2009-10-29 20:18:39


Primer 1 is on port C
Primer 2 is on port E

#3   2009-11-02 07:39:45


Schematic is available in the Resource section.


To add comments, please register you.