Electronics Lab Philippines

STM32 Tutorial

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
STM32 Tutorial
« on: August 29, 2011, 12:52:47 PM »

About:
introduction to microcontroller-type ARM Cortex-M3 programming using free tools
both on Ubuntu and Windows host platforms.

target Audience:
those who already have programming (C and assembly) experience with other microcontrollers
(e.g. 8-bit PIC & Atmel) but have no idea yet with the GCC tools.

course Outline:
Quote
A. know your hardware
    1. power section & reset pin
    2. clock
    3. boot switch
    4. bootloader
B. get the tools
    1. memory map & build process overview
    2. Codesourcery installation on Ubuntu
    3. Codesourcery installation on Windows
    4. compiler check ("add to PATH")
    5. alternative tools
C. led blinker
    1. our first "main.c"
    2. simple linker script
    3. command-line (console) compile
    4. flash loader in Ubuntu
    5. flash looder in Windows
D. use of Makefiles
    1. Makefile intro
    2. "make" in Ubuntu
    3. "cs-make" in Windows
    4. Makefile part 2 - use of variables
E. get the IDE
    1. install Eclipse IDE for C/C++
    2. create Makefile project
    3. basic eclipse commands/tools
F. use of code library
   1. where to get the header files
    2. startup code in assembly
    3. led blinker v2
        a. linker script part 2 - more sections
        b. rcc peripheral
        c. gpio peripheral
    4. Makefile part 3 - multiple source codes
G. project examples
    1. more GPIOs
        a. led blinker v3 - pure library
        b. push button - getting user input
    2. (todo: more peripherals)
    .....

Q. have something to say?
A. please post your questions/suggestions/corrections/spams on the other thread;D

  for now, sections A to E (& partially on F) pa lang ang materials ko. ...will try to keep it simple as possible :)

join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #1 on: August 29, 2011, 02:16:42 PM »
A. getting familiar with the hardware
target MCU: STM32F103RB ( thanks ate picpic for the pcb ;D )
 but should easily be adapted for other STM32's, like STM32L152RB of STM32L-Discovery kit.

1. don't forget the power supply ;D, typically 3.3V (see datasheet for supply pins connections)
a. regulator:                                           b. supply caps:                         c. reset pin(pulled high w/ push button to GND)


2. clock source - crystal Y1 (typ. 8MHz) and crystal Y2 (typ. 32.768kHz)

Q. bakit walang laman yung Y1 and Y2?
A. upon power-up, STM32 is default to 8MHz internal oscillator; and so, we don't need Y1 for now.
    we can also leave Y2 empty since will not use the RTC section.
   
3. Boot switch
BOOT1 pin - pulled to GND (fixed)                                 BOOT0 pin

set BOOT0 pin high to enter bootloader mode (Boot from System Memory).
set BOOT0 pin low to run your own code (Boot from User Flash).
    (details to follow on Section C)

4. Bootloader
STM32 already has built-in bootloader (factory loaded to a separate ROM location).
Most STM32s use the USART1 interface to download the code to the internal Flash memory.
pins PA9 and PA10:                                            USART1 connector:

So it's easy to load your code using serial port (w/ rs232 converted) or any USB-to-serial adapters (ftdi or prolific)
    (see Application Note AN2606 for details.)

Q. ano pang ibang pwedeng gamiting pang-program ng STM32?
A. If you have, you can also use JTAG debuggers like J-Link and ST-Link. (see datasheet for connections)


join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #2 on: August 29, 2011, 10:20:50 PM »
B. download and install the toolchain (e.g. compiler)

Here's the memory map of an STM32 mcu (from its datasheet)
we don't need to memorize all the address values on the map.
just familiarize yourself with these two start addresses:
FLASH start:      0x08000000
 SRAM start:      0x20000000


build process:

*not detailed process

basically, we need the tools (yellow) to generate the files (red) that we will be using for our projects.

Q. pwede ba na pag nagcompile eh diretsyo na agad sa *.hex?
A. I'm not sure, pwede ata, pero most probably na ang magegenerate na binaries eh hindi compatible sa mcu natin.
     magagamit natin yung objects file (*.o) kung gusto natin magshare ng "functions" pero ayaw nating ibigay ang buong code.
     yung *.elf is magagamit naman for code debugging or pangload nung program gamit ang jtag debugger.


Sourcery CodeBench Lite installation:
get the installers from CodeSourcery's download page
select the EABI version (Embedded Application Binary Interface).
you can also download the "Getting Started Guide (PDF)" for more instructions.

