stm32f103 / usart / usart interrupt
USART Polling 방식은 이전의 포스팅에서 구현을 했으니
이번엔 Interrupt 방식을 구현 할 차례이다.
쿼드콥터의 제어 코드가 돌아가는 중에 조종 데이터를 전송 받아야 하니
Polling 방식은 부적절 하다고 볼 수 있다.
그래서 Interrupt 방식의 USART 통신을 구현해야 한다.
#include "stm32f10x_conf.h"
//stm32f10x_conf.h 파일에는 필요한 각종 헤더를 포함시키는 코드를 삽입
//stm32f10x_gpio.h ~_usart.h ~_rcc.h
//misc.h
void USART2_IRQHandler(void);
int putchar(int ch);
u16 tmp;
int main()
{
SystemInit();
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USARTx_Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
/* Main While Loop */
while(1)
{
while(!USART_GetFlagStatus(USART2, USART_FLAG_TXE));
USART_SendData(USART2, 'A');
}
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_SendData(USART2, 'B');
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
}
테스트 할 당시 USART2에 연결한 블루투스로 테스트하고 구현한 소스
USART2 채널을 통해 A라는 글자가 무한히 출력되다가 USART2에 아무 input을 주게 되면 순간 B라는 글자가 출력됨
USARTx_IRQHandler 안의 구현하는 내용에 따라 다양하게 응용이 가능
다른 USART채널을 사용하려면 USART2라고 되어 있는 부분을 사용하고 싶은 USART 채널로 고치고 몇 부분만 더 고치면 사용 가능함
첨부 파일 : 구현한 프로젝트와 개인적으로 사용하려고 편집한 USART 헤더 파일
수정 및 배포 가능
2014 / 02 / 19 - 20:04 최초 작성
2014 / 02 / 19 - 20:14 SyntaxHighlighter 적용
2014 / 02 / 20 - 01:36 태그 정리
ATmega128 MPU6050 (18) | 2014.03.18 |
---|---|
Getting Start STM32F103 Dev (0) | 2014.02.28 |
STM32F103 - QuadCopter 참고 소스 (0) | 2014.02.19 |
STM32F103 - PWM 소스 (0) | 2014.02.19 |
FB155BC 설정 with USB2UART Downloader (0) | 2014.02.19 |