9
 Mipixel el blog de F.J. Sánchez  Tutorial JALv2 Empe zar con el STM32 Ac erca de Inicio »  2010 »  Noviembre  » Empezar con el STM32 IV: usando el módulo GPIO Empezar con el STM32 IV: usando el módulo GPIO Enviado por F. J. Sánchez el Sáb, 20/11/2010 - 19:16. ARM CooCox Cortex-M3 STM32 Lo primero que a cualquiera se le ocurriría hacer con una placa de desar rollo es hacer parp adear un led, y eso es lo que yo voy a explicar aquí. Como entorno de desarrollo usaré  CooCox CoIDE  e n su versión 1.1.0. Lo bueno de este entorno es que ya trae el compilador GCC, las librerías de STMicroelectronics y los ficheros de linkado e inicialización del microcontrolador, por lo que podemos pasar a escribir nuestro softwar e directamente. Como placa de desarrollo usaré la  ET-STM32F103 que ya comenté en otro post. Tras lanzar el IDE de CooCox nos aparecerá una ventana en la que podremos seleccionar el fabricante de nuestro microcontrolador, en nuestro caso ST. Tras eso seleccionaremos el modelo que use nuestra placa de desarrollo, en mi caso es el STM32F103RB. Buscar en este sit io: Buscar Sobre mí... Mi nombre es Francisco Javier Sánchez, estudio telecomunicaciones  y en este blog cuento todo lo que me parece interesante sobre tecnología y sociedad. Nube de etiquetas más etiquetas

STM32-04

Embed Size (px)

Citation preview

Page 1: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 1/9

 

Mipixelel blog de F.J. Sánchez Tutorial JALv2 Empezar con el STM32 Acerca de

Inicio » 2010 » Noviembre » Empezar con el STM32 IV: usando el

módulo GPIOEmpezar con el STM32 IV: usando elmódulo GPIO

Enviado por F. J. Sánchez el Sáb, 20/11/2010 - 19:16.

ARM CooCox Cortex-M3 STM32

Lo primero que a cualquiera se le ocurriría hacer con una placa de

desarrollo es hacer parpadear un led, y eso es lo que yo voy a

explicar aquí. Como entorno de desarrollo usaré CooCox CoIDE en

su versión 1.1.0. Lo bueno de este entorno es que ya trae el

compilador GCC, las librerías de STMicroelectronics y los ficheros

de linkado e inicialización del microcontrolador, por lo que

podemos pasar a escribir nuestro software directamente. Como

placa de desarrollo usaré la ET-STM32F103 que ya comenté en otro

post.

Tras lanzar el IDE de CooCox nos aparecerá una ventana en la que

podremos seleccionar el fabricante de nuestro microcontrolador, en

nuestro caso ST. Tras eso seleccionaremos el modelo que use

nuestra placa de desarrollo, en mi caso es el STM32F103RB.

Buscar en este sitio:

Buscar

Sobre mí...

Mi nombre es Francisco Javier

Sánchez, estudio

telecomunicaciones y en este

blog cuento todo lo que me parece

interesante sobre tecnología y sociedad.

Nube de etiquetas

más etiquetas

Page 2: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 2/9

 

STMicroelectronics dispone de una librería que nos ayuda a usar y

configurar los periféricos de sus microcontroladores. Esta librería

se ha incluido en el repositorio de CooCox en forma de módulos

independientes, de manera que podemos ver todos los módulos,

incluir los que vayamos a usar, ver ayuda sobre los mismos,

ejemplos, etc. Para nuestro primer ejemplo solo usaremos el

módulo GPIO, así que procedemos a marcarlo. En ese momento

veremos que otros módulos se marcan automáticamente, ya que

son dependencias. También nos preguntará si queremos crear un

proyecto nuevo a lo que le decimos que si.

Últimos comentariosHola, muuy interesante la

hace 1 día 22 horas

Hola a todos, al igual que3 a

hace 1 semana 2 días

ME DA ESE ERROR EN EL WIDGET

hace 1 semana 4 días

me re ayudo esto para

hace 4 semanas 2 días

hola ese telefono sera todo

hace 4 semanas 4 días

ha y soy de la rep.

hace 4 semanas 4 días

ha y soy de la rep.

hace 4 semanas 4 días

hola espero me puedan ayudar

hace 4 semanas 4 días

Hola, solo una curiosidad ...

hace 5 semanas 1 día

Yo tambien tengo un G1 Y POR

hace 9 semanas 5 días

Page 3: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 3/9

 

Bastará con escoger un nombre para nuestro proyecto, que en mi

caso será "ledBlink " y un directorio donde se almacenará. El

directorio por defecto en Windows 7 me ha dado problemas, así 

que he optado por usar un directorio en el que la ruta no contenga

caractéres extraños.

Una vez hecho esto nos aparecerá la ventana del IDE con un

montón de ficheros en la parte inferior izquierda. Ahí deberemos de

localizar uno llamado main.c y hacer doble click para abrirlo. Una

vez abierto lo editaremos de forma que tenga el siguiente código:

