Está en la página 1de 82

Microcontroladores

Objetivo
Desarrollar la capacidad de disear y construir
sistemas electrnicos basados en microcontrolador

Conceptos y caractersticas
de los microcontroladores
1.1 El microcontrolador
1.2 Arquitectura Interna
1.3 Organizacin de Memoria
1.4 Software de Desarrollo

Diferencias entre microprocesador y


Microcontrolador
Microprocesador

Microcontrolador

Fabricantes de Microcontroladores

ARM Cortex-M0

ARM Cortex-M0+ ARM Cortex-M3

ARM Cortex-M4

"8/16-bit"
applications

"8/16-bit"
applications

"32-bit/DSC"
applications

Low cost and


simplicity

Low cost, best


Performance,
energy-efficiency general purpose

"16/32-bit"
applications

Efficient digital
signal control

Qu se necesita para iniciar?

Suites de Desarrollo

https://www.keil.com/download/produ
ct/

Qu se necesita para iniciar?

Tarjeta de desarrollo

32F401CDISCOVERY

Entorno de Desarrollo
Integrado(IDE)

Instalar los Packs del microcontrolador

Si no aparece Keil::STM32F4xx_DFP descargarlo de http://www.keil.com/dd2/pack/

Tarjeta de Desarrollo

Tarjeta de Desarrollo

El microcontrolador

Diagrama de desarrollo

Descripcin General

Tipo de Procesador
Procesadores ARM Cortex -M

32 bits (Registros, bus de datos


y direcciones)

RISC (Computadores con un


conjunto
de
instrucciones
reducido)

Pueden manejar datos de 8 y 16


bits

Soportan
un
nmero
de
operaciones relativa a los datos
de
64
bits
(multiplicacin,
acumulacin)

Arquitectura
Los procesadores Cortex-M3 y Cortex-M4 estn basados en la
arquitectura ARMv7-M

Arquitectura

Micro-arquitectura

Seales de interface

Set de Instrucciones de la Arquitectura (ISA)

El modelo de programacin (lo que ve el software)

La metodologa de depuracin (lo que ve el depurador)

Tiempo de ejecucin de
instrucciones
Pipeline

Grupo de Instrucciones
El conjunto de instrucciones es
llamado Thumb
Los procesadores Cortex-M3 y
Cortex-M4 incorporan Thumb-2
que
permite
la
mezcla
de
instrucciones de 16 y 32 bits

Aritmtico-Lgicas

Fuentes en registro o valores

Destino siempre en registro

Movimiento entre registros

Acceso a memoria

Fuentes en registro o valores

Solo con instrucciones LOAD y


STORE

Control

Salto

ADD{S}<c> {Rd,}Rn,<Operand2>

MOV{s}<c> Rd, <Op2>