2. for Ubuntu, the executable file is something like : "arm-2011.03-42-arm-none-eabi.bin"
launch the installer (e.g. sudo ./arm-2011.03-42-arm-none-eabi.bin), and you should get this window:

reference: http://fun-tech.se/stm32/CodeSourceryInstall/index.php

3. for Windows, the executable file is something like : "arm-2011.03-42-arm-none-eabi.exe"
launch the installer (e.g. double click the file), and you should get this window:

just follow the instructions

4. Don't forget to add the tools to you "PATH"
to check if the tools are correctly installed,
simply execute "arm-none-eabi-gcc" on the console/terminal
and you should get this message:



5. Other free tools that can be used in this tutorial
a. Android NDK from Google (look also for the eabi)
b. for advanced user, you can build your own toolchain using Crosstool

join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #3 on: August 30, 2011, 09:46:44 AM »
C. LED Blinker



1. Our first "main.c"
we'll going to use our first tool (compiler).
but first, we need to provide our own code. (please review the "build process" above)

the code below is for blinking an LED connected on PB9 pin.
save this file as "main.c.
Code: [Select]
/*******************************
 * project: STM32 LED Blinker
 *    file: main.c
 *******************************/
 
/* memory map */
#define FLASH_BASE      0x08000000
#define SRAM_BASE       0x20000000
#define PERIPH_BASE     0x40000000
#define SRAM_SIZE       20*1024     // 20K RAM

/* RCC peripheral */
#define RCC_BASE        (PERIPH_BASE + 0x21000) // see "Reference Manual"
#define RCC_APB2ENR     (*(volatile unsigned long*)(RCC_BASE + 0x18))

/* GPIOB peripheral */
#define GPIOB_BASE      (PERIPH_BASE + 0x10C00) // see "Reference Manual"
#define GPIOB_CRL       (*(volatile unsigned long*)(GPIOB_BASE + 0x00))
#define GPIOB_CRH       (*(volatile unsigned long*)(GPIOB_BASE + 0x04))
#define GPIOB_BSRR      (*(volatile unsigned long*)(GPIOB_BASE + 0x10))
#define GPIOB_BRR       (*(volatile unsigned long*)(GPIOB_BASE + 0x14))

/* led connected to a gpio pin */
#define LED_PIN      9          // pin 9
#define OUTPUT_MODE (0x10|0x03) // push-pull + 50MHz

/* user functions */
int main(void);
void delay(unsigned long count);

/* vector table */
unsigned int *vector_table[] __attribute__((section(".vector_table"))) =
{
    (unsigned int *)(SRAM_BASE+SRAM_SIZE),   // end of SRAM
    (unsigned int *) main                    // entry point
};

int main()
{
    /* enable clock on GPIOB peripheral */
    RCC_APB2ENR = 0x08;
   
    /* set pin output mode */
    //GPIOB_CRL |= OUTPUT_MODE << ((LED_PIN) << 2); // if pins 0 to 7
    GPIOB_CRH |= OUTPUT_MODE << ((LED_PIN-8) << 2); // if pins 8 to 15

    while(1)
    {
        GPIOB_BSRR = 1<<LED_PIN;  // set pin high
        delay(200000);
        GPIOB_BRR  = 1<<LED_PIN;  // set pin low
        delay(200000);
    }
}

void delay(unsigned long count)
{
    while(count--);
}


open your terminal. change directory where your main.c file is located
and then type this command:
Code: [Select]
arm-none-eabi-gcc -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb -o main.o main.c
expect that the first object file (main.o) will be created after on the same folder where your main.c is located.

Q. marunong ako ng C language, pero wala akong maintindihan dyan sa "main.c"
A. ok lang, kasi ang goal lang natin sa ngayon is makapagcompile ng walang problema.
   at least man lang eh natutunan natin yung pag-access directly ng register given yung address
   i.e. use of (*(volatile unsigned long*)

Q. medyo gets ko yung main.c code, pero saan kinuha yung mga address values and equations?
A. either read the 1000+-page Reference Manual ;D, or just take a peek at the code library :)
    you can play with the "base address" values if you want to modify the code (e.g. LED on other ports).

Q. anong ibig sabihin nung compiler flags na "-c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb"?
A. please read "gcc.pdf" located sa installation folder ng CodeSourcery.
   for now, just take it as it  is.


reference: The mini example
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #4 on: August 30, 2011, 11:39:56 AM »
C. LED Blinker

since we already have the object file (main.o),
we can now proceed with the next tool. (nope, not the assembler. skip muna tayo dyan)
we'll now going to use the Linker tool.

2. Simple Linker Script

