0
Γεια σας,
εδώ και δύο μέρες προσπαθώ να βρώ γιατί τα πίνς δεν αλλάζουν κατάσταση γρηγορότερα απο 2 MHZ και δεν βγάζω άκρη. Δεν έχω καταφέρει μεγαλύτερη ταχύτητα απο 2 MHZ και θέλω την συμβολή σας.
Το System clock είναι στα 32 MHZ και για επαλήθευση ρύθμισα το pin MCO ως έξοδο του system clock και μέτρησα ταχύτητα 32 MHZ. Όλα καλά μέχρι εδώ.
οι ρυθμίσεις για τα υπόλοιπα είναι οι εξής:Κώδικας:RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
δηλαδή όλα τα είναι ρυθμισμένα στην μονάδα.Κώδικας:RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
παρακάτω είναι το κομάτι απο το datasheet που αναφέρει ότι η GPIO είναι συνδεμένη με τον ρολόι AHB. Στην περιπτωσή μου 32 MHZ γιατί δεν έχω divider.
οπότε περιμένω μια συχνότητα στην GPIO γύρω στα 16 ΜΗΖ το μισό του AHB clock, επειδή σε κάθε χτύπο αλάζει κατάσταση, οπότε απο HIGH σε LOW θέλει δύο χτύπους, άρα 16 ΜΗΖ σήμα.Output configuration
When the I/O port is programmed as output:
β’
The output buffer is enabled:
β
Open drain mode: A β0β in the Output register activates the N-MOS whereas a β1β
in the Output register leaves the port
in Hi-Z (the P-MOS is never activated)
β
Push-pull mode: A β0β in the Output register activates the N-MOS whereas a β1β in
the Output register activates the P-MOS
β’
The Schmitt trigger
input is activated
β’
The weak pull-up and pull-down resistors are activated or not depending on the value
in the GPIOx_PUPDR register
β’
The data present on the I/O pin are sampled into the input data register every AHB
clock cycle
ακολουθούν και οι ρυθμίσεις της GPIO :
και κάνω την μέτρηση με τον παλμογράφο, 2 ΜΗΖ, με το logic analyzer, τα ίδια.Κώδικας:GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); __HAL_RCC_GPIOA_CLK_ENABLE();
Μπορεί κανείς να με βοηθήσει; να το προσπαθήσει και στον δικό του μικροελεγκτή;