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;
}