Our linker script will instruct the Linker of where to place (on what memory addresses) our created functions.
This is a MUST! Please take your time to study the script.

below is a simple script that we're going to use for our led blinker project.
please save it as "stm32_flash.ld"
Code: [Select]
/*******************************
 * project: STM32 LED Blinker
 *    file: stm32_flash.ld
 *******************************/
 
/* entry point */
ENTRY(main)

/* memory areas */
MEMORY
{
    FLASH (rx)  : ORIGIN = 0x08000000, LENGTH = 128K
    SRAM (xrw)  : ORIGIN = 0x20000000, LENGTH = 20K
}

/* output sections */
SECTIONS
{
    /* program code into FLASH */
    .text :
    {
        *(.vector_table)    /* Vector table */
        *(.text)            /* Program code */
    } >FLASH

    /* data sections goes into SRAM */
    .data :
    {
        *(.data)            /* initialized data */
    } >SRAM
}
The script has two main parts: MEMORY and SECTION
The MEMORY declaration contains the start addresses and sizes
 of both FLASH and SRAM (please review the memory map).
The SECTIONS part will instruct the linker of what will be the contents of FLASH and SRAM.
Our program code will go the .text section located in the FLASH memory location,
while the variables will use the .data section in the SRAM.

Also, there's the ENTRY() key word which tells linker of where the program has to start after reset.

Q. pwede ko bang palitan yung name ng "main()" function ng "impakta()"?
A. yup, pwede. Need mo lang na imodify yung script entry to "ENTRY(impakta)".


reference: Programming STM32-Discovery using GNU tools. Linker script


again, navigate to where the "main.o" file is located.
then execute the linker tool:
Code: [Select]
arm-none-eabi-ld -nostartfiles -Tstm32_flash.ld -o main.elf main.o


the elf (executable & linkable format) file (main.elf) is now created.
(yup, pwede mo na itong i-load sa mcu using jtag)

Q. 'di ko pa rin maintindihan yung script, wala bang automatic na naggegenerate nyan?
A. meron, particularly yung mga comercial tools like Keil MDK-ARM (*.sct instead of *.ld)
   actually, pwede nating gamiting yung free version ng Keil uVision IDE
   and still use the CodeSourcery toolchains just to automatically generate the script.

Q. anong ibig sabihin nung linker flag na "-nostartfiles"?
A. please read "ld.pdf" manual located sa installation folder ng CodeSourcery ;D
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #5 on: August 30, 2011, 01:03:53 PM »
C. LED Blinker

We already have the main.elf, but we need a file with a format
    that is recognizable by a typical serial bootloader application.
By simply using the last tool Object Copy, we can convert an *.elf to *.bin

3. Creating binaries

navigate to where the "main.elf" file is located.
then execute the object copy tool:
Code: [Select]
arm-none-eabi-objcopy -Obinary main.elf main.bin
now we have main.bin that can be loaded to the MCU using the Flash Loader.

Q. pa'no naman kung *.hex instead *.bin file?
A. just reaplace the flag option "-Obinary" to "-Oihex"
   i.e. arm-none-eabi-objcopy -Oihex main.elf main.hex

join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #6 on: August 30, 2011, 02:22:48 PM »
C. LED Blinker

Please prepare your serial port adaptor for using the Flash Loader.
See this diagram below for the hardware setup.


4. Flash Loader in Ubuntu

Download the python script to load firmware using serial bootloader: stm32loader.py by jsnyder
Save the script file on the same folder where the binary file to load is located.

To load the binary (main.bin) file using "/dev/ttyUSB0" serial port, simply execute this command:
Code: [Select]
python stm32loader.py -p /dev/ttyUSB0 -e -w -v main.bin
Then switch BOOT0 to low, and the LED on PB9 should now be blinking. :)

this script loader is expected to work also on Windows if Python 2.x with pySerial is installed.
for example the command is: python stm32loader.py -p COM1 -e -w -v main.bin
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #7 on: August 30, 2011, 04:57:24 PM »
C. LED Blinker

5. Flash Loader in Windows

download and install STM32 and STM8 Flash Loader demonstrator.


other screen shots: connected, binary file

command line version* of the flash loader is also available, example:
Code: [Select]
STMFlashLoader -c --pn 3 -i STM32_Med-density_128K -e --all -d --a 8000000 --fn main.bin --v  *on Windows 7 set "STMFlashLoader.exe" to run as Administrator

stm32loader.py runs also on Windows but needs a modification
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #8 on: August 30, 2011, 07:32:23 PM »
D. Use of Makefiles