LDR R3, [R5, #14]!

B<c> <label>

Modelo de Programacin
Existen dos estados y dos modos
de operacin.

Estados de operacin

Depuracin (Debug)

Thumb

Modos de operacin

Handler

Thread

La forma de programar un microcontrolador es a travs de registros localizados en


ciertos segmentos de la memoria. Cada registro tiene una funcin especial y una
forma de ser configurado. Por ejemplo el registro TRISx del PIC18f4550 configura los
puertos como entrada o salida, en el caso del microcontrolador STM32f401VC esto se
logra con el registro GPIOx_MODER.
Los bits de los registros estn conectados a los circuitos internos del microcontrolador
tales como temporizadores, convertidores A/D, osciladores entre otros. Esto significa
que directamente manejan el funcionamiento de estos circuitos, o sea del
microcontrolador. Imagnese ocho interruptores que manejan el funcionamiento de un
circuito pequeo dentro del microcontrolador. Los registros SFR hacen exactamente lo
mismo.
El estado de los bits de registros se fija
dentro de programa, los registros SFR
dirigen los pequeos circuitos dentro del
microcontrolador, estos circuitos se
conectan
por
los
pines
del
microcontrolador
a
un
dispositivo
perifrico utilizado para lo que usted
quiera.

Registros
El banco de registros
compone de 16 registros

se

13 de propsito general

3 de funciones especiales

Mapa de Memoria
Direccin
0x5000
FFFF
0x4002
67FF
0x4002
63FF
0x4002
3FFF
0x4002
3BFF
0x4002
33FF
0x4002
1FFF
0x4002
13FF
0x4002
0FFF
0x4002
0BFF
0x4002
07FF
0x4002
03FF
0x4001
4BFF

0000 - 0x5003
6400 - 0x4002
6000 - 0x4002
3C00 - 0x4002
3800 - 0x4002
3000 - 0x4002
1C00 - 0x4002
1000 - 0x4002
0C00 - 0x4002
0800 - 0x4002
0400 - 0x4002
0000 - 0x4002
4800 - 0x4001

Perifrico
USB OTG FS
DMA2
DMA1
Flash interface
register
RCC
CRC
GPIOH
GPIOE
GPIOD
GPIOC
GPIOB
GPIOA
TIM11

Direccin
0x4001
47FF
0x4001
43FF
0x4001
3FFF
0x4001
3BFF
0x4001
37FF
0x4001
33FF
0x4001
2FFF
0x4001
23FF
0x4001
17FF
0x4001
13FF
0x4001
03FF
0x4000
73FF
0x4000
5FFF

4400 - 0x4001
4000 - 0x4001
3C00 - 0x4001
3800 - 0x4001
3400 - 0x4001
3000 - 0x4001
2C00 - 0x4001
2000 - 0x4001
1400 - 0x4001
1000 - 0x4001
0000 - 0x4001
7000 - 0x4000
5C00 - 0x4000

Direccin
Perifric
o
TIM10
TIM9
EXTI
SYSCFG
SPI4
SPI1
SDIO
ADC1
USART6
USART1
TIM1
PWR
I2C3

0x4000
5BFF
0x4000
57FF
0x4000
47FF
0x4000
43FF
0x4000
3FFF
0x4000
3BFF
0x4000
37FF
0x4000
33FF
0x4000
2FFF
0x4000
2BFF
0x4000
0FFF
0x4000
0BFF
0x4000
07FF
0x4000
03FF

5800 - 0x4000
5400 - 0x4000
4400 - 0x4000
4000 - 0x4000
3C00 - 0x4000
3800 - 0x4000
3400 - 0x4000
3000 - 0x4000
2C00 - 0x4000
2800 - 0x4000
0C00 - 0x4000
0800 - 0x4000
0400 - 0x4000
0000 - 0x4000

Perifric
o
I2C2
I2C1
USART2
I2S3ext
SPI3 / I2S3
SPI2 / I2S2
I2S2ext
IWDG
WWDG
RTC & BKP
Registers
TIM5
TIM4
TIM3
TIM2

Puertos de Entrada/Salida de
propsito General (GPIO)

Caractersticas Elctricas

Parmetro

PIC18F4550

STM32F401VC

Mxima corriente de sumidero para


cualquier puerto de I/O

25mA

25mA

Mxima corriente de fuente para


cualquier puerto de I/O

25mA

25mA

Mxima corriente de sumidero para


todos los puertos de I/O

200mA

120mA

Mxima corriente de fuente para


todos los puertos de I/O

200mA

120mA

Registros

4 registros de configuracin

GPIOx_MODER

GPIOx_OTYPER

GPIOx_OSPEEDR

GPIOx_BSRR

GPIOx_PUPDR

2 registros de datos

1 registro de set/reset

1 registro de bloqueo

GPIOx_LCKR

2 registros de seleccin de funciones alternas

GPIOx_IDR

GPIOx_AFRH

GPIOx_ODR

GPIOx_AFRL

Nota: Adems de estos registros se deber de utilizar el Registro


RCC_AHB1ENR para habilitar el reloj en cada puerto

Registro de re-inicializacin y control de reloj

(RCC)
Tres tipos de re-inicializacin()

Sistema

Alimentacin

De Reserva

21 Registros

Tres fuentes de reloj

Oscilador HSI

Oscilador HSE

PLL

Registro de habilitacin de reloj de


perifricos (RCC_AHB1ENR)

Address offset: 0x30

Reset value: 0x0000 0000

0: clock disabled
1: clock enabled

Set and cleared by software.

Registros de configuracin de
puertos

Registro de modo (GPIOx_MODER)

MODERy[1:0]: Port x configuration bits (y = 0..15)

Address offset: 0x00

Valor despus de reset

These bits are written by software to configure the I/O direction


mode.

0x0C00 0000 for port A


0x0000 0280 for port B
0x0000 0000 for other ports

00: Input (reset state)


01: General purpose output mode
10: Alternate function mode
11: Analog mode

Registro de tipo de salida


(GPIOx_OTYPER)

Address offset: 0x04


Reset value: 0x0000 0000

Bits 31:16 Reserved, must be kept at reset value.


Bits 15:0 OTy: Port x configuration bits (y = 0..15)

These bits are written by software to configure the output type of the
I/O port.
0: Output push-pull (reset state)
1: Output open-drain

Registro de velocidad de salida


(GPIOx_OSPEEDR)

Address offset: 0x08

0x0C00 0000 for port A


0x0000 00C0 for port B
0x0000 0000 for other ports

Reset values:

OSPEEDRy[1:0]: Port x configuration bits (y = 0..15)

These bits are written by software to configure the I/O


output speed.
00: Low speed
01: Medium speed
10: Fast speed
11: High speed

Registro pull-up/pull-down
(GPIOx_PUPDR)

Address offset: 0x0C

Reset values:
0x6400 0000 for port A
0x0000 0100 for port B
0x0000 0000 for other ports

PUPDRy[1:0]: Port x configuration bits (y = 0..15)

These bits are written by software to configure the I/O pull-up or pulldown
00: No pull-up, pull-down
01: Pull-up
10: Pull-down
11: Reserved

Registros de Datos de puertos

Registro de datos de entrada


(GPIOx_IDR)

Address offset: 0x10

Reset value: 0x0000 XXXX (where X means undefined)

IDRy: Port input data (y = 0..15)

These bits are read-only and can be


accessed in word mode only. They
contain the input value of the
corresponding I/O port

Registro de datos de salida


(GPIOx_ODR)

Address offset: 0x14

Reset value: 0x0000 0000

ODRy: Port output data (y =


0..15)

These bits can be read and written


by software.

Practica 1

Encender todos los


tarjeta de evaluacin

LEDs

Instrucciones a Utilizar
MOV32

MOV

STR

de

la

Qu perifricos se utilizan?

Qu registros se utilizan?

Cul es la direccin de cada registro?

Qu valor debe tener cada registro?

Perifric Direccin
o

Registro

Offse Valor
t

GPIOA

GPIOA_MODER

0x00

0x0C00 0000

GPIOA_PUPDR

0x0C

0x6400 0000

GPIOA_IDR

0x10

Slo Lectura

GPIOD_MODER

0x00

0x5500 0000

RCC_AHB1ENR

0x30

0x0000 0009

GPIOD

RCC

0x4002
0000

0x4002
0C00

0x4002
3800

Qu funciones se pueden utilizar?

Cul es la sintaxis de las funciones?

MOV y MOVN

Copia y mueve; Copia, invierte bit a bit y mueve

MOV{S}{cond} Rd, Operand2

MOV{cond} Rd, #imm16

MVN{S}{cond} Rd, Operand2

sufijo

cond

condicin

Rd

registro destino

Operand2
constante

es un registro o una

#inm16cualquier nmero de 0
-65535

MOV y MOVN

Copia y mueve; Copia, Invierte bit a bit y mueve

Ejemplos

MOVS R11, #0x000B ; write


value of 0x000B to R11, flags
get updated
MOV R1, #0xFA05 ; write value
of 0xFA05 to R1, flags not
updated
MOVS R10, R12 ; write value in
R12 to R10, flags get updated

MOV R3, #23 ; write value of 23 to R3

MOV R8, SP ; write value of stack pointer to R8

MVNS R2, #0xF ; write value of 0xFFFFFFF0 (bitwise inverse of


0xF) to the R2 and update flags

