Skocz do zawartości

kost

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

kost wygrał w ostatnim dniu 7 listopada 2015

kost ma najbardziej lubianą zawartość!

Reputacja

1 Neutralna

O kost

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  1. Cześć, Trochę to trwało, ale udało mi się rozwiązać problem z przerwaniami dla Nucleo F303RE. Problem tkwi w kodzie dla Startup (startup_stm32.s) brak w nim odwołania do przerwań: /****************************************************************************** * * The minimal vector table for a Cortex-M. Note that the proper constructs * must be placed on this to ensure that it ends up at physical address * 0x0000.0000. * ******************************************************************************/ .section .isr_vector,"a",%progbits .type g_pfnVectors, %object .size g_pfnVectors, .-g_pfnVectors g_pfnVectors: .word _estack .word Reset_Handler .word NMI_Handler .word HardFault_Handler .word MemManage_Handler .word BusFault_Handler .word UsageFault_Handler .word 0 .word 0 .word 0 .word 0 .word SVC_Handler .word DebugMon_Handler .word 0 .word PendSV_Handler .word SysTick_Handler .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 Podmieniłem jego zawartość z pliku startup_stm32f30x.s znajdującego się u mnie: STM32F30x_DSP_StdPeriph_Lib_V1.2.1\Libraries\CMSIS\Device\ST\STM32F30x\Source\Templates\gcc_ride7 W rozwiązaniu problemu pomógł mi ten wątek, na forum STM: Klik
  2. Witam Serdecznie, Jestem w trakcie kursu STM32 i nie mogę przejść etapu z przerwaniami zewnętrznymi, posiadam płytkę STM32F303RE, wszystko wykonane zgodnie z kursem zmienione pod płytkę STM32F3. #include "stm32f30x.h" volatile uint32_t timer_ms = 0; void SysTick_Handler() { if (timer_ms) { timer_ms--; } } void delay_ms(int time) { timer_ms = time; while (timer_ms) {}; } void EXTI15_10_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line13)) { if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) { // jesli przycisk jest przycisniety GPIO_SetBits(GPIOA, GPIO_Pin_5); // zapal diode } else { GPIO_ResetBits(GPIOA, GPIO_Pin_5); } EXTI_ClearITPendingBit(EXTI_Line13); } } int main(void) { GPIO_InitTypeDef gpio; EXTI_InitTypeDef exti; NVIC_InitTypeDef nvic; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_5; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IN; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC, &gpio); gpio.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOC, &gpio); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13); EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line13; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Falling; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); nvic.NVIC_IRQChannel = EXTI15_10_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 0; nvic.NVIC_IRQChannelSubPriority = 0; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); uint32_t led = 0; SysTick_Config(SystemCoreClock / 1000); while (1) { GPIO_SetBits(GPIOC, 1 << led); // zapal diode delay_ms(150); // poczekaj GPIO_ResetBits(GPIOC, 1 << led); // zgas diode if (++led >= 10) { // przejdz do nastepnej led = 0; } } } W pętlę while włożyłem kod z przesuwającą się diodą LED na linijce świetlnej, żeby móc obserwować pracę mikrokontrolera. Po naciśnięciu przycisku program się zatrzymuje (dioda się nie przesuwa) a dioda na płytce Nucleo się nie zapala. Wygląda to tak jakby przerwanie zostało wywołane i mikrokontroler w nim pozostał. Gdzie popełniłem błąd? czy jest coś jeszcze co powinno zostać zmienione z uwagi na inny mikrokontroler niż ten w kursie?
  3. Mam problem z obsługą przerwań w moim STM32F303RE, nie mogę zlokalizować problemu, wszystko wykonałem zgodnie z kursem, zmieniając oczywiście pod STM32F3, np.: RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //Aktywacja funkcji alternatywnych SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13); //wybór linii i portu W pętlę while włożyłem kod z przesuwającą się diodą LED na linijce świetlnej, żeby móc obserwować pracę mikrokontrolera. Po naciśnięciu przycisku główny program się zatrzymuje i na tym koniec. Dioda LED na płytce Nucleo nie zapala się. Wygląda to tak jakby przerwanie zostało wywołane i mikrokontroler w nim pozostał. Gdzie może być błąd? Czy dla STM32F3 obsługa przerwań jest inna? Zastosowałem wszystkie wymagane zmiany według dokumentu: http://www.st.com/web/en/resource/technical/document/application_note/DM00073522.pdf
  4. A co sądzicie o Wyliodrin? https://www.wyliodrin.com/ Wizualne tworzenie aplikacji i wgrywanie ich bezpośrednio z przeglądarki.
  5. Dla osób które posiadają, tak jak ja, Nucleo seria z STM32F3xx, polecam: http://www.st.com/web/en/resource/technical/document/application_note/DM00073522.pdf Dokument opisuje jak przejść z STM32F1xx na STM32F3xx Tak wygląda migająca dioda po przystosowaniu dla STM32F3xx #include "stm32f30x.h" void delay(int time) { int i; for (i = 0; i<time*4000; i++){} } int main(void) { GPIO_InitTypeDef gpio; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_5; gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA, &gpio); while (1) { GPIO_SetBits(GPIOA, GPIO_Pin_5); delay(100); GPIO_ResetBits(GPIOA, GPIO_Pin_5); delay(400); } } Mam pytanie, ustawiłem pin 5 jako wyjście gpio.GPIO_Mode = GPIO_Mode_OUT; i dioda mrugała, jednak w przykładzie dla STM32F1xx wyjście jest typu push-pull, więc dodałem jeszcze: gpio.GPIO_OType = GPIO_OType_PP; słusznie czy nie? bo nie widzę różnicy w działaniu.
  6. Ok, trochę to trwało, ale dałem radę , przeinstalowałem Eclipse, usuwając wszystkie pliki przy temu. W nowej instalacji wybrałem inną ścieżkę dla Workspace, bez polskich liter i się udało, kompilacja przeszła prawidłowo. O, dopiero teraz zauważyłem, że sugerowałeś to co pomogło, zmiana katalogu Workspace ze ścieżką bez polskich liter.
  7. To jest kopia z konsoli: 20:21:39 **** Build of configuration Debug for project STM32_jeden **** make all 'Building file: ../startup/startup_stm32.s' 'Invoking: MCU GCC Assembler' C:\Users\ťukasz\workspace\STM32_jeden\Debug arm-none-eabi-as -mcpu=cortex-m4 -mthumb -mfloat-abi=soft -I"C:/Users/Łukasz/workspace/STM32_jeden/inc" -I"C:/Users/Łukasz/workspace/STM32_jeden/CMSIS/core" -I"C:/Users/Łukasz/workspace/STM32_jeden/CMSIS/device" -I"C:/Users/Łukasz/workspace/STM32_jeden/StdPeriph_Driver/inc" -g -o "startup/startup_stm32.o" "../startup/startup_stm32.s" 'Finished building: ../startup/startup_stm32.s' ' ' 'Building file: ../src/main.c' 'Invoking: MCU GCC Compiler' C:\Users\ťukasz\workspace\STM32_jeden\Debug arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=soft -DSTM32F30 -DNUCLEO_F303RE -DSTM32F3 -DSTM32F303RETx -DSTM32 -DDEBUG -DUSE_STDPERIPH_DRIVER -DSTM32F303xE -I"C:/Users/Łukasz/workspace/STM32_jeden/inc" -I"C:/Users/Łukasz/workspace/STM32_jeden/CMSIS/core" -I"C:/Users/Łukasz/workspace/STM32_jeden/CMSIS/device" -I"C:/Users/Łukasz/workspace/STM32_jeden/StdPeriph_Driver/inc" -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -MMD -MP -MF"src/main.d" -MT"src/main.o" -o "src/main.o" "../src/main.c" ../src/main.c:12:23: fatal error: stm32f30x.h: No such file or directory #include "stm32f30x.h" ^ compilation terminated. make: *** [src/main.o] Error 1 20:21:40 Build Finished (took 372ms) Jest to bardzo dziwne ponieważ on w pierwszej części szuka ścieżki z użytkownikiem t'ukasz, a jak widać później ja mam Łukasz, nie czyta polskich znaków? __________ Komentarz dodany przez: Treker Pamiętaj o używaniu tagów , tym razem poprawiłem
  8. Tak, krok po kroku, różnica u mnie była taka, że nie miałem folderu Utilities.
  9. Coś u mnie nie działa, mam płytkę STM32 NUCLEO-F303RE, podczas kompilacji pojawia się problem, że nie zlokalizował pliku: "stm32f30x.h" a on znajduje się przecież w CMSIS/device, jak to naprawić?
×
×
  • Utwórz nowe...