1. Makefile intro
A makefile has, literally, a default filename of "Makefile".
It contains the rules that tell the "Make" utility of how to make another file.

for example, let's create a file with the three commands we used before to create binary.
then save this "Makefile" on the same location of main.c and stm32_flash.ld.

Code: [Select]
main.o: main.c
arm-none-eabi-gcc -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb -o main.o main.c

main.elf: main.o
arm-none-eabi-ld -nostartfiles -Tstm32_flash.ld -o main.elf main.o

main.bin: main.elf
arm-none-eabi-objcopy -Obinary main.elf main.bin

Look at the first two line.
It means, to create "main.o", "main.c" must exists; and "main.o" can created by the command "arm-none-eabi-gcc ..."




Let's try it.
Just enter the command "make main.bin" to create the binary.

We'll notice that all the three commands were executed successively.
It's because Make process is recursive. (e.g. the dependencies are check first before creating another file)
Check your folder. main.bin should now be created with just one command. :)

join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #9 on: August 30, 2011, 08:32:17 PM »
D. use of Makefile

for advanced reading on Makefile, paki-GMG na lang.
may mga hints dyan like "use TAB instead of SPACES for identions inside the Makefile".

2. "make" in Ubuntu

Let's modify our makefile to add some comments and three more rules: all, clean & program.
Code: [Select]
################################
# project: STM32 LED Blinker
#    file: Makefile
###############################

all: main.bin

main.o: main.c
arm-none-eabi-gcc -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb -o main.o main.c

main.elf: main.o
arm-none-eabi-ld -nostartfiles -Tstm32_flash.ld -o main.elf main.o

main.bin: main.elf
arm-none-eabi-objcopy -Obinary main.elf main.bin

clean:
rm -rf *.o *.elf *.bin

program:
python stm32loader.py -p /dev/ttyUSB0 -e -w -v main.bin
Place the "all" rule as the first, so that if we execute "make" without arguments, it will default to "all".
"clean" rule will remove the generate the files silently.
"program" rule will call the flash  loader.

See below for the results.


ayun madali na lang mag-program.. :)
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #10 on: August 30, 2011, 09:04:17 PM »
D. use of Makefile

3. "cs-make" in Windows

If you try "make" in Windows, you'll probably end with this error:


Instead of installing a separate "make" utility in Windows,
we'll just going to use the "make" utility by CodeSourcery called "cs-make.exe".
It's already installed along with the other tools (please see the installation folder).

Code: [Select]
######################################
# project: STM32 LED Blinker
#    file: Makefile (cs-make Windows)
######################################

all: main.bin

main.o: main.c
arm-none-eabi-gcc -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb -o main.o main.c

main.elf: main.o
arm-none-eabi-ld -nostartfiles -Tstm32_flash.ld -o main.elf main.o

main.bin: main.elf
arm-none-eabi-objcopy -Obinary main.elf main.bin

clean:
cs-rm -f *.o *.elf *.bin

program:
python stm32loader.py -p COM3 -e -w -v main.bin
* "rm -rf" is also change to "cs-rm -f"

See below for the results.


note: for flash loading in Windows using the "stm32loader.py", we need to edit this python script:
look for this line:
Code: [Select]
            data = map(lambda c: ord(c), file(args[0]).read())then change it to:
Code: [Select]
            data = map(lambda c: ord(c), file(args[0], "rb").read())
ayus, madali na lang din mag-program sa Windows :)
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #11 on: August 30, 2011, 09:38:19 PM »
D. use of Makefile

4. Makefile part 2 - use of Macros

Quote from: MakefileTutorial link=http://www.opussoftware.com/tutorial/TutMakefile.htm
A macro definition line is a makefile line with a macro name, an equals sign “=”, and a macro value. In the makefile, expressions of the form $(name) or ${name} are replaced with value. If the macro name is a single letter, the parentheses or braces are optional (i.e. $X, $(X) and ${X} all mean “the value of macro X”).

Let's try to place the tool names into "variables" namely CC, LD, and CP:
Code: [Select]
################################
# project: STM32 LED Blinker
#    file: Makefile
###############################

CC  = arm-none-eabi-gcc
LD  = arm-none-eabi-ld
CP  = arm-none-eabi-objcopy

all: main.bin

main.o: main.c
$(CC) -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb -o main.o main.c

main.elf: main.o
$(LD) -nostartfiles -Tstm32_flash.ld -o main.elf main.o

main.bin: main.elf
$(CP) -Obinary main.elf main.bin

clean:
rm -rf *.o *.elf *.bin

