RCC_GetClockFreq함수 역시 이미 구현되어 있다. 그 구조와 원리만 간단하게 이해하도록 하자.


...설명할게 없다. 그냥 사용하면 되는데다 테이블에서 좌표값을 읽어온다.

'중도연재종료 > CORTEX M3' 카테고리의 다른 글

함수표  (0) 2013.06.23
정확한 1초 Delay 구현  (0) 2013.06.23
Clock Control  (0) 2013.06.23
Get Character  (0) 2013.06.14
당분간 정지  (0) 2013.06.14
Posted by 십자성군



대상 : SetSysClockTo72


참조 : RCC_CR


시스템 클럭을 사용하는 방법

1.HSI를 그대로 사용

2.HSE를 그대로 사용

3.PLL을 거쳐서 생성된 클럭을 사용


PLL의 사용에 HSI 또는 HSE를 사용할 수 있으나 정확도의 문제로 향후 USB를 사용하기 위해 외부 클럭 사용을 추천

현재 나의 모듈의 외부클럭은 8MHz 이기 때문에 72MHz를 구하기 위하여 9를 곱해야 한다.


1. Enable HSE(High Speed External)


RCC_CR_HSEON

:HSEON을 1로 만들어 HSE를 Enable로 만든다.(HSE Oscillator ON)


RCC_CR_HSERDY

:HSE oscillator가 사용 가능해졌는지 확인(하드웨어에 의해서 1로 Set)


HSEStartUp_TimeOut

:HSERDY에 대한 time out




2.Flash access Latency


FLASH_ACR_LATENCY_2


3.RCC_CFGR(clock ConFiGuration Register) 

HCLK

PCLK1

PCLK2

ADCCLK 의 4개 클럭이 있다.

주의할 점은 PCLK1의 Max Clock은 36MHz라는것. 따라서 HCLK를 72MHz로 설정한다면 PCLK1은 HCLK/2로 하여 36MHz나 그 이하로 만들어야 한다.


.PLL설정

PLL 소스로 HSE를 사용하면서 곱할 값 설정하자.

PLLMUL, PLLSRC를 설정한다.


PLLSRC : RCC_CFGR_PLLSRC_HSE

PLLMUL : RCC_CFGR_PLLMULL9



PLL ON

PLLON    : PLL enable

PLLRDY  : PLL clock ready flag


SW : System clock switch    (HSI,HSE,PLL중 무엇을 System Clock으로 사용할 것인가 설정)

SWS : System clock switch status    (Switch Status... 플래그같은거?)


위의 설정을 다루어 모듈의 동작은 72MHz로 맞춰진다

이후 USART_Init의 apbclock를 72000000 으로 교체하여 클럭에 맞춘 통신도 가능할 것이다.

'중도연재종료 > CORTEX M3' 카테고리의 다른 글

정확한 1초 Delay 구현  (0) 2013.06.23
RCC_GetClockFreq  (0) 2013.06.23
Get Character  (0) 2013.06.14
당분간 정지  (0) 2013.06.14
UART_ Hello_Wolrd 찍기_2  (0) 2013.06.08
Posted by 십자성군

USART의 RS 스텟을 본다.


#define USART_FLAG_RXNE    ((uint16_t)0x0020)

:Read data register not empty

multi-buffer 통신 등의 상황에서 사용


1은 데이터가 수신되어 읽을 수 있는 상태가 되었다는 것을 의미

0은 데이터가 아직 수신되지 않았다는 의미


RDR shift register[각주:1]가 데이터를 수신하고 이것을 USART_DR register로 옮기게 된다. 모두 옮겨졌을 경우 이 비트가 1이 된다.


rc_w0:read & c_w0

c_w0 : 0을 write함으로써 이 비트는 0으로 clear 된다는 것을 의미

c_w1 : 1을 write함으로써 비트가 0으로 clear 된다.


uint16_t USART_ReceiveData(USART_TypeDef* USARTx)

{

/* Receive Data */

return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);

}

USART_DR레지스터에서 값을 읽어온다.

USART_DR레지스터의 아홉비트만이 의미가 있다.


  1. 어디있냐? [본문으로]

'중도연재종료 > CORTEX M3' 카테고리의 다른 글

RCC_GetClockFreq  (0) 2013.06.23
Clock Control  (0) 2013.06.23
당분간 정지  (0) 2013.06.14
UART_ Hello_Wolrd 찍기_2  (0) 2013.06.08
UART_ Hello World 찍기_1  (0) 2013.06.08
Posted by 십자성군