LDR y STR

Carga uno o dos registros con un valor de la memoria. Almacena el valor de uno o dos registros en la memoria.

op{type}{cond} Rt, [Rn {, #offset}]

op{type}{cond} Rt, [Rn, #offset]!


op:

op{type}{cond} Rt, [Rn], #offset

opD{cond} Rt, Rt2, [Rn {, #offset}]

opD{cond} Rt, Rt2, [Rn, #offset]!

opD{cond} Rt, Rt2, [Rn], #offset

type:

LDR o STR
B unsigned Byte
SB signed Byte
H unsigned Halfword
SH signed Halfword

Rt

Registro load or store.

Rn

Registro base

offset
Rt2

Desplazamiento
Registro adicional

LDR y STR

Cargar uno o dos registros con un valor de la memoria. Almacena uno o dos valores de registro en la memoria.

Ejemplos

LDR R8, [R10] ; loads R8 from the


address in R10.
LDRNE R2, [R5, #960]!; loads
(conditionally) R2 from a word
960 bytes above the address in
R5, and increments R5 by 960.
STR R2, [R9,#const-struc]; conststruc is an expression evaluating
to a constant in the range 0-4095.

STRH R3, [R4], #4; Store R3 as halfword data into address in R4,
then increment R4 by 4

LDRD R8, R9, [R3, #0x20]; Load R8 from a word 32 bytes above
the address in R3, and load R9 from a word 36 bytes above the
address in R3

STRD R0, R1, [R8], #-16; Store R0 to address in R8, and store R1
to a word 4 bytes above the address in R8; and then decrement
R8 by 16.

Practica 2
Encender de manera secuencial los
LEDs de la tarjeta de Evaluacin.
Apagar los LEDs al presionar el
botn de usuario de la tarjeta.
Volver a encender
secuencial los LEDs.

de

manera

Instrucciones adicionales
B

CBNZ

LDR STR

Perifric Direccin
o

Registro

Offse Valor
t

GPIOA

GPIOA_MODER

0x00

0x0C00 0000

GPIOA_PUPDR

0x0C

0x6400 0000

GPIOA_IDR

0x10

Slo Lectura

GPIOD_MODER

0x00

0x5500 0000

RCC_AHB1ENR

0x30

0x0000 0009

GPIOD

RCC

0x4002
0000

0x4002
0C00

0x4002
3800

B, BL, BX, and BLX


Instrucciones de salto

Cdigo Condicional

B{cond} label

Sufijo

Bandera

Significado

BL{cond} label

EQ

Z=1

Igual

BX{cond} Rm

NE

Z=0

No igual

BLX{cond} Rm

CS o HS

C=1

Mayor o igual

CC o LO

C=0

Menor

MI

N=1

Negativo

PL

N=0

Positivo o cero

VS

V=1

Sobreflujo

VC

V=0

No sobreflujo

Cortex M4 Generic User Guide pag. 66-67

B, BL, BX, and BLX


Instrucciones de salto.

Ejemplos

B loopA ; Branch to loopA

BLE ng ; Conditionally branch to


label ng

B.W target ; Branch to target


within 16MB range

BEQ target ; Conditionally branch


to target

BEQ.W target ; Conditionally


branch to target within 1MB

BL funC ; Branch with link (Call) to function funC, return address;


stored in LR

BX LR ; Return from function call

BXNE R0 ; Conditionally branch to address stored in R0

BLX R0 ; Branch with link and exchange (Call) to a address


stored; in R0.

CBZ y CBNZ

Compara y salta si es cero, Compara y salta si no es cero

CBZ Rn, label

CBNZ Rn, label

Rn
label

es el registro que se
compara
es el destino del salto

Ejemplo

CBZ R5, target ; Forward branch if R5 is zero

CBNZ R0, target ; Forward branch if R0 is not zero

Reloj
El STM32f401 tiene tres fuentes de
reloj que pueden ser utilizadas para
manejar el reloj del sistema
(SYSCLK):

HSI

HSE

PLL

Tambin tiene dos fuentes de reloj secundario de baja velocidad:

32 kHz (LSI RC)

32.768 kHz (LSE crystal)

Cada Reloj se puede apagar o encender de manera independiente para


optimizar el consumo de potencia

Despus
de
un
Restablecimiento
del sistema (Reset),
el oscilador HSI es
seleccionado como
reloj del sistema
Los bits del registro
RCC_CR nos indican
que relojes estn
listos y que reloj se
encuentra
como
reloj del sistema

Registro de control de reloj


(RCC_CR)

Address offset: 0x00

Reset value: 0x0000 XX81

Ciclos Maquina
Un
microcontrolador
es
un
ordenador en miniatura, con su
unidad de proceso, memoria,
dispositivos
y
un
juego
de
instrucciones propio de cada micro
como hemos visto en clase.

Cada instruccin tiene una


funcin definida y se ejecuta en
un tiempo determinado

Para determinar este tiempo se utiliza el trmino ciclo de mquina que


se define como
el tiempo mnimo necesario para ejecutar una instruccin
y est formado por un nmero determinado de ciclos o periodos de
reloj

Practica 3

Agregar rutinas de
programa anterior.

retardo

al

Los leds deben ir prendiendo cada


segundo.
Despus de presionar
el botn
Instrucciones
adicionales
deber pasar medio segundo para
comenzar de nueva la rutina

BL

BNE BX

SUBS

Practica 4

Hacer un corrimiento del led


encendido
en
sentido
horario,
cuando llegue al final deber
cambiar el sentido.

Instrucciones adicionales
LSL LSR

Lenguaje C

Practica 4

Mostrar la palabra HOLA en


displays de 7segmentos y hacer
que esta se desplace a la izquierda.

Lenguaje C

LCD

No. Pin

Nombre

Funcin

Vss

Tierra

Vdd

Alimentacin

Vee

Contraste

RS

Selector de registro
RS=0 Comando
RS=1 Carcter

R/W

Leer/Escribir
R/W=0 Escribe
R/W=1 Lee

Habilitar

D0

Bit de dato 0

D1

Bit de dato 1

D2

Bit de dato 2

10

D3

Bit de dato 3

11

D4

Bit de dato 4

12

D5

Bit de dato 5

13

D6

Bit de dato 6

14

D7

Bit de dato 7

DDRAM (Data Display RAM)

Cada vez que se escribe un dato en la DDRAM automticamente se


apunta a la siguiente posicin

Modos de Funcionamiento

Comando:

El LCD recibe una instruccin por


el bus de datos

Registro:

El LCD recibe un carcter por el


bus de datos

Modo Lectura:

A travs del bit 7 del bus de datos


el LCD informa si esta ocupado (bit
7=1)

Comandos de Control

Practica 5
Mostrar los siguientes mensajes en
el LCD:
IPN ESIME-ZAC
LAB C
Despus
debern
nombre completo:

mostrar

COSME CISNEROS
ISMAEL GABRIEL

Observaciones:
Debern crear una librera que
se llame LCD

su