A maior rede de estudos do Brasil

Grátis
256 pág.
Descobrindo o STM32

Pré-visualização | Página 13 de 47

GPIOA e GPIOB como
segue:
1Os vários registradores de controle estão completamente documentados em [20].
64 Revision: (None) ((None))
4.2. PINOS DE I/O
ABP2ENR |= 0x0C;
16171819202122232425262728293031
Reserved TIM17TIM16TIM15
0123456789101112131415
Res. URT1 Res. SPI1 TIM1 Res. ADC1 IOPG IOPF IOPE IOPD IOPC IOPB IOPA Res. AFIO
Figura 4.2: APB2 Peripheral Clock Enable Register
4.2 Pinos de I/O
A maioria dos pinos do STM32 pode ser configurado como entrada ou
saída e poderão ser conectado tanto para as portas GPIO quanto para “fun-
ções alternativas” (outros periféricos). Como uma convenção de nomenclatura
padrão, os pinos são nomeados por sua função GPIO – por exemplo PA0 (bit 0
da porta A) ou PB9 (bit 9 da porta B). De fato, a nomenclatura da Discovery
Board segue essa convenção. Dentro das restrições específicas do hardware,
cada pino pode ser configurado nos modos mostrados na Tabela 4.2.
Function Library Constant
Alternate function open-drain GPIO_Mode_AF_OD
Alternate function push-pull GPIO_Mode_AF_PP
Analog GPIO_Mode_AIN
Input floating GPIO_Mode_IN_FLOATING
Input pull-down GPIO_Mode_IPD
Input pull-up GPIO_Mode_IPU
Output open-drain GPIO_Mode_Out_OD
Output push-pull GPIO_Mode_Out_PP
Tabela 4.2: Pin Modes (stm32f10x_gpio.h)
Por default a maioria dos pinos está resetada para “Entrada Flutu-
ante” (“Input Floating”) -– isso garante que não ocorrerá nenhum conflito de
hardware quando o sistema for ligado. A biblioteca de Firmware fornece uma
rotina de inicialização em stm32f10x_gpio.[ch] que pode ser usada para re-
configurar os pinos. Por exemplo, para o Blinking Light nós configuramos
PC9 como uma saída (lenta) como mostrado na Listagem 4.1.
Revision: (None) ((None)) 65
CAPÍTULO 4. CONFIGURAÇÃO DO STM32
// see stm32f10x_gpio.h
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
Listing 4.1: Configuração de PC9
Quando configuramos uma saída como mostrado anteriormente, nós
temos três escolhas de “velocidade” de saída – 50MHz, 10MHz, e 2MHz. Em
geral, por razões de consumo de energia e ruído, é desejável usar a menor
velocidade em relação aos requisitos de I/O. O campo GPIO_Pin é um vetor
de bits e é possível configurar múltiplos pinos associados com uma única porta
em um único passo.
Observação: A pinagem (pin-outs) para partes específicas (incluindo
as atribuições dos periféricos aos pinos) são definidos nos seus respectivos data
sheet (p. ex. [15]) e NÃO no manual de programação! As atribuições de pinos
para a Discovery Board são documentados no manual do usuário [14].
Como nós vimos, nós podemos atribuir um valor ao pino que controla
o LED com o seguinte procedimento:
GPIO_WriteBit(GPIOC, GPIO_Pin_9 , x); // x is Bit_SET or Bit_RESET
A biblioteca dos módulos gpio fornece funções para ler e escrever tanto
pinos individualmente quanto portas inteiras – o ultimo é especificamente útil
para capturar dados paralelos. É instrutivo ler o arquivo stm32f10x_gpio.h.
Para (re-)configurar o pino associado com o botão da Discovery Board,
nós podemos usar o seguinte código (após configurar o clock para porta A!):
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
Para ler o valor atual do botão nós podemos executar:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
66 Revision: (None) ((None))
4.3. FUNÇÕES ALTERNATIVAS
Relembre do Capítulo 2 que cada porta GPIO é controlada por 7 re-
gistradores:
typedef struct
{
volatile uint32_t CRL;
volatile uint32_t CRH;
volatile uint32_t IDR;
volatile uint32_t ODR;
volatile uint32_t BSRR;
volatile uint32_t BRR;
volatile uint32_t LCKR;
} GPIO_TypeDef;
Os 16 bits de cada porta são configurados com CRL (bits 0-7) e CHR
(pins 8-15). Para suportar os vários modos de I/O, 4 bits de configuração são
necessários para cada bit do GPIO. Os 16 bits GPIO podem ser lidos em pa-
ralelo (IDR) e escritos em paralelo (ODR). Por conveniência, registradores BSRR
e BRR fornecem um mecanismo para ligar ou desligar bits individualmente.
O registrador de trava LCKR fornece um mecanismo para “travar” (“lock”) a
configuração de bits individuais contra a reconfiguração de software e conse-
quentemente proteger o hardware de bugs de software.
Exercise 4.2 Blinking Lights com Pushbutton
Modifique o seu programa Pisca-Led adicionando a leitura do estado do
botão do usuário (PA0) no Led azul (PC8). Veja se você consegue descobrir
como configurar ambos os Leds com uma única chamada de GPIO_Init.
4.3 Funções Alternativas
Periféricos como as USARTs compartilham pinos com os dispositivos
GPIO. Antes destes periféricos poderem ser utilidados, qualquer saída re-
querida pelo periférico necessita ser configurada para um “modo alternativo”
(“alternative mode”). Por exemplo, o pino Tx (saída de dados) da USART1
é configurado da seguinte maneira:
GPIO_InitStruct.GPIO_PIN = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);
Revision: (None) ((None)) 67
CAPÍTULO 4. CONFIGURAÇÃO DO STM32
A configuração específica requerida por cada periférico é descrita na
seção 7.1.11 do manual de referência RM0041 [20] do stm32f10xx (seção 9.1.11
para manual de referência RM0008 [21] do stm32f103xx).
4.4 Remapeamento
Também é possível “remapear” os pinos de modo que pinos não-padrão
sejam usados para vários periféricos de modo a minimizar conflitos. Esses
remapeamentos, que estão além do escopo desse livro, são descritos em um
manual apropriado do STM32 ([20, 21]).
4.5 Atribuições de Pinos para os Exemplos e
Exercícios
Nesse livro nós desenvolvemos uma série de exemplos e exercícios base-
ados na STM32VL Discovery Board. Para garantir que esses exemplos possam
funcionar juntos são necessários alguns cuidados na seleção de dispositivos da
STM32 e nos pinos GPIO -– por exemplo nós utilizamos o dispositivo SPI2
em vez do SPI1 devido um conflito de recursos. Na Tabela 4.5 enumeramos
todos as atribuições de pinos usados ao longo desse livro com as configurações
requeridas para esses usos.
68 Revision: (None) ((None))
4.5. ATRIBUIÇÕES DE PINOS PARA OS EXEMPLOS E EXERCÍCIOS
Device Pino Função Configuração
User Button PA0 Input floating
LCD Backlight PA1 Backlight Output/Alternative function push-pull
DAC1 PA4 DAC Output Analog
ADC PA6 IN6 Input floatingPA7 IN7 Input floating
Timer 1 PA8 Channel 1 Input floating
USART 1
PA9 TX Alternative function push-pull
PA10 RX Input Pull-up
PA11 nCTS Input Pull-up
PA12 nRTS Alternative function push-pull
Timer 3 PB0 Channel 3 Alternative function push-pullPB1 Channel 4 Alternative function push-pull
I2C1 PB6 SCK Alternative function open-drainPB7 SDA Alternative function open-drain
Timer 4 PB9 Channel 4 Alternative function push-pull
I2C2 PB10 SCK Alternative function open-drainPB11 SDA Alternative function open-drain
SPI2
PB13 CLK Alternative function push-pull
PB14 MISO Input pull-up
PB15 MOSI Alternative function push-pull
LCD
control
PC0 LCD Select Output push-pull
PC1 Reset Output push-pull
PC2 Data/Control Output push-pull
SD Card PC6 Select Output push-pull
Blue LED PC8 Output push-pull
Green LED PC9 Output push-pull
SPI EEPROM CS PC10 Output push-pull
Tabela 4.3: Atribuições de Pinos para os Exercícios
Revision: (None) ((None)) 69
CAPÍTULO 4. CONFIGURAÇÃO DO STM32
4.6 Configuração de Periféricos
Como mencionado, o terceiro estágio de configuração, após a distribui-
ção de clock e configuração de pinos, é a configuração de periféricos. Enquanto
nós adiamos a discussão da configuração de periféricos específicos, a biblioteca
padrão

Crie agora seu perfil grátis para visualizar sem restrições.