오늘 또 식겁? 했다.
분명이 두달전에 파생된 펌웨어는 통신이 잘 되는데!!!
원본 펌웨어는 쓰레기 값이 자꾸만 수신된다.
PC에서 송신하면 STM32에서 계속 다른 응답이 전방에 섞여서 왔다.
왜! 왜!
결국 파생된 소스와 원본을 면밀히 검토한 결과 상수 RESET 의 문제였다.
종종 아래의 코드처럼 KEY 값을 정의한다.
9번 값이 보이시는가?
특정 조합을 누르면 SoftReset을 하려고 만든게 화근!
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
#define ENTER 5
#define CANCEL 6
#define RESET 9
#define ON 1
#define OFF 0
9번으로 인하 아래 코드에 영향을 받았다.
따라서 수신 인터럽트를 처리하러 왔다가.
송신까지 건들게 되는게 원인이었다.
void USART2_IRQHandler(void) // RS232
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
/* Read one byte from the receive data register */
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
RxBuffer2[RxHead2++] = USART_ReceiveData(USART2);
if(RxHead2 == MAX_RX2_BUFFER_SIZE) RxHead2 = 0;
}
if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
{
/* Write one byte to the transmit data register */
USART_SendData(USART2, TxBuffer2[TxTail2++]);
if(TxTail2 == MAX_TX2_BUFFER_SIZE) TxTail2 = 0;
if(TxTail2 == TxHead2)
{
/* Disable the USARTz Transmit interrupt */
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
}
}
}
다음에는 같은 실수 반복하지 말자!