Page 4: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 4/9

 

1

2

3

4

5

6

7

8

9

10

11

1213

14

15

16

17

18

19

20

21

22

23

24

#include "stm32f10x_gpio.h"

#include "stm32f10x_rcc.h"

GPIO_InitTypeDef GPIO_InitStructure;

int main(){

int ncount;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENAB

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_Init(GPIOB, &GPIO_InitStructure);

while(1){

GPIO_WriteBit(GPIOB, GPIO_Pin_8,Bit_SET);

for(ncount=0; ncount<500000; ncount++);

GPIO_WriteBit(GPIOB, GPIO_Pin_8,Bit_RESET

for(ncount=0; ncount<500000; ncount++);

}

return 1;

}

Lo primero que hay que saber a la hora de programar uno de estos

microcontroladres es cómo funciona el periférico que queremos

usar, al menos grosso modo. Los periféricos en esta familia de

microcontroladores están conectados bien a un bus llamado

  Advanced High-Performance Bus (AHB) o al Advanced Peripheral 

Bus (APB). El APB se divide en 2, el APB1 de baja velocidad

(36MHz máx.) y el APB2 de alta velocidad (72MHz máx.). Los

periféricos más comunes están conectados a uno de estos buses y

por defecto están desactivados para no consumir energía. Para

activarlos lo que tendremos que hacer es activarles la señal de

reloj usando la función RCC_APB1PeriphClockCmd(),RCC_APB2PeriphClockCmd() o RCC_AHBPeriphClockCmd(); según

al bus al que esté conectado nuestro periférico. En nuestro caso

usaremos el periférico I/O port B que se encuentra conectado al

APB2. La pregunta es, ¿cómo se yo a qué bus está conectado el

periférico que quiero usar? La respuesta la podemos encontrar en

el Reference Manual  de la familia STM32F. Pero claro, son más de

1000 páginas y a veces cuesta... Por suerte CooCox nos lo pone un

poco más fácil, si escribimos el nombre de cualquier función sin

parámetros y luego ponemos el puntero sobre la función, aparecerá

un cuadro de texto en el que se muestran los posibles argumentos

de la función, así como una descripción de lo que hace (cortesía deSTMicroelectronics).

Page 5: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 5/9

 

En la imagen podemos ver cómo en el APB1 hay periféricos como

los timers del 2 al 7, los SPI 2 y 3, las USART del 2 al 5, etc. Ojo,

eso no quiere decir que nuestro microcontrolador tenga todos esos

periféricos, sino que esa función acepta esos argumentos como

parámetros. En mi caso por ejemplo uso un microcontrolador que

se engloba dentro de los Medium density performance line.

Podemos encontrar en el datasheet de esta categoría los

periféricos que si tiene y los que no (columna STM32F103Rx).

Una vez que sabemos que tenemos los puertos A,B y C (y algún pin

del D) podemos proceder a activar el B, ya que es al que hay

conectados algunos leds. Concretamente están conectados a

través de un driver que suministra la corriente necesaria para que

se enciendan. La conexión a los leds está hecha con lógica positiva

tal y como podemos ver en los esquemas de la placa.

Page 6: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 6/9

 

Ahora ya tenemos activado el periférico (linea 9) y toca

configurarlo. La librería de STMicroelectronics proporciona una

estructura para cada tipo de periférico, una función que da valores

por defecto a esa estructura y una función que usa esa estructura

para configurar un periférico. En el caso de los periféricos de I/O el

tipo de dato de la estructura se llama GPIO_InitTypeDef , la función

que da valores por defecto GPIO_StructInit() y la que inicializa el

periférico GPIO_Init(). La nomenclatura es estandar a otros

periféricos, pero eso se verá en otra ocasión.

La estructura GPIO_InitTypeDef tiene 3 campos: GPIO_Pin,

GPIO_Speed  y GPIO_Mode.

GPIO_Pin: hace referencia al pin que queremos inicializar.

Podemos usar los valores GPIO_Pin_[0-15] y GPIO_Pin_All.

También podemos usar el operador | (OR) para inicializardistintos pines, por ejemplo: GPIO_Pin_0 | GPIO_Pin_2 |

GPIO_Pin_4.

GPIO_Speed: definimos la velocidad máxima a la que trabajará

nuestro pin y puede ser GPIO_Speed_2MHz ,

GPIO_Speed_10MHz o GPIO_Speed_50MHz .

GPIO_Mode: una de las cosas que puede sorprender a los que

vengan de microcontroladores de 8 bits de gama baja, es la

cantidad de posibilidades que nos da un simple pin de este

micro. Para las entradas podemos configurar el pin con uno de

estos valores: GPIO_Mode_IN_FLOATING, GPIO_Mode_IPD o

GPIO_Mode_IPU , según si queremos usar entrada flotante, con

pull-down o pull-up. Para las salidas podemos optar por

GPIO_Mode_Out_OD o GPIO_Mode_Out_PP según si queremos

que sea a drenador abierto o push-pull. Hay otros valores que

se usan cuando vamos a usar una función alternativa del pin,

pero de momento voy a omitirlos.

En el código de ejemplo se ha configurado solo el pin 8 a 50MHz y

como salida push-pull. Lo siguiente es llamar a la función

GPIO_Init() para que inicialice el periférico con los datos de la

estructura. Para ello pasamos como primer argumento el puerto en

el que queremos aplicar esta configuración y como segundo lepasamos la estructura por referencia (usando el operador & delante

del nombre de la variable).

Page 7: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 7/9

 

Con esto ya tenemos el puerto y el pin configurados, y podemos

pasar a usar dicho pin. Para ello he creado un bucle infinito en el

que se hace siempre lo mismo, se escribe un 1 lógico en el pin, se

ejecuta un bucle largo para que haya un retraso, se pone un 0

lógico en el pin y se vuelve a a ejecutar un bucle largo para que

haya otro retraso. De aquí solo cabe mencionar que podemos usar

distintas funciones para modificar el valor de los pines de salida.

GPIO_SetBits(GPIOx, GPIO_Pin_x): esta función pone a 1 el

pin o los pines que especifiquemos en el puerto que

especifiquemos.

GPIO_ResetBits(GPIOx, GPIO_Pin_x): igual que la anterior,

pero los pone a 0.

GPIO_Write(GPIOx, PortVal): nos permite asignar un valor de

16 bits al puerto que queramos, así podemos dar valor a los 16

pines con una sola función.

GPIO_WriteBit(GPIOx, GPIO_Pin, BitVal): nos permite dar un

valor (Bit_RESET o Bit_SET ) a un solo pin de un puerto

concreto.

Como vemos, tenemos muchas alternativas para hacer una misma

cosa lo que nos da flexibilidad a la hora de hacer nuestro código. El

resto creo que sobra explicarlo, ya que con lo anterior debería de

quedar todo claro.

Ahora guardamos el fichero pulsando sobre el icono de guardar y

después simplemente hacemos click en el botón "Build " ( ) o F7.

Si todo ha ido bien deberemos de ver en una sección abajo del

todo algo como lo de la imagen.

Tras esto lo siguiente será subir el código a la placa. En mi caso

usaré el programa de STMicroelectronics "Flash Loader 

Demonstrator " y el puerto USART1 (Download) de la placa que es

en el que el bootloader del microcontrolador responde.

Configuramos la aplicación con los datos de nuestro puerto serie,

pulsamos el botón BOOT0 (led rojo encendido) para que al resetear

la placa entre en modo bootloader, pulsamos reset y pulsamos

siguiente en la aplicación Flash Loader Demonstrator. Volvemos a

pulsar siguiente hasta que nos aparezca algo como esto:

Page 8: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 8/9

 

‹ Empezar con el STM32

III: Placas de desarrollo

arriba

Ahí se puede apreciar la ruta a seguir para encontrar el archivo que

tenemos que cargar (...\ledBlink\Debug\bin\ledBlink.bin) y las

opciones que hay que marcar, pulsamos siguiente y si todo ha ido

bien debería de aparecer una barra cargando y que al acabar se

pondrá de color verde. Ahora volvemos a cambiar de posición el

botón BOOT0 (led rojo apagado) y reseteamos la placa. El led PB8

debería de parpadear.

Eso es todo por ahora. Quien quiera puede probar a usar el resto de

leds, a conectar otros elementos a algún pin (recordad, salida a3.3V) o incluso a probar a usar alguna entrada usando la ayuda de

CooCox. La próxima parte será sobre cómo usar el puerto serie y

los pines como entradas.

blog de F. J. Sánchez

Que tal Francisco Javier Enviado por Cesar David Revelo Apraez (no

verificado) el Mié, 22/06/2011 - 23:39.

Que tal Francisco Javier Sanchez, soy estudiante

de ultimo semestre en Ingenieria Electronica, y me

ha parecido muy interesante lo que has subido en

tu blog acerca del STM 32, mira que estoy adelantando un

trabajo de grado y mi idea es disenar un prototipo de un

osciloscopio digital portable basado en una plataforma ARM

CORTEX M3, aunque soy principiante en esto, agradeceria

infinitamente tu ayuda con respecto a la utilizacion de los

diferentes modulos que nos brinda la placa de desarrollo ET-STM32F103 (manejo de perifericos, puerto serial, puerto usb,

conversores, adquisicion de senales, etc).

Page 9: STM32-04

5/12/2018 STM32-04 - slidepdf.com

http://slidepdf.com/reader/full/stm32-04 9/9

 

Path:

espero tu colaboracion en este proyectpo que quiero desarrollar.

responder

Enviar un comentario nuevo

Su nombre: *

Anónimo

Correo electrónico: *

El contenido de este campo se mantiene privado y no se mostrará

públicamente. If you have a Gravatar account associated with the e-mail

address you provide, it will be used to display your avatar.

Página principal:

Comentario: *

Disable rich-text

Más información sobre opciones de formato

Guardar Vista previa