STM32F0 in clock

Vse kar je v povezavi z ARM-Cotrex-M procesorji. Sem spada tako HW kot SW.

Moderator: tilz0R

STM32F0 in clock

OdgovorNapisal/-a zanka » 10 Apr 2018, 09:46

Procesor 072 skušam spraviti na 48MHz, vendar ko dal PLL mnogokratnik (PLLMUL) na 12 tu in tam dobim HardFault, na 11 še deluje. Izvor za PLL (PLLSRC) je privzet (HSI/2), torej 4 MHz. CubeMX pri takšni nastavitvi ne javi napake, čeprav pa ravno nima na izbiro te možnosti HSI/2 kot jo ponuja register.

RCC->CFGR &= ~RCC_CFGR_PLLSRC;
RCC->CFGR &= ~RCC_CFGR_PLLMUL;
RCC->CFGR |= RCC_CFGR_PLLMUL11;
RCC->CR |= RCC_CR_PLLON;
while (!(RCC->CR & RCC_CR_PLLRDY));
RCC->CFGR |= RCC_CFGR_SW_PLL;
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);

Če namesto 11 dam 12, mi LED več ne utripa. Včasih se ustavi pri nastavljanju OSPEEDR. Včasih pa gre naprej in utripa.

Celotna koda s katero se igram je
Koda: Izberi vse
#include <stdint.h>
#include "cmsis/stm32f072xb.h"

void on(void) {
  GPIOA->BSRR = GPIO_BSRR_BS_5;
}

void off(void) {
  GPIOA->BSRR = GPIO_BSRR_BR_5;
}

static void _delay_ms(uint16_t ms)
{
  TIM6->ARR = ms - 1;
  TIM6->CR1 = TIM_CR1_CEN;
  while(!(TIM6->SR & TIM_SR_UIF));
  TIM6->CR1 &= ~TIM_CR1_CEN;
  TIM6->SR &= ~TIM_SR_UIF;
}

void _clock_pll48mhz(void)
{
  RCC->CFGR &= ~RCC_CFGR_SW;
  RCC->CR &= ~RCC_CR_PLLON;
  RCC->CFGR &= ~RCC_CFGR_PLLSRC;
  RCC->CFGR &= ~RCC_CFGR_PLLMUL;
  RCC->CFGR |= RCC_CFGR_PLLMUL12;
  RCC->CR |= RCC_CR_PLLON;
  while (!(RCC->CR & RCC_CR_PLLRDY));
  RCC->CFGR |= RCC_CFGR_SW_PLL;
  while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);
  //RCC->CFGR |= RCC_CFGR_HPRE_DIV2;
  FLASH->ACR = FLASH_ACR_LATENCY;
}

int main(void)
{
  _clock_pll48mhz();

  RCC->APB1ENR = RCC_APB1ENR_TIM6EN;
  TIM6->PSC = 7999;

  RCC->AHBENR = RCC_AHBENR_GPIOAEN;

  GPIOA->MODER &= ~GPIO_MODER_MODER5;
  GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEEDR5;
  GPIOA->MODER |= GPIO_MODER_MODER5_0;

  while (1) {

    on();
    _delay_ms(1000);

    off();
    _delay_ms(1000);

  }

  return 0;
}
Uporabniški avatar
zanka
 
Prispevkov: 1566
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 83 krat
Prejel zahvalo: 138 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 26

Re: STM32F0 in clock

OdgovorNapisal/-a Kroko » 10 Apr 2018, 09:58

Zakaj za izvor ne uporabiš kar HSI48?
http://www.planet-cnc.comKroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 3845
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 610 krat
Prejel zahvalo: 1225 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 225

Re: STM32F0 in clock

OdgovorNapisal/-a zanka » 10 Apr 2018, 10:10

Zato ker mi tudi ta ne deluje. Najprej sem si zaželel HSI48 pa sem šel s PLL do koliko pridem.
Koda: Izberi vse
  RCC->CFGR &= ~RCC_CFGR_SW;
  RCC->CR2 |= RCC_CR2_HSI48ON;
  while (!(RCC->CR2 & RCC_CR2_HSI48RDY));
  RCC->CFGR &= ~RCC_CFGR_SW;
  RCC->CFGR |= RCC_CFGR_SW_HSI48;
  while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI48);
Uporabniški avatar
zanka
 
Prispevkov: 1566
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 83 krat
Prejel zahvalo: 138 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 26

Re: STM32F0 in clock

OdgovorNapisal/-a tilz0R » 10 Apr 2018, 10:18

Najprej nastavi flash latency, potem PLL.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1334
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 178 krat
Prejel zahvalo: 323 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32F0 in clock

OdgovorNapisal/-a zanka » 10 Apr 2018, 10:31

No, to pa je rešitev in tudi HSI48 sedaj deluje. :D

Je pa zanimivo, da je do 44 MHz delovalo, na 48 MHz pa več ne, čeprav naj bi FLASH deloval le do 24 MHz.
Uporabniški avatar
zanka
 
Prispevkov: 1566
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 83 krat
Prejel zahvalo: 138 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 26

Re: STM32F0 in clock

OdgovorNapisal/-a tilz0R » 10 Apr 2018, 10:41

zanka je napisal/-a:Je pa zanimivo, da je do 44 MHz delovalo, na 48 MHz pa več ne, čeprav naj bi FLASH deloval le do 24 MHz.

Bil si izven specs-ov in zelo lucky. Pri katerem drugem bi pa falilo že pri 25MHz.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1334
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 178 krat
Prejel zahvalo: 323 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255


Vrni se na ARM-Cortex-M

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 0 gostov