program:
python stm32loader.py -p /dev/ttyUSB0 -e -w -v main.bin
Result should be the same as the previous makefile.

Also, we can place the flags as well as the linker script filename into macros:
Code: [Select]
################################
# project: STM32 LED Blinker
#    file: Makefile
###############################

CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld
CP = arm-none-eabi-objcopy

LKR_SCRIPT = stm32_flash.ld

CFLAGS  = -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb
LFLAGS  = -nostartfiles -T$(LKR_SCRIPT)
CPFLAGS = -Obinary

all: main.bin

main.o: main.c
$(CC) $(CFLAGS) -o main.o main.c

main.elf: main.o
$(LD) $(LFLAGS) -o main.elf main.o

main.bin: main.elf
$(CP) $(CPFLAGS) main.elf main.bin

clean:
rm -rf *.o *.elf *.bin

program:
python stm32loader.py -p /dev/ttyUSB0 -e -w -v main.bin

ayan, medyo "realistic" na ang Makefile natin. :D
mas malapit na sa mga ginagamit ng mga embedded programmers. :)

join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #12 on: August 31, 2011, 09:57:38 PM »
E. "E" for Eclipse IDE

Please download Eclipse IDE for C/C++ Developers

Since we already have the files (main.c, stm32_flash.ld, Makefile, & stm32loader.py),
we can just import these to create a project on Eclipse.
Select Menu->File->New->Makefile Project with Existing Code


result:


To create the binaries, select Menu->Project->Build

it's the same as Blinker->Right Click->Build Project. They both execute "make all" command. :)
ah, yun pala ang pinagkaiba ng "build" saka ng "compile"

How to call the flash loader:
i. look at the right side of the IDE, click "Make New Target"


ii. set Target name to "program"


iii. double click the created target to run the flash loader (i.e. "make program" command)



Q. pwede naman pala sa Eclipse, eh bakit gumamit pa tayo ng console para magcompile & magload?
A. alam mo na yun. :D

for Windows, if in case you got problem with the "make" utility, use "cs-make" instead:
Menu->Project->Properties->C/C++ Build -> Builder Settings tab -> Build command : cs-make
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline 'yus

  • *****
  • 4255
  • 300
  • Gender: Male
  • hw -> fw -> sw
    • yus' projects
Re: STM32 Tutorial
« Reply #13 on: August 31, 2011, 10:07:32 PM »
Thread is now temporarily open fo discussion/hijacking. ;D ;D
( close ko ulit this weekend para mapost yung remaining topics )

for Sections F and G, please get a copy of  Peripheral Library from ST para ma-discuss na natin yung "main.c" code
e.g. "STM32F10x_StdPeriph_Lib_V3.5.0" para sa family ng STM32F103RB
 or "STM32L1xx_StdPeriph_Lib_V1.0.0" para sa STM32L(-Discovery)
visit the product page nung MCU, and download the zip file
join  - Philippine Electronics and Robotics Enthusiasts Club - www.philrobotics.com

Offline akhen

  • *
  • 1336
  • 49
  • Gender: Female
  • "Learning is good but application is 100x better!"
Re: STM32 Tutorial
« Reply #14 on: August 31, 2011, 11:30:49 PM »
wow monster ka talaga tukyo... +1

Offline Mayor Johnaray

  • **
  • 2274
  • 247
Re: STM32 Tutorial
« Reply #15 on: September 01, 2011, 01:48:16 AM »
^ Ayun oh unang nang impakta! ;D ;D ;D

Offline amadjo01

  • *******
  • 720
  • 14
  • Gender: Male
  • Meow....
Re: STM32 Tutorial
« Reply #16 on: September 01, 2011, 11:12:36 AM »
wow,, STM32... napakaYUSay talaga...

Offline akhen

  • *
  • 1336
  • 49
  • Gender: Female
  • "Learning is good but application is 100x better!"
Re: STM32 Tutorial
« Reply #17 on: September 01, 2011, 11:37:06 AM »
tokayo pala... wrong sfelling... ;D ;D ;D

Offline ed

  • ****
  • 119
  • 6
  • Gender: Male
  • :)
Re: STM32 Tutorial
« Reply #18 on: September 01, 2011, 12:19:42 PM »
nice sir yus.galing mo talaga... +1

magkano ba ang STM32L(-Discovery)? and san nakakabili???

Offline _basura_man()

  • *
  • 1169
  • 63
  • Senior Software Engr. in http://goo.gl/iM8khM
Senior software developer at day, HW and FW hobbyist at night.
Working at http://goo.gl/iM8khM.