Skocz do zawartości

KrzyMr

Użytkownicy
  • Zawartość

    7
  • Rejestracja

  • Ostatnio

Posty napisane przez KrzyMr

  1. Witam

    Pewnie banalne pytanie ale nie mam pojęcia jak to zrobić.

    Mianowicie potrzebuje ustawić piny USART2 czyli PA2 i PA3 jako zwykłe wyjścia, ustawiam to w CubeMx, w programie pisze żeby zmieniała stan co 500ms, dla kontroli robię to samo dla wbudowanej diodzie na płytce, oczywiście do PA2 też podłączam diode led, i tutaj jest koniec ponieważ dioda nie miga.

    Co mam zrobić jeszcze żeby to ustawić tak jak ma być?

  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. 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. 

  4. 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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.