STM8S에서 UART를 동기 모드로 변경하고 이를 이용해 SPI 송신을 구현해 보았다.

 

 

 

    //동기 USART 설정 함..
    UART1_DeInit();
    UART1_Init((uint32_t)400000, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
              (UART1_SyncMode_TypeDef)(UART1_SYNCMODE_CLOCK_ENABLE |

               UART1_SYNCMODE_CPOL_HIGH |UART1_SYNCMODE_CPHA_MIDDLE | 

               UART1_SYNCMODE_LASTBIT_ENABLE),
               UART1_MODE_TXRX_ENABLE);

 

    /* Enable the UART1*/
    UART1_Cmd(ENABLE);

 

 

 

400000 은 SPI의 전송 속도

(UART1_SyncMode_TypeDef)(UART1_SYNCMODE_CLOCK_ENABLE | UART1_SYNCMODE_CPOL_HIGH |UART1_SYNCMODE_CPHA_MIDDLE | UART1_SYNCMODE_LASTBIT_ENABLE) 문장에서 SPI의 모드를 설정 한다.

 

 

 

  char data;

 

  UART1_SendData8( data );
  /* Wait until end of transmit */
  while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET)
  {
  }

 

 

인터럽트를 사용하지 않고 전송하는 예다.

 

 

 

'공부 > STM8' 카테고리의 다른 글

STVP 와 ST-LINK 를 이용한 STM8S 양산  (2) 2013.01.03
STM8S 개발및 양산 환경  (0) 2013.01.02
STM8S slave SPI 살리기 및 인터럽트 살리기  (0) 2013.01.02
ST-LINK/V2 에 바리스터 달기  (7) 2012.12.27
[STM8] STM8 살펴 보기  (0) 2012.11.13

 

STM8S의 SPI를 slave 로 살려 보았다.

 

 

 

SPI_DeInit();
/* Initialize SPI in Slave mode */
SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_SLAVE, SPI_CLOCKPOLARITY_LOW,
SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,(uint8_t)0x07);

 

 

 

SPI_MODE_SLAVE 로 선언 하면 된다.

SPI_CLOCKPOLARITY_LOW,SPI_CLOCKPHASE_2EDGE 로 SPI의 mode 를 선언하면 된다.

 

 

   

SPI_ITConfig(SPI_IT_RXNE,ENABLE);

 

 SPI_ITConfig 문을 이용해 인터럽트를 살린다.

 SPI_IT_RXNE 는 수신 완료시 인터럽트 사용 이다.

 

 

INTERRUPT_HANDLER(SPI_IRQHandler, 10)
{
    SPI_Process();
}

 

인터인터럽트 루틴이다. SPI_Process()에서 처리하도록 했다.

 

 

void SPI_Process(void)
{
    char  ch;
 
    if (SPI_GetFlagStatus(SPI_FLAG_RXNE)==SET)
    {
        /*received the command*/
        ch = SPI_ReceiveData();

        ....

    }
}

 

 

RX 수신 인터럽트 flag가 있으면 DATA를 읽도록 했다.

 

이래서 Slave 모드에서 수신 인터럽트를 살렸다.

 

 

'공부 > STM8' 카테고리의 다른 글

STM8S 개발및 양산 환경  (0) 2013.01.02
STM8S에서 Uart 동기통신을 이용한 SPI 전송  (0) 2013.01.02
ST-LINK/V2 에 바리스터 달기  (7) 2012.12.27
[STM8] STM8 살펴 보기  (0) 2012.11.13
[STM8L] 참고회로  (0) 2012.11.12

ST-LINK/V2  를 하나 가지고 있었는데 정전기를 먹더니 죽어 버렸다.

USB 는 붇는데 케이스를 열어서 보니 CPU에 열이 났다.

 

A/S를 확인해 보니 그것도 어려워서 결국 한개를 더 샀다.

이번에는 혹시나 하는 마음에 보드에 바리스터를 추가 했다.

 

몇번 정전기를 먹긴했는데 아직 죽지는 않았다.

그래서 해당 사진을 공개해 본다.

 

 

 

 

