Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałVerawati Johan Został zmieniony 5 lat temu
1
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Projektowanie systemów wbudowanych dla Internetu Przedmiotów Programowanie mikrokontrolerów z rdzeniem ARM - Nucleo-F401RE dla SCR (tworzenie firmware) - wprowadzenie Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
2
NUCLEO-F401RE Zygmunt Kubiak
3
NUCLEO-F401RE Zygmunt Kubiak
4
NUCLEO-F401RE Zygmunt Kubiak
5
NUCLEO-F401RE Zygmunt Kubiak
6
NUCLEO-F401RE Zygmunt Kubiak
7
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Oznaczenia mikrokontrolerów STM32xx, gdzie xx F0 - rdzeń Cortex-M0, tanie i proste układy, zegar do 48MHz. F1 - rdzeń Cortex-M3, zegar do 72MHz; niektóre układy mają specjalne peryferia do sterowania silnikami. F2 - mocniejsza wersja F1, zegar do 120MHz. F3 - rdzeń Cortex-M4, zegar max 72MHz, obsługa instrukcji DSP oraz koprocesor arytmetyczny. F4 - mocniejsza wersja F3, zegar do 180MHz. F7 - najnowsza wersja, szybsza względem F4, (2x). L0 - układ energooszczędny z rdzeniem Cortex-M0. L1 - model energooszczędny z rdzeniem Cortex-M3. Zygmunt Kubiak
8
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Środowiska programistyczne System Workbench for STM32 - SW4STM (proj. OpenSTM32) TrueSTUDIO_for_STM32 (f. Atollic) MDK (f. Keil) EWARM (f. IAR) CoIDE (f. CooCox) STM32 ST-LINK interfejs do programowania STM32 Kompilator –najczęściej GCC STM32CubeMX – program konfiguratora STM32 ARM Mbed Zygmunt Kubiak
9
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Blink File -> New -> C Project Blink, Empty Project, Ac6 STM32 MCU GCC => Next Zygmunt Kubiak
10
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Blink File -> New -> C Project Blink, Empty Project, Ac6 STM32 MCU GCC => Next => Next Zygmunt Kubiak
11
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Blink File -> New -> C Project Blink, Empty Project, Ac6 STM32 MCU GCC => Next STM32F4, NUCLEO-F401RE => Next Zygmunt Kubiak
12
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Blink File -> New -> C Project Blink, Empty Project, Ac6 STM32 MCU GCC => Next STM32F4, NUCLEO-F401RE => Next StdPeriph; gdy prop. Firmware to załadować => Finish Zygmunt Kubiak
13
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Blink Wygenerowany projekt StdPeriph_Driver - kod biblioteki inc – foder plików nagłówkowych (.h) src – folder plików z kodem programu (.c) Startup – pliki z kodem w asemblerze, uruchamianym po resecie CMSIS – biblioteka dostarczana przez ARM Zygmunt Kubiak
14
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Blink #include "stm32f4xx.h" void delay(int time){ for (int i = 0; i < time * 3000; i++); } int main(void) { //Zezwolenie na zegar na magistrali AHB1 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //obiekt GPIO GPIO_InitTypeDef gpio; //Inicjacja struktury GPIO_StructInit(&gpio); Zygmunt Kubiak
15
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Blink // PA5 wyjście – dioda LD2 gpio.GPIO_Pin = GPIO_Pin_5; gpio.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOA, &gpio); for(;;){ GPIO_SetBits(GPIOA, GPIO_Pin_5); // zał. LD2 delay(100); GPIO_ResetBits(GPIOA, GPIO_Pin_5); // wył. LD2 delay(50); } Zygmunt Kubiak
16
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Button File -> New -> C Project Button, Empty Project, Ac6 STM32 MCU GCC => Next => Next STM32F4, NUCLEO-F401RE => Next StdPeriph; gdy prop. Firmware to załadować => Finish Wygenerowany projekt StdPeriph_Driver - kod biblioteki inc – foder plików nagłówkowych (.h) src – folder plików z kodem programu (.c) Startup – pliki z kodem w asemblerze, uruchamianym po resecie CMSIS – biblioteka dostarczana przez ARM Zygmunt Kubiak
17
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Button #include "stm32f4xx.h„ int main(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); // Ustawienie wybranych parametrów w strukturze inicjującej gpio.GPIO_Pin = GPIO_Pin_5; // LEDG (LD2) Zygmunt Kubiak
18
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Button gpio.GPIO_Mode = GPIO_Mode_OUT; // wyjście // gpio.GPIO_OType = GPIO_OType_PP; // PP GPIO_Init(GPIOA, &gpio); // Init port GPIOA gpio.GPIO_Pin = GPIO_Pin_13; // przycisk (B1) gpio.GPIO_Mode = GPIO_Mode_IN; // wejscie gpio.GPIO_PuPd = GPIO_PuPd_UP; // z rezystorem pull-up GPIO_Init(GPIOC, &gpio); // Init port GPIOC Zygmunt Kubiak
19
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) - Button while(1) { if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) // gdy B1 wcisniety GPIO_SetBits(GPIOA, GPIO_Pin_5); // zapal LD2 else GPIO_ResetBits(GPIOA, GPIO_Pin_5); // inaczej wyłącz LD2 } Zygmunt Kubiak
20
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Blink2 File -> New -> C Project Blink2, Empty Project, Ac6 STM32 MCU GCC => Next STM32F4, NUCLEO-F401RE => Next StdPeriph; gdy prop. Firmware to załadować => Finish Wygenerowany projekt StdPeriph_Driver - kod biblioteki inc – foder plików nagłówkowych (.h) src – folder plików z kodem programu (.c) Startup – pliki z kodem w asemblerze, uruchamianym po resecie CMSIS – biblioteka dostarczana przez ARM Zygmunt Kubiak
21
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Blink2 #include "stm32f4xx.h" volatile u32 LT0, LT1, LT2, LT3, Tim_ms=0; volatile u8 T0, T1, T2, T3; int main(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); Zygmunt Kubiak
22
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Blink2 Dostępny jest specjalny timer (24 bity) SysTick() SysTick_Handler() // Ustawienie wybranych parametrów w strukturze inicjującej gpio.GPIO_Pin = GPIO_Pin_5; gpio.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOA, &gpio); SysTick_Config(SystemCoreClock / 1000); //start przerwań co 1ms LT0=1000; T0=1; Zygmunt Kubiak
23
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Blink2 while(1) { while (T0) GPIO_SetBits(GPIOA, GPIO_Pin_5); LT1=400; T1=1; } while (T1) GPIO_ResetBits(GPIOA, GPIO_Pin_5); LT0=100; T0=1; Zygmunt Kubiak
24
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Blink2 /* while (T0) { GPIO_ToggleBits(GPIOA, GPIO_Pin_5); LT0=100; T0=1; } */ Zygmunt Kubiak
25
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Blink2 void SysTick_Handler() // przerwania czasowe 1ms { Tim_ms++; if (T0) if (LT0 == 0) T0 =0; else LT0--; } if (T1) if (LT1 == 0) T1 = 0; else LT1--; Zygmunt Kubiak
26
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Blink2 if (T2) { if (LT2 == 0) T2 = 0; else LT2--; } if (T3) if (LT3 == 0) T3 = 0; else LT3--; Zygmunt Kubiak
27
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z biblioteką StdPeriph) – Sync Niezależne mruganie diodami Realizacja synchroniczna Zygmunt Kubiak
28
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – diagram przepływu Zygmunt Kubiak
29
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – algorytm synchroniczny Zygmunt Kubiak
30
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – algorytm synchroniczny Zygmunt Kubiak
31
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – program #include "stm32f4xx.h„ volatile uint32_t LT0, LT1, LT2, LT3, Tim_ms; volatile uint8_t T0, T1, T2, T3; uint8_t F0, F1, F2, F3; int main(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); // Ustawienie wybranych parametrów w strukturze inicjującej gpio.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; gpio.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOA, &gpio); SysTick_Config(SystemCoreClock / 1000); //start przerwań co 1ms Zygmunt Kubiak
32
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – program GPIO_ResetBits(GPIOA, GPIO_Pin_5); GPIO_ResetBits(GPIOA, GPIO_Pin_6); LT0=500; LT1=179; F0=1; F1=0; F2=1; F3=0; T0=1; T1=1; while(1) { if (F0) if (T0==0) GPIO_SetBits(GPIOA, GPIO_Pin_5); // zapal LD2 F0=0; F1=1; LT0=200; T0=1; } Zygmunt Kubiak
33
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – program if (F1) { if (T0==0) GPIO_ResetBits(GPIOA, GPIO_Pin_5); // wyłącz LD2 F1=0; F0=1; LT0=500; T0=1; } if (F2) if (T1==0) GPIO_SetBits(GPIOA, GPIO_Pin_6); // zapal LD3 F2=0; F3=1; LT1=179; T1=1; Zygmunt Kubiak
34
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – program if (F3) { if (T1==0) GPIO_ResetBits(GPIOA, GPIO_Pin_6); // wyłącz LD3 F2=0; F3=1; LT1=179; T1=1; } } // koniec main() Zygmunt Kubiak
35
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – program void SysTick_Handler()// przerwania czasowe 1ms { Tim_ms++; if (T0) if (LT0 == 0) T0 = 0; else LT0--; } if (T1) if (LT1 == 0) T1 = 0; else LT1--; Zygmunt Kubiak
36
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Sync – realizacja synchroniczna Niezależne mruganie diodami – program if (T2) { if (LT2 == 0) T2 = 0; else LT2--; } if (T3) if (LT3 == 0) T3 = 0; else LT3--; // koniec programu „Sync” Zygmunt Kubiak
37
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) Instalacja Help -> Install New Software… Plik „ en.stsw-stm32095.zip” Zygmunt Kubiak
38
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) Instalacja Help -> Install New Software… Plik „ en.stsw-stm32095.zip” Window -> Perspective -> Open Perspective -> Other Zygmunt Kubiak
39
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube Zygmunt Kubiak
40
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube Border Selector Start Project Zygmunt Kubiak
41
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube Pinout Zygmunt Kubiak
42
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube Configuration Zygmunt Kubiak
43
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube Configuration Zygmunt Kubiak
44
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube Project -> Generate Code Zygmunt Kubiak
45
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); Zygmunt Kubiak
46
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCube HAL_Delay(1000); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); while (1) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); HAL_Delay(500); } Zygmunt Kubiak
47
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – ButCube int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); Zygmunt Kubiak
48
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – ButCube while (1) { // if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET) if (HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin) == GPIO_PIN_SET) //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); } Zygmunt Kubiak
49
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCsync #include "main.h" #include "stm32f4xx_hal.h" extern volatile uint32_t LT0, LT1, LT2, LT3, Tim_ms; extern volatile uint8_t T0, T1, T2, T3; /* Private function prototypes */ void SystemClock_Config(void); static void MX_GPIO_Init(void); Zygmunt Kubiak
50
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCsync int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); SysTick_Config(SystemCoreClock / 1000); //start przerwań co 1ms LT0=1000; T0=1; Zygmunt Kubiak
51
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCsync while (1) { // HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); while (T0) HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET); LT1=900; T1=1; } while (T1) HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET); LT0=100; T0=1; Zygmunt Kubiak
52
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCsync !!! Zmiana w pliku „stm32f4xx_it.c” #include "stm32f4xx_hal.h" #include "stm32f4xx.h" #include "stm32f4xx_it.h" /* USER CODE BEGIN 0 */ volatile uint32_t LT0, LT1, LT2, LT3, Tim_ms; volatile uint8_t T0, T1, T2, T3; Zygmunt Kubiak
53
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCsync !!! Zmiana w pliku „stm32f4xx_it.c” void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ Tim_ms++; if (T0) if (LT0 == 0) T0 =0; else LT0--; } if (T1) if (LT1 == 0) T1 = 0; else LT1--; Zygmunt Kubiak
54
Projektowanie systemów wbudowanych dla Internetu Przedmiotów
Wprowadzenie do programowania synchronicznego dla modułu NUCLEO-F401RE (środowisko SW4STM32 z konfig. STM32CubeMX) – BlinkCsync !!! Zmiana w pliku „stm32f4xx_it.c” if (T2) { if (LT2 == 0) T2 = 0; else LT2--; } if (T3) if (LT3 == 0) T3 = 0; else LT3--; /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); HAL_SYSTICK_IRQHandler(); Zygmunt Kubiak
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.