Sunday, December 7, 2014

BRTOS with Nucleo F401RE

I creaded a small demo for testing the BRTOS (Brazilian Real-Time Operating System) in my Nucleo board with Coocox COIDE and ARM GCC.

BRTOS is a  lightweight preemptive real time operating system designed for low end microcontrollers.

More info about BRTOS:

https://code.google.com/p/brtos/

https://brtosblog.wordpress.com/

In this demo, clock is configured as:

External 8MHz from STLINK V2.

  • Main clock: 84MHz
  • AHB clock: 84MHz
  • APB1 clock: 42MHz
  • APB2 clcok: 84MHz
  • Timers clock: 84MHz
  • SDIO clock: 48MHz


Check more info about clock config for NucleoF401 in this post.
Flash Prefetch enabled and 2 wait states (minimum for 84MHz and 3.3V).

This demo uses two tasks. One of them flashes the LED and prints a string with a counter in serial every second.
The second task is used to handle the user button switch press event. When the user press the button a string is printed in serial.
Using a mutex to avoid conflicts with two tasks sharing the serial.
Serial used is USART2 that is connected in STLINK V2-1 and becomes a Virtual Serial Com port when STLINK is connected.

The demo code is hosted at my GitHub account:

https://github.com/miguelmoreto/NucleoF401-COIDE-BRTOS

Wednesday, December 3, 2014

STM32F4 USB HOST AND DEVICE

This post is a result of several hours of hard work, thinking, planning, trial-and-error, debugging, and searching the internet for working code in order to make the USB peripheral of a STM32 act as an USB device (mass storage) and HOST (mass storage too). I believe that (at least these days) you will not find another internet site with all the stuff I'm posting here in one place. Most of the codes you will find spread in other examples and libraries.

So, this post is about of programming a Nucleo-F401RE board to use the STM32F401RE USB peripheral as a DEVICE Mass Storage Class with SDCARD (connected with 4bit SDIO interface) as the media. That is, in DEVICE mode, your Nucleo will become a generic USB storage device when connected to the USB port of your computer.
The code also works as a HOST for Mass Storage Devices. That is, if you connect a USB flash drive, you can access its contents using the FATFS library.
You can also use the FATFS to access the SD card.

Overview of the breakout board with USB connector. Beneath the Nucleo board is the SD card socket.