2013년 1월 실험중에 또 죽어 버렸다. CPU는 정상동작하는 것으로 보이고 아마도 I/O 쪽이 죽은듯 했다. 드래서 DATA가 왔다 갔다하는

I/O 쪽에 추가로 바리스터를 달았다.  이제 안 죽길 바란다...

 

 

 

 

 

 

'공부 > STM8' 카테고리의 다른 글

STM8S에서 Uart 동기통신을 이용한 SPI 전송  (0) 2013.01.02
STM8S slave SPI 살리기 및 인터럽트 살리기  (0) 2013.01.02
[STM8] STM8 살펴 보기  (0) 2012.11.13
[STM8L] 참고회로  (0) 2012.11.12
STM8 관련 국내 사이트  (0) 2012.11.12

이번에는 STM8을 살며시 살펴 보고자 한다.

 

설명 :

 

stm8s.pdf

 

 

표준 라이브러리 :

 

STM8S_StdPeriph_Driver.zip

 

 

표준 라이브러리및 기타 설명 :

 

stm8s-a_stdperiph_lib_um.zip

 

 

예제 소스 :

 

STM8S_StdPeriph_Examples.zip

 

 

셈플 회로도 :

 

'공부 > STM8' 카테고리의 다른 글

STM8S slave SPI 살리기 및 인터럽트 살리기  (0) 2013.01.02
ST-LINK/V2 에 바리스터 달기  (7) 2012.12.27
[STM8L] 참고회로  (0) 2012.11.12
STM8 관련 국내 사이트  (0) 2012.11.12
[STM8] STM8L 해보기 6  (3) 2012.11.12

 

STM8L 참고회로

 

 

(참고) ST-LINK의 PIN 내용

'공부 > STM8' 카테고리의 다른 글

ST-LINK/V2 에 바리스터 달기  (7) 2012.12.27
[STM8] STM8 살펴 보기  (0) 2012.11.13
STM8 관련 국내 사이트  (0) 2012.11.12
[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 5  (0) 2012.11.12

ST Visual Develop 에서 컴파일 하려면 Cosmic 컴파일러를 깔아야 하는데 그에 관련된 내용이 있는 카페

http://cafe.naver.com/rtboss/101

 

그 외에 좋은 내용이 많습니다.

 

제가 설명 못한 bootloader에서 시리얼을 이용해 다운로드 하는 방법

http://cafe.naver.com/fwdh/80

 

 

 

 

'공부 > STM8' 카테고리의 다른 글

[STM8] STM8 살펴 보기  (0) 2012.11.13
[STM8L] 참고회로  (0) 2012.11.12
[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 5  (0) 2012.11.12
[STM8] STM8L 해보기 4  (0) 2012.11.12

STM8L 해보기 6

약간의 소스 설명을 해보고자 한다.

 

1. Main 에서 먼저 해야 할 것은 GPIO를 선언하는 것이다.

GPIO 선언부를 확인해 보자

#define BUTTON_SW1_GPIO_PORT GPIOC

#define BUTTON_SW1_GPIO_PIN GPIO_Pin_5

GPIO_Init( BUTTON_SW1_GPIO_PORT, BUTTON_SW1_GPIO_PIN, GPIO_Mode_In_PU_IT);

GPIOC 에 PIN5번이 pullup으로 설정된 인터럽트 가능한 입력 포트로 설정된 것이다.

 

또 다른 GPIO 선언부를 확인해 보면

#define LED_GREEN_PORT        GPIOB

#define LED_GREEN_PIN        GPIO_Pin_1

GPIO_Init( LED_GREEN_PORT, LED_GREEN_PIN, GPIO_Mode_Out_PP_High_Fast);

GPIOB 에 PIN1번이 pullup으로 설정된 출력 포트로 설정된 것이다.

 

실제 사용 예를 보면

// GPIO_LOW(a,b)        a->ODR&=~b

GPIO_LOW(LED_GREEN_PORT,LED_GREEN_PIN);

 

2. Clock 를 선언한다.

내부 또는 외부 Clock 을 선언 할 수 있는데 처음 BOOT 하면 내부 Clock 사용으로 선택 되고 16M의 8분주로 2MHz로 동작 된다.

이후 만약 내부 클럭 최대 속도로 동작하려면

CLK_SYSCLKSourceSwitchCmd(ENABLE);

CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); // system clock prescaler: 1

while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI) {}

