Baixe o app para aproveitar ainda mais
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
Compartilhar