IAR Embedded Workbench를 사용하여 STM8을 처음 사용하고 STM8S103F3을 사용하려고합니다. C를 사용하여 레지스터를 직접 사용하고 싶습니다. 그물에 수많은 좋은 자습서 및보기가 있기 때문에 나는 14400의 보드, 8N2에 serial를 필요로하고, UART 전송을 얻는 것은 쉽다. 그런 다음 UART가 인터럽트를 받도록해야합니다. 다른 작업은 수행하지 않습니다. 그것이 문제입니다. iostm8s103f3.h에 따르면 (IAR) 실버 라이트 개발자에 따르면,하는 0x14 벡터 UART1_R_IDLE, UART1_R_LBDF, UART1_R_OR, UART1_R_PE, UART1_R_RXNESTM8 인터럽트 직렬 수신
5 개 인터럽트가 다음과 같습니다 STM8에 레지스터,
Vector 19 (0x13) = UART_RX
는 ST에 따르면,이 마이크로 마지막 샘플링 클록 E에 설정된 STM8S 참고서 RM0016 RXNE 플래그 (비어 있지 수신 버퍼)에 따르면
#define UART1_BaseAddress 0x5230
#define UART1_SR_RXNE ((u8)0x20) /*!< Read Data Register Not Empty mask */
#if defined(STM8S208) ||defined(STM8S207) ||defined(STM8S103) ||defined(STM8S903)
#define UART1 ((UART1_TypeDef *) UART1_BaseAddress)
#endif /* (STM8S208) ||(STM8S207) || (STM8S103) || (STM8S903) */
을 STM8S.h dge, ) 데이터가 시프트 레지스터에서 Rx 버퍼로 전송 될 때 발생합니다. SPI_DR 레지스터에서 데이터를 읽을 준비가되었음을 나타냅니다. 수신 버퍼가 비어 있지 않음 (RXNE) 이 플래그가 설정되면 수신 버퍼에 수신 된 유효한 데이터가 있음을 나타냅니다. 이 플래그는 SPI_DR을 읽을 때 재설정됩니다. 그럼 내가 쓴 :
#pragma vector = UART1_R_RXNE_vector //as iostm8s103f3 is used, that means 0x14
__interrupt void UART1_IRQHandler(void)
{ unsigned character recd;
recd = UART1_SR;
if(1 == UART1_SR_RXNE) recd = UART1_DR;
등 좋은, 내가 지속적으로 인터럽트를 얻을 UART1_SR_RXNE 설정하지만, UART1_DR 은 비어 있으며 더 UART가 일어난받을 수 없습니다. 다른 모든 인터럽트를 비활성화했습니다. 나는 이것이 벡터 일 수 있다는 것을 알 수 있습니다. 또한 SPI는이 플래그를 설정합니다. 아마도 UART와 SPI는 과 함께 사용할 수 없습니다. 이 직렬 수신 인터럽트가 필요합니다. 도와주세요. 감사합니다.