ARM Cortex-M práctico. 1 – Introducción a los microcontroladores STM32 de St

¿Qué es esto?

Estoy poniendo por escrito las clases, cacharreos, explicaciones, etc. sobre microcontroladores ARM Cortex-M. Como hay gente que me lo pide, he decidido dejar aquí un borrador de las anotaciones junto con el material adicional.

Los apuntes

Ten en cuenta la licencia con la que se publican estos apuntes.

Descarga “ARM Cortex-M práctico. 1 – Introducción a los microcontroladores STM32 de St

Código fuente

Ejemplos

Bibliotecas y plantillas varias asociadas a los apuntes.

Documentación de referencia de St

Son copias locales con la versión empleada en los apuntes. Acudir a la web de St para comprobar la última versión

Serie STM32F4. Superpotencia

Serie STM32L4. Potente y ultrabajo consumo

  • Nucleo kit for STM32L4xxx

 

Enlaces de interés

De momento los voy soltando como caen

 

 

De dónde vengo

Bueno, aquí ire transladando cosas de mi página antigua en  http://www.disca.upv.es/aperles/

Pongo un “float” y mi programa falla en el Cortex-M4

El viernes pasado hubo gente en el curso que probó a realizar operaciones en coma flotante y vio que el programa dejaba de funcionar.

Visto que algunos estáis pensando en hacer filtros, control vectorial, transformadas de Fourier, …, creemos que debéis saber a qué atenerse y sacar partido a las posibilidades de la unidad de coma flotante o FPU (la culpable del fallo).

El problema del otro día fué que el compilador estaba configurado para generar instrucciones máquina pero la FPU no estaba activa. En la siguiente imagen se muestra la opción de Keil que hay que tocar para cambiar esto.

Si hubiésemos desactivado la opción “Use FPU” no habríamos tenido problemas. En ese caso, las operaciones en coma flotante se harían por software, igual que con los Cortex-M3, PICs, 8051s y similares. Cuidado, que no todos los Cortex-M4 tienen FPU.

Nuestra es la decisión de activar o no la FPU. Para que sea fácil, se sugiere editar el archivo de configuración system_stm32f4xx.c y añadir a la función SystemInit() el siguiente fragmento de código (comprueba antes si ya están presentes estas líneas en este fichero)

  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
  #endif

Así, cualquiera que sea la configuración que se tenga en el compilador, el programa no fallará. Esto deberíamos tenerlo presente siempre que adaptemos programas del M3 o del M4 y añadamos “floats”.

Si la intención es aprovechar la FPU, es muy importante informarse antes sobre sus características para sacarle partido, o lograremos todo lo contrario. Todos los fabricantes de M4F suelen tener  una nota de aplicación al respecto. Si se va a usar el STM32F4xx, se sugiere leer la nota de aplicación sobre el uso de la unidad de coma flotante.

 

STM32F4 Discovery and printf() redirection to debug viewer in Keil MDK-ARM

Objective

The ARM Cortex-M architecture includes a facility for sending/receiving user data through special debug ports. This facility is well suited for typical printf() debug practices, where a typical serial port is utiliced. In theses cases, the idea is to write in my program something like this,

#include <stdio.h>

void main (void) {
   printf("Hello, world!");
}

and use the “Debug (printf) viewer” option avaible in Keil MDK-ARM  (and other environments) to show a terminal where messages are received. See bellow

These are my notes in order to get this mechanism working on the STM32F4 Discovery kit using the Keil environment.

Some vocabulary.

ITM:

SWV: Serial Wire Viewer

 

St-Link/V2 upgrade and drivers

The STM32F4 Discovery includes a built-in St-link/v2 debug interface. According with its manual, the SWV facility is available in this interface and the hardware lines are propagated in the schematic of the Discovery kit.

Steps:

1 – Download drivers and utilities from the support page for St-Link/v2 for Windows Xp and 7

2 – Install drivers (?Uninstall previous driver from the control panel)

3- Upgrade St-Link/v2 interface of the discovery running the ST-LinkUpgrade.exe utility

 Configuring a Keil project

(But not working completly OK)

Assuming you have a working example for the previous debugger version. (Try to) follow these steps:

1 – Open your project and open the “target options” dialog

2 – Select the second “St-link debugger”

 

3 – Select “settings” and set options according to the next images.

 

(Here, be carefull with the speed of the core).

(This a trick for flashing the microcontroller)

 

Redirecting/retargeting printf() in my program

Create a C module that includes the following code and add it to your project

/**
   @file fputc_debug.c
   @brief Trying to redirect printf() to debug port
   @date 2012/06/25
*/

#include <stdio.h>
#include <stm32f4xx.h>

int fputc(int c, FILE *stream)
{
   return(ITM_SendChar(c);
}

And start playing!

To be solved!!!!

The problem now is that the code is not flashed when entering in debug mode. I follow these steps:

1 – Rebuild completly the project (to avoid that the systems assumes that the build has been done)

2 – Flash the microcontroller with the “load” button

3 – Start debugging