Buscar

Tutorial_GPIO_Cortex_F4_V1_4_com_interrupção

Prévia do material em texto

1 
Pontifícia Universidade Católica do Rio Grande do Sul 
Escola Politécnica 
Curso de Engenharia Elétrica 
Sistemas Embarcados 
 
Prof. Juliano Benfica 
 
 
TUTORIAL CORTEX M4 – STM32F429ZITx (DISCOVERY) 
GPIO E TEMPORIZAÇÃO 
V1.4 – 2019 
 
1. CONFIGURAÇÃO DO PINO 
 
 GPIO_InitTypeDef 
 
GPIO_InitTypeDef is defined in the stm32f4xx_hal_gpio.h 
Data Fields 
 uint32_t Pin : PINO 
uint32_t Mode : MODO DO PINO 
 uint32_t Pull : PULL UP/PULL DOWN 
 uint32_t Speed : VELOCIDADE 
uint32_t Alternate : FUNÇÃO DO PINO PARA PERIFÉRICOS 
 
 
 
 
 
 2 
a. MODO DO PINO – GPIO MODE 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CONFIGURAÇÃO 
DO TIPO DE 
INTERRUPÇÃO DO 
PINO 
CONFIGURAÇÃO DO 
FUNCIONAMENTO 
DO PINO 
 3 
 
b. GPIO PULL 
 
 
c. VELOCIDADE DO PINO - GPIO SPEED 
 
 
 
 4 
2. CONFIGURAÇÃO DOS PINOS PELO STM32CubeMX – SEM INTERRUPÇÃO 
Abrir o STM32CubeMX e seguir os passos abaixo: 
 
Figura 1 – Configurar o diretório do repositório de bibliotecas. 
 5 
 
Colocar o diretório: C:/STM32Cube/Repository/ 
 
Figura 2 – Configurar o diretório do repositório de bibliotecas. 
 
 
 
 6 
 
Figura 3 – Criar novo projeto 
 7 
 
 
Figura 4 – Selecionar o kit Discovery STM32F429ZITx. 
 8 
 
Figura 5 – Não inicializar por padrão. 
 
Figura 6 – Habilitar o HIGH SPEED CLOCK. 
 9 
 
Figura 7 – Habilitar o SERIAL WIRE DEBUG. 
 10 
 
Figura 8 – Ajustar a frequência dos CLOCKs. 
 11 
 
Figura 9 – Selecionar o PINO desejado e escolher sua configuração. 
 12 
 
Figura 10 – Atribuir um nome ao pino. 
 13 
 
Figura 11 – Configurações do PINO. 
 14 
 
Figura 12 – Configuração do modo do pino. 
 15 
 
Figura 13 – Configuração nível lógico de partida do pino. 
 16 
 
Figura 14 – Configuração de PULL-UP, PULL-DOWN OU OPEN DRAIN do pino. 
 17 
 
Figura 15 – Velocidade do pino. 
 18 
 
Figura 16 – Configurar a geração do projeto. 
 19 
 
 
Figura 17 – Configurar inicialização e gerar o código do projeto. 
 20 
 
 
 
Figura 18 – Abrir o projeto no Keil. 
 
 
 
 
 
 
 
 
 
 
 21 
3. CONFIGURAÇÃO DOS PINOS PELO STM32CubeMX – COM INTERRUPÇÃO 
 
Figura 19 – Habilitação da interrupção externa. 
 22 
 
Figura 20 – Tipo de interrupção externa e nome do pino. 
 23 
 
Figura 21 – Habilitação da interrupção externa do pino. 
OBS: Para gerar o projeto siga os mesmos das figuras 11 a 14 
 24 
4. FUNÇÕES DE ESCRITA NOS GPIOs 
 
 HAL_GPIO_WritePin – FUNÇÃO DE ESCRITA EM UM PINO 
 
Function Name void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx, uint16_t 
GPIO_Pin, GPIO_PinState PinState) 
Function Description Sets or clears the selected data port bit. 
Parameters: 
 GPIOx : where x can be (A..F) to select the GPIO peripheral for STM32F0 
family AND (A..K) to select the GPIO peripheral for STM32F429X device. 
 GPIO_Pin : specifies the port bit to be written. This parameter can be one 
of GPIO_PIN_x where x can be (0..15). 
 PinState : specifies the value to be written: 
 GPIO_PIN_RESET: to clear the port pin 
 GPIO_PIN_SET: to set the port pin 
Return values None. 
Notes This function uses GPIOx_BSRR register to allow atomic read/modify 
accesses. In this way, there is no risk of an IRQ occurring between the read 
and the modify access. 
 
Exemplo de uso (código): 
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); 
 
 
 
 
 25 
 
 HAL_GPIO_TogglePin – FUNÇÃO DE INVERSÃO DE ESTADO DE UM PINO 
 
Function Name void HAL_GPIO_TogglePin ( GPIO_TypeDef * GPIOx, uint16_t 
GPIO_Pin) 
Function Description Toggles the specified GPIO pins. 
Parameters: 
 GPIOx : where x can be (A..F) to select the GPIO peripheral for STM32F0 
family AND (A..K) to select the GPIO peripheral for STM32F429X device. 
 GPIO_Pin : Specifies the pins to be toggled. 
Return values None. 
Notes None. 
 
Exemplo de uso (código): 
HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5); 
 
 
5. FUNÇÃO DE LEITURA DOS GPIOs 
 
 HAL_GPIO_ReadPin – FUNÇÃO DE LEITURA DE UM PINO 
 
Function Name GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, 
uint16_t GPIO_Pin) 
Function Description Reads the specified input port pin. 
Parameters: 
 26 
 GPIOx : where x can be (A..F) to select the GPIO peripheral for STM32F0 
