Hello World tutorial for STM32 Discovery boards using CooCox CoIDE and GCC ARM
As stated in their tagline, CooCox is a set of "Free and Open ARM Cortex MCU Development Tools." CoIDE is an Eclipse based integrated development enviroment supporting the standard GCC ARM tool set: compiler, assembler, linker, and debugger. The STM32 discovery boards include an embedded ST-LINK or ST-LINK/V2 which is supported by CoIDE for flashing and debugging. The real value add by CoIDE is point and click choice of MCU library modules for various peripherals, with hypertext library references and examples. CooCox supports a variety of ARM Cortex MCUs from various manufacturers. ST is just one of the manufacturers.
Here I will show you how to install CoIDE and essential dependencies to develop a simple Hello World program for the STM32 Value line discovery board. The steps are very similar for the other boards (except STM32-F3 is not directly supported at this time). The program will display debug output from printf() through the ST-LINK to the IDE's console window. This is the essential first program to see results from a program running on an embedded board. And it's not just a blinking LED, though we'll do that too.
One time installation and configuration.
1. Download ARM GCC2. Download CoIDE
3. Download STM32 ST-LINK Utility
3. Install ARM GCC
4. Install CoIDE
5. Configure CoIDE to point to ARM GCC
6. Install STM32 ST-LINK Utility
7. Plug in USB cable from PC to ST-LINK on discovery board
Creating your first project.
1. Click Create Project, name it hello2. When prompted Chip or Board, choose Chip
3. Choose ST, and STM32F100RB. Click Finish
4. In the Repository window, click on Semihosting and GPIO. Required dependencies will autoselect
5. Double click on main.c in the Project window, and modify to contain
#include <stdio.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
int main(void)
{
GPIO_InitTypeDef gpio;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_StructInit(&gpio);
gpio.GPIO_Pin = GPIO_Pin_9; // Green LED
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &gpio);
gpio.GPIO_Pin = GPIO_Pin_8; // Blue LED
GPIO_Init(GPIOC, &gpio);
printf("Hello World!\r\n");
while(1)
{
static int count=0;
static int i;
static int led_state=0;
for (i=0; i<1000000; ++i);
GPIO_WriteBit(GPIOC, GPIO_Pin_9, led_state ? Bit_SET : Bit_RESET);
led_state = !led_state;
GPIO_WriteBit(GPIOC, GPIO_Pin_8, led_state ? Bit_SET : Bit_RESET);
printf("%d\r\n", ++count);
}
}
6. Open printf.c from the Project window
7. Add #include <semihosting.h> after the other includes.
8. In the PrintChar method, add the following line before the closing brace
SH_SendChar(c);
9. Right click on hello in tree of Project Window and choose Configuration
10. Navigate to Debugger tab, and verify ST-Link is chosen
11. Click on Semihosting Enable
12. Choose Project + Build, should be successful
13. Choose Debug + Debug, will deploy to board and stop at top of main