Upload
neofireraziel
View
528
Download
0
Embed Size (px)
Citation preview
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
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
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:
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).
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.
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).
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:
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).
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