family AND (A..K) to select the GPIO peripheral for STM32F429X device. 
 GPIO_Pin : specifies the port bit to read. This parameter can be 
GPIO_PIN_x where x can be (0..15). 
Return values The input port pin value - PinState : specifies the value 
to: 
 GPIO_PIN_RESET: the pin is clear. 
 GPIO_PIN_SET: the pin is set. 
Notes 
 
Exemplo de uso (código): 
X = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5); 
 
Exemplo de INTERRUPÇÃO de um pino (código): 
APÓS CONFIGURAR O PINO QUE GERARÁ A INTERRUPÇÃO 
ACRESCENTAR O SEGUINTE CÓDIGO ABAIXO DA MAIN: 
/* USER CODE BEGIN 0 */ 
 
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{ 
 //QUANDO A INTERRUPÇÃO É GERADA NO PINO ESTA FUNÇÃO É CHAMADA 
} 
 27 
} 
 
/* USER CODE END 0 */ 
 
Exemplo de INTERRUPÇÃO de VÁRIOS pinoS (código): 
APÓS CONFIGURAR OS PINOS QUE GERARÃO A INTERRUPÇÃO 
ACRESCENTAR O SEGUINTE CÓDIGO ABAIXO DA MAIN: 
/* USER CODE BEGIN 0 */ 
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{ 
 //QUANDO QUALQUER PINO GERA A INTERRUPÇÃO ENTRA NESTA FUNÇÃO 
 //PARA TESTAR O PINO QUE GEROU A INTERRUPÇÃO SIGA O EXEMPLO ABAIXO: 
 switch(GPIO_Pin){ 
 case GPIO_PIN_0: 
 //O PINO 0 GEROU A INTERRUPÇÃO 
 break; 
 case GPIO_PIN_1: 
 //O PINO 1 GEROU A INTERRUPÇÃO 
 break; 
 default: 
 break; 
 } 
}/* USER CODE END 0 */ 
 
 28 
6. ACESSO DIRETO AOS REGISTRADORES DE GPIOs 
 
a. LEITURA DA PORTA 
 
o IDR (GPIOx->IDR) - GPIO port input data register – LEITURA DA PORTA 
INTEIRA ONDE X DE (A..F) PARA STM32F0 E (A..K) PARA STM32F429X. 
Exemplo de uso (código): 
X = GPIOA->IDR; //Leitura da porta A 
 
b. ESCRITA NA PORTA INTEIRA SEM MÁSCARA 
 
o ODR (GPIOx->ODR) - GPIO port output data register – ESCRITA NA 
PORTA INTEIRA ONDE X DE (A..F) PARA STM32F0 E (A..K) PARA STM32F429X. 
Exemplo de uso (código): 
GPIOA->ODR = 0x55; //Escrita na porta A 
 
 
 
 
 
 
 
 
 29 
c. SETAR UM BIT DA PORTA COM MÁSCARA 
 
o BSRR (GPIOx->BSRR) - GPIO port bit set/reset - SETA OU RESETA UM 
PINO COM MÁSCARA ONDE X DE (A..F) PARA STM32F0 E (A..K) PARA STM32F429X. 
o Os primeiros 16bits do registrador são para setar os 
pinos, ou seja de 0 a 15. 
o Já os bits de 16 a 31 são para resetar os pinos. 
 
Exemplo de uso (código): 
GPIOA-> BSRR = (1<<5); //SETA O BIT 5 DA PORTA A 
GPIOA-> BSRR = (1<<21); //RESETA O BIT 5 DA PORTA A 
 
d. RESETAR UM BIT DA PORTA COM MÁSCARA 
 
o BRR - GPIO port bit reset - RESETA EM UM PINO COM MÁSCARA ONDE X DE 
(A..F) PARA STM32F0 E (A..K) PARA STM32F429X. 
Exemplo de uso (código): 
GPIOA-> BRR = (1<<5); //RESETA O BIT 5 DA PORTA A 
 
 
 
 
 30 
7. TEMPORIZAÇÃO BLOQUEANTE SEM TIMER 
JÁ EXISTE UMA IMPLEMENTAÇÃO DE UMA FUNÇÃO DE DELAY EM MILISEGUNDOS 
IMPLEMENTADA PELO TICK DO CLOCK PRINCIPAL. PARA UTILIZAR BASTA CHAMAR A 
FUNÇÃO ABAIXO: 
HAL_Delay(milisengundos); 
 
 
 
8. TEMPORIZAÇÃO NÃO BLOQUEANTE POR INTERRUPÇÃO SEM TIMER 
JÁ EXISTE UMA IMPLEMENTAÇÃO DE UMA FUNÇÃO INTERRUPÇÃO A CADA 1ms GERADA 
PELO TICK DO CLOCK DA CPU. PARA UTILIZAR A INTERRUPÇÃO BASTA ADICIONAR NO 
MAIN.C A FUNÇÃO DE ATENDIMENTO DE INTERRUPÇÃO DO SYSTICK CHAMADA DE: 
/* USER CODE BEGIN 4 */ 
 
void HAL_SYSTICK_Callback(void) 
{ 
 // A CADA 1 milisegundo ESTA FUNÇÃO É EXECUTADA 
} 
 
/* USER CODE END 4 */ 
 
 31 
 32 
 33 
Bibliografia: 
UM1785: Description of STM32F0xx HAL drivers 
http://www.st.com/st-web-
ui/static/active/en/resource/technical/document/user_manual/DM00122015.pdf 
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00122015.pdf
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00122015.pdf

Outros materiais