본문 바로가기
WORK/HARDWARE

STM8L151x USART, TIMER1, TIMER2

by KANG Stroy 2017. 4. 12.
728x90
728x90

STM8L151 제품에 대한 프로그램 관련 부분을 정리 합니다. 


소스는 STM에서 제공되는 예제를 이용 합니다. 


en.stsw-stm8016_exe.7z.001

en.stsw-stm8016_exe.7z.002


압축 파일이 티스토리에 올리기에는 크기 때문에 2개를 나누었습니다. 

2개를 다운 받으신 후 압축을 푸세요 


여기서 라이브러를 가져와서 사용 합니다. 


프로젝트를 만드는 부분은 다른곳을 찾아 보시기 바라면서. 

ST에서 제공되는 컴파일러를 사용 하였습니다. 



핀은 다음과 같이 설정 합니다. I2C는 설명하지 않을겁니다. 

제목처럼 USART1, TIMER1, TIMER2 를 설명 합니다. 


외부 인터럽트에 의한 카운터가 아닌 캡쳐를 이용 하였습니다. 


소스는 다음과 같습니다. 


Clock Setting 

{

// 클럭 셋팅 

CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE); /* Timer1 clock Enable */ 

CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE); /* Timer4 clock Enable */ 

CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);         /* Uart clock Enable */

CLK_PeripheralClockConfig(CLK_Peripheral_I2C1, ENABLE); /* I2C  clock Enable */

CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);

CLK_PeripheralClockConfig(CLK_Peripheral_RTC,  ENABLE);


// 외부 클럭 사용 
CLK_SYSCLKSourceSwitchCmd(ENABLE);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE)
{}

// S/W 인터럽트 설정 - Up to 4 software programmable 
ITC_SetSoftwarePriority(USART1_RX_IRQn, ITC_PriorityLevel_1);
ITC_SetSoftwarePriority(TIM1_CC_IRQn, ITC_PriorityLevel_3);
ITC_SetSoftwarePriority(TIM2_CC_IRQn, ITC_PriorityLevel_0);
}

S/W 인터럽트는 4개만 사용이 가능 합니다. 


TImer1 Setting

{

TIM1_TimeBaseInit(TIM1_PRESCALER, TIM1_CounterMode_Up,                                                                 TIM1_PERIOD, TIM1_REPTETION_COUNTER);


TIM1_ITConfig(TIM1_IT_Update, ENABLE);


TIM1_Cmd(ENABLE);

}


Timer2 Setting

{

TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up, 125);

TIM2_UpdateRequestConfig(TIM2_UpdateSource_Global);


// Timer2 Start Enable 

TIM2_ITConfig(TIM2_IT_Update, ENABLE);

TIM2_Cmd(ENABLE);

}


USART1 Setting 

{

USART_DeInit(USART1);


USART_Init(USART1, (uint32_t)115200, USART_WordLength_8b, USART_StopBits_1,

USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx));


/* Enable general interrupts TX */

GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_3, ENABLE);   


/* Configure USART Rx as alternate function push-pull  (software pull up)*/

GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2, ENABLE);


/* Enable the USART Receive interrupt: this interrupt is generated when the USART

receive data register is not empty */

USART_ClearITPendingBit(USART1,USART_IT_RXNE);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

/* Enable the USART Transmit complete interrupt: this interrupt is generated when the USART

transmit Shift Register is empty */

USART_ClearITPendingBit(USART1,USART_IT_TXE);    

USART_ITConfig(USART1, USART_IT_TC, ENABLE);


/* Enable USART */

USART_Cmd(USART1, ENABLE);

}


GPIOx Setting 

{

GPIO_DeInit(GPIOA);

GPIO_DeInit(GPIOB);

GPIO_DeInit(GPIOC);

GPIO_DeInit(GPIOD);

GPIO_DeInit(GPIOE);


// x 는 ABCDE , xx 는 1~7까지 포트 

GPIO_Init(GPIOx, GPIO_Pin_xx, GPIO_Mode_Out_PP_Low_Fast);

}

Main 문에 위에 셋팅 된 부분을 넣습니다. 

첫 부분에 첨부 된 예제 파일에서 Stm8l15x_it.c  / Stm8l15x_it.h 파일을 찾습니다.  

예제 폴더 아무곳이나 선택 
STM8L15x-16x-05x-AL31-L_StdPeriph_Lib\Project\STM8L15x_StdPeriph_Examples\xxxx 

INTERRUPT_HANDLER(TIM2_CC_USART2_RX_IRQHandler, 20)
{
// Timer2 Do it 
}

INTERRUPT_HANDLER(TIM1_CC_IRQHandler, 24)
{
// Timer1 Do it  
}

INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler, 28)
{
// USART1 Do it 
}

위의 인터럽트 부분으로 날아 오게 됩니다. 


처리 하고자 하는 부분을 넣어 주세요 

728x90

'WORK > HARDWARE' 카테고리의 다른 글

STM8L STM32F EVB  (0) 2017.04.21
블루투스 자료 모음  (0) 2017.04.20
CLK 구형파 만들기  (0) 2017.03.29
pspice Orcad 구형파 만들기  (0) 2017.03.28
orcad VSIN 설정  (0) 2017.03.24

댓글