내부 클럭 HIS로 선언하고 prescaler을 1로 선언해서 최대 속도로 동작한다.

설정이 완료된 후 안정화 될 때까지 기다린다.

 

만약 내부 클럭 최저 속도로 동작하려면

CLK_SYSCLKSourceSwitchCmd(ENABLE);

CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_128); // system clock prescaler: 1

while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI) {}

내부 클럭 HIS로 선언하고 prescaler을 128로 선언해서 최소 속도로 동작한다.

설정이 완료된 후 안정화 될 때까지 기다린다.

 

3. 인터럽트를 선언한다.

EXTI_SetPinSensitivity(EXTI_Pin_0, EXTI_Trigger_Falling);

enableInterrupts();    //EA enable

PIN0에 해당하는 I/O중 GPIO_Mode_In_PU_IT 로 선언된 포트에 에지가 Trigger_Falling 으로 입력되면 인터럽트가 발생 하게 된다.

 

인터럽트가 동작되는 곳은

INTERRUPT_HANDLER(EXTI0_IRQHandler,8) 에 있다.

 

4. 다른 동작을 한다.

실제 운영을 위해 동작을 하면 된다.

 

이로서 간단하게 STM8L을 살펴보았다.

예제 소스가 필요하다면 Comment에 메일 주소를 달아 주면 보내드리도록 하겠다. -> 하드디스크 문제로 소스가 분실되었습니다.^.^

사실 타이머,ADC등 다양한 내용이 많으나 stm8l15x_stdperiph_lib_um.chm에 들어있는 예제 만큼 잘 설명 할 수 없을 듯 하다. 문서 참 잘 만들었다.

 

예제 소스

um0774.zip

 

예제 회로

1265357684.pdf

 

 

'공부 > STM8' 카테고리의 다른 글

[STM8L] 참고회로  (0) 2012.11.12
STM8 관련 국내 사이트  (0) 2012.11.12
[STM8] STM8L 해보기 5  (0) 2012.11.12
[STM8] STM8L 해보기 4  (0) 2012.11.12
[STM8] STM8L 해보기 3  (0) 2012.11.12

 

STM8L 해보기 5

 

IAR 정의 파일을 확인 해 보겠다.

 

 

Discover-Debug 메뉴가 있는 곳에서 오른쪽 마우스를 누르면 Option 메뉴가 나온다.

 

 

Option 을 선택 하면 여러 가지 메뉴가 나오는데 중요한 순서대로 정리해보겠다.

Target에서 MCU 종류를 고르고 Code와 Data model을 고른다.

출력 파일 디렉토리를 고른다.

Library를 어떻게 쓸 것인지 정의 한다.

Printf와 Scanf를 어떻게 쓸 것인지 정의 .. 이 함수를 사용 안 할 예정이어서 Small 로 지정 예를 들어 Printf를 많이 써야 한다면 Full 등으로 변경해야 한다.

컴파일러에서 사용한 Stack 과 Heap 을 조정한다. 함수를 많이 쓰거나 내부 변수를 많이 쓸경우 Stack를 늘려주는 것이 좋고 malloc 등을 사용한다면 Heap 을 늘리는 것이 좋다.

주의 할 것은 printf등 일부 함수는 자체적으로 malloc 를 사용하므로 이런 함수 사용시 Heap용량에 주의 해야 한다.

 

C,C++ 사용과 그에 대한 Option을 선택 한다.

압축율을 결정한다.

사용중인 라이브러리의 define header의 위치를 결정해 준다.

Linker 에서 Config의 경우 따로 정의 파일을 사용할 경우 설정해주고 사용 안 하면 정의 하지 않는다.

디버깅용으로 사용한 Tool을 선택 해준다. ST-LINK를 선택 했다.

'공부 > STM8' 카테고리의 다른 글

STM8 관련 국내 사이트  (0) 2012.11.12
[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 4  (0) 2012.11.12
[STM8] STM8L 해보기 3  (0) 2012.11.12
[STM8] STM8L 해보기 2  (0) 2012.11.12

+ Recent posts