Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
STM32 generic board
#81
Da nije taj izlaz mozda open drain ?
Reply
#82
Pa ja sam ga konfigurisao kao push-pull, jedino ako je dioda vezana na open-drain bez mogućnosti da se promeni to.
Reply
#83
@progster

Taj primer sto si poterao, LED se togluje kroz petlju, koliko brzo to ispada, imas osciloskop, jel si merio brzinu?
Reply
#84
A što misliš da se togluje?
On svaki put postavi pin na 1 (upiše 1 u BSRR), ne bi trebalo da ga togluje uopšte. Mislim nije moje pitanje ni bilo vezano za petlju, moglo je ovo da stoji i van petlje: GPIOC->BSRR = (1<<13), zar ne?
Reply
#85
Prevideo sam, da setuje se jedno stanje, probaj da toglujes, interesuje me brzina izvrsavanja kad se tako "direktno" obraca registrima.
Reply
#86
Evo, direktna promena na ODR. Smile

Reply
#87
Da na to sam mislio, to ispada oko 1.4MHz ...
Slicni rezultati se dobiju i sa HAL bibliotekama, moguce da taj PC13 pin nije merodavan za ovo testiranje, tehnicki bi trebalo to dosta brze da ispadne.
ARM ima drugu postavku u odnosu na PIC, tu AHA i AHB ima ulogu jer se oni posebno klokuju ...
Reply
#88
Ovo je PB13, ne PC13. Smile
I ja sam očekivao dosta brži rezultat...
Reply
#89
Ako te ne mrzi probaj to isto na nekom pinu sa B porta.

Update, aha to si ustvari i probao ... cudno malo ...
Reply
#90
Sličan rezultat se dobija i za B0, B14, sve u okolini 1.3Mhz
Reply
#91
Kada se koristi npr SPI port, znam da moze da se "odsrafi" na par desetina MHz ali iza toga je totalno drugi mehanizam funkcionisanja ...
Reply
#92
Evo napretka, ukoliko se izbaci bitska operacija ^=, i radi direktno sa BSRR i BSR (ili samo BSRR), dobije se oko 3.8Mhz, ali signal nije simetričan.
Reply
#93
Upravo tako. Dobijao sam max. oko tih 3.8MHz na pinu bluePill.
A na šemi ćeš već videti da se LED na PC13 vuče na dole kroz 510R.
Reply
#94
Evo šta sam ja uspeo da dobijem pomoću tajmera (clock je 72Mhz, urađeno preskaliranje sa 2 za tajmer):


Bez preskaliranja je lošiji rezultat, ali je brzina zavidna. Smile





Mada, kad se pogleda uređaj koji se koristi za generisanje, i frekvencija, ovo je još i odlično. Smile
Reply
#95
36Mhz, više ni teorijski ne može. Smile
Reply
#96
Super, samo nam kazi jos kako si to uspeo? Smile
Reply
#97
Pre dvadesetak dana mi je trebao ticker reda 1-100uS (miksovao sam HAL i cmsis lib.) i ovako sam ga napravio (poslednja podešenost je na 100uS).

Evo bitnog dela koda u vezi tog:

Code:
#define LedToggle() HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13)
#define Led(x) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, (x))

void SetupTimer3isr(void){
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;

    TIM3->PSC = 0;         // Set prescaler (PSC + 1)//oko 100uS
    TIM3->ARR = 7240;           // Auto reload value
    TIM3->DIER = TIM_DIER_UIE; // Enable update interrupt (timer level)
    TIM3->CR1 = TIM_CR1_CEN;   // Enable timer

    NVIC_EnableIRQ(TIM3_IRQn); // Enable interrupt from TIM3 (NVIC level)
    HAL_NVIC_SetPriority(TIM3_IRQn, 1, 1);
}

void TIM3_IRQHandler(void)//oko 100uS trenutno
{
    if(TIM3->SR & TIM_SR_UIF){ // if UIF flag is set
        TIM3->SR &= ~TIM_SR_UIF; // clear UIF flag

         LedToggle();
    }
}

Nisam imao potrebe za kraćim vremenima. Inače u data od stm32f1xx piše da je maksimalna moguća brzina nekih in/out pinova 50MHz (svakako sa krajnje minimalnim C opterećenjem) i nemam razloga da im ne verujem.

U realnom svetu je bez terminacije čak i kratkih vodova i sa veoma malim C i L teretom, upotrebljivo nešto do možda 25MHz...

Vidiš i sam razne "zmije" koje se na samoj sondi skopa javljaju zbog njene RLC karakteristike.

Stavi na red sa sondom x10 bar par stotina neinduktivnih oma i imaćeš bolji uvid u stvarni talasni oblik na pinu.

P.S. Inače, GPIOs i Timer1 su na APB2, tj. na PCLK2 koji može do svih 72MHz. Moguće je da se možda pomoću timer1 može dostići tih njihovih 50MHz...
Reply
#98
Code:
int main() {

//clocke enable
   RCC->APB2ENR |= (RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN);
   RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
 
//GPIOA_pin6 alternate output push_pull
   GPIOA->CRL |= ((1<<24) | (1<<25));
   GPIOA->CRL |= GPIO_CRL_CNF6_1;
   GPIOA->CRL &= ~GPIO_CRL_CNF6_0;

//GPIOA_pin7 alternate output push_pull
   GPIOA->CRL |= ((1<<28) | (1<<29));
   GPIOA->CRL |= GPIO_CRL_CNF7_1;
   GPIOA->CRL &= ~GPIO_CRL_CNF7_0;
   
//TIM3 config
   TIM3->PSC = 0; //prescaler
   TIM3->ARR = 1; //autoreload
   TIM3->CCR1 = 1; //capture registar
 
//PWM mod
   TIM3->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;

//capture enable
   TIM3->CCER = TIM_CCER_CC1E;

//TIM3 enable
   TIM3->CR1 = TIM_CR1_CEN;
}

Običan PWM, ništa pametno. Smile
Samo mi palo na pamet da testiram koliko može da ide, ako budem radio sa TIM1, okačiću.
Macola je u pravu, ovo je TIM3, on je na APB1, koji je ograničen na 36MHZ, sa TIM1 koji je na APB2 sigurno da može da se ide do 72MHZ, samo je pitanje koliko je to upotrebljivo.
Reply
#99
Pitam zbog drugih stvari, SPI memorije, pojedine mogu da se klokuju do preko 100MHz, takve memorije obicno idu odmah tu uz procesor pa nisu toliko izrazeni problemi oko vodova koji ih povezuju.
Reply
Drastično poboljšanje sa običnim metal-film otpornikom od 100R.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)