Další pokračování tutoriálu pro STM32 (v tomto případě STM32F746). Dnes, jak rozsvítit nebo zhasnout LED tlačítkem.
Kód lze po úpravě použít i na další mikrokontroléry od ST jako STM32L100, L152, STM32F103, F407 a mnoho dalších.
U STM32F7-disco je LED zapojeno na port I, GPIO 1. Tlačítko je také na portu I, ale GPIO 11.
Další články o STM32(F7):
Tutorial: STM32F746 (STM32F7 Discovery) – Tlačítkem rozsvítit/zhasnout LED
Tutorial: STM32F746 (STM32F7 Discovery) – jak zapnout LED (ovládání GPIO)
STM32F746 discovery a IDE AC6 (System Workbench for STM32)
Jak začít s moderními mikrokontroléry a proč – STM32
Zapojení tlačítka u STM32F7-disco:
Opět bude příklad zobrazen jako okomentovaný kód.
main.h
/*
* main.c
*
* Created on: 14. 8. 2015
* Author: petus
* Website: http://chiptron.cz
*/
#ifndef MAIN_H_
#define MAIN_H_
#include „stm32f7xx.h“
#include „stm32f746xx.h“
#include „system_stm32f7xx.h“
#include
#include
#endif /* MAIN_H_ */
main.c
/*
* main.c
*
* Created on: 14. 8. 2015
* Author: petus
* Website: http://chiptron.cz
*/
#include „main.h“
int main(void)
{
//—-LED—-//
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOIEN; //Enable clock for PORT I
RCC->AHB1RSTR |= RCC_AHB1RSTR_GPIOIRST; //Reset PORT I
RCC->AHB1RSTR &= ~RCC_AHB1RSTR_GPIOIRST;
GPIOI->MODER |= GPIO_MODER_MODER1_0; //Set mode register PIN 1, PORT I
GPIOI->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1; //Set speed register PIN 1, PORT I
GPIOI->ODR |= GPIO_ODR_ODR_1; //Set output data register PIN 1, input PIN 11, PORT I
//—-GPIO—-//
GPIOI->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11; //Set speed register PIN 11, PORT I
while(1)
{
if(!(GPIOI->IDR & GPIO_IDR_IDR_11)) // check PIN 11, PORT I, if PIN 11 isn’t High – button isn’t pressed
GPIOI->ODR |= GPIO_ODR_ODR_1; // turn on LED on PIN 1, PORT 1
else // button is pressed
GPIOI->ODR &= ~GPIO_ODR_ODR_1; // turn off LED on PIN 1, PORT 1
}
}
Zde bych jenom zmínil, pokud používáte tlačítko a LED na stejném portu, vyvarujte se opětovnému resetování periferie.
V tomto případě můžete použít i zápis:
GPIOI->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR11; // LED, Button
V případě, že tlačítko je na jiném portu než LED, je nutno povolit periferii u obou portů.
Kompletní projekt napsaný v AC6 System Workbench for STM32 od openstm32.org je ke stažení zde.
Další články o STM32(F7):
Tutorial: STM32F746 (STM32F7 Discovery) – Tlačítkem rozsvítit/zhasnout LED
Tutorial: STM32F746 (STM32F7 Discovery) – jak zapnout LED (ovládání GPIO)
STM32F746 discovery a IDE AC6 (System Workbench for STM32)
Jak začít s moderními mikrokontroléry a proč – STM32