Skocz do zawartości

KrzyMr

Użytkownicy
  • Zawartość

    6
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O KrzyMr

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Tak wiem czytam właśnie ten poradnik ale używa tam F103 i wykorzystuje przerwania od przepełnienia, a ja chce po prostu odczytywać wartość licznika.
  2. Witam. Od 3 dni walczę z uruchomieniem encoder mode na timerze1 lub 2, wszystko ustawione tak jak RM. Dla pewności robiłe obsługę encodera na jednym przerwaniu na pinie PC0 i działał w miarę ok. Ale chce uzyskać taki efekt na timerze. Oto aktualny kod: #include "stm32f3xx.h" #include "main.h" void GPIO_Init(void); void Make_buffor(void); uint32_t Segmenty[8] = {SA, SB, SC, SD, SE, SF, SG, Sdp}; uint32_t Wyswietlacz[4] = {C1, C2, C3, C4}; uint32_t Liczby[10] = {L0, L1, L2, L3, L4, L5, L6, L7, L8, L9}; uint8_t wyswietlana_liczba = 0; uint32_t liczba = 10; uint16_t bufor_do_wyswietlenia[4]; int main(void){ RCC -> AHBENR = RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIOBEN; RCC -> APB2ENR = RCC_APB2ENR_SYSCFGEN | RCC_APB2ENR_TIM1EN; __DSB(); GPIO_Init(); TIM1 -> ARR = 100; TIM1 -> CCMR1 |= (TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0); TIM1 -> CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P); TIM1 -> SMCR |= TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0; TIM1 -> CR1 |= TIM_CR1_CEN; //TIM1 -> CNT = 26; //SYSCFG -> EXTICR[0] = 0x2; //EXTI -> FTSR |= EXTI_FTSR_TR0; //EXTI -> IMR |= EXTI_IMR_MR0; //NVIC_EnableIRQ(EXTI0_IRQn); SysTick_Config(4000); while(1){ } } void GPIO_Init(void){ GPIOB -> MODER = MODE_SA | MODE_SB | MODE_SC | MODE_SD | MODE_SE | MODE_SF | MODE_SG | MODE_Sdp; GPIOC -> MODER = MODE_C1 | MODE_C2 | MODE_C3 | MODE_C4; //GPIOC -> PUPDR |= GPIO_MODER_MODER0_0 | GPIO_MODER_MODER1_0; //GPIOC -> AFR[0] |= GPIO_AFRL_AFRL0 | GPIO_AFRL_AFRL1; } void SysTick_Handler(void){ liczba = TIM1 -> CNT; Make_buffor(); GPIOB -> ODR &= ~ALL; GPIOC -> ODR = Wyswietlacz[wyswietlana_liczba]; GPIOB -> ODR = Liczby[bufor_do_wyswietlenia[wyswietlana_liczba]]; wyswietlana_liczba ++; if(wyswietlana_liczba > 3) wyswietlana_liczba = 0; } /* void EXTI0_IRQHandler(void){ EXTI -> PR = EXTI_PR_PR0; if(!(GPIOC -> IDR & GPIO_IDR_1)){ liczba ++; if(liczba > 9999) liczba = 0; } else if(GPIOC -> IDR & GPIO_IDR_1){ liczba --; if(liczba <= 0) liczba = 9999; } Make_buffor(); } */ void Make_buffor(void){ if(liczba < 10){ bufor_do_wyswietlenia[0] = 0; bufor_do_wyswietlenia[1] = 0; bufor_do_wyswietlenia[2] = 0; bufor_do_wyswietlenia[3] = liczba % 10; } else if(liczba < 100){ bufor_do_wyswietlenia[0] = 0; bufor_do_wyswietlenia[1] = 0; bufor_do_wyswietlenia[2] = liczba / 10; bufor_do_wyswietlenia[3] = liczba % 10; } else if(liczba < 1000){ bufor_do_wyswietlenia[0] = 0; bufor_do_wyswietlenia[1] = liczba / 100; bufor_do_wyswietlenia[2] = (liczba % 100) / 10; bufor_do_wyswietlenia[3] = liczba % 10; } else if(liczba <= 9999){ bufor_do_wyswietlenia[0] = liczba / 1000; bufor_do_wyswietlenia[1] = (liczba % 1000) / 100; bufor_do_wyswietlenia[2] = (liczba % 100) / 10; bufor_do_wyswietlenia[3] = liczba % 10; } } Podłączony mam też wyświetlacz 7 segmentowy. Nie jestem pewien jak ustawić piny, w // jest to czego próbowałem. Jakieś pomysły co jest źle, albo czego brakuje? Enkoder jest podpięty do masy, +3,3v i kanały odpowiednio do PC0 i PC1.
  3. Problem w sumie rozwiązany, w VSCode można też użyć wtyczki PlatformIO do programowania STM na frameworku STM32Cube ale nie ma żadnych plików main trzeba je sobie samemu zrobić.
  4. Witam. Programowałem trochę avr, ale przesiadałem się na stm32, avr programowałem w VS Code i lubię to środowisko. Moje pytanie to czy ktoś programuje stm32 w ty środowisku, albo umie je skonfigurować tak żeby można było budować i wgrywać program? Wiem że jest wtyczka do tego ale nie potrafię jej używać. Otwieram folder z projektem wygenerowanym z CubeMX i kiedy daje "buduj" to wychodzą błędu ze brakuje jakiegoś Patha, kiedy dodam wszystko i klikam "buduj" to kompletnie nic się nie dzieję. I jeszcze w programie podkreślone są linijki tak jakby nie wykrywało biblioteki. Ktoś potrafi pomoc, bo w internetach nic konkretnego nie znalazłem co by działało i było zrozumiałe.
  5. po zamianie na __flash wyrzuca mi błędy "oczekiwano na znaku ";"" dla wszystkich 3 linijek const __flash char T1[] = "DS1307"; const __flash char T2[] = "TESTER"; const __flash char * const __flash menu[2] = {T1, T2}; dlaczego? nawet po skopiowaniu linijki ze strony tak jest.
  6. Witam próbuje zrobić proste menu ale zajmuje za dużo pamięci SRAM, dlatego postanowiłem umieścić je w pamięci FLSAH mikrokontroler, niestety nie dział to poprawnie mianowicie nie wyświetla nic albo po kolei wszystkie znaki (krzaki) bez przerwy. kod : const char T1[] PROGMEM = {"DS1307"}; const char T2[] PROGMEM = {"TESTER"}; const char * menu[2] PROGMEM = {T1, T2}; //odczytuje za pomocą: LCD_Write_Text((char *) pgm_read_word_near(& menu[1])); // funkcja wyświetlania bo może tu jest problem void LCD_Write_Text(uint8_t * Text){ while(* Text) Send_Data(* Text++); } dodam że po skasowaniu wszystkich "PROGMEM", a do funkcji wyświetlania wpisania po prostu "menu[0]" działa bez zarzutu. i jeszcze podkreśla mi "pgm........" i wyskakuje problem "nieznana nazwa rejestru r0". Gdzie popełniam błąd. Z góry dzięki za odpowiedz.
×
×
  • Utwórz nowe...