Я новичок в STM8 и пытаюсь использовать STM8S103F3, используя IAR Embedded Workbench. Используя C, я хотел бы использовать регистры напрямую. Мне нужен серийный номер на 14400 бодах, 8N2, и получить передачу UART легко, так как в сети есть множество хороших учебников и примеров. Тогда необходимо, чтобы UART получил прерывание, ничего больше не будет. В этом проблема. Согласно iostm8s103f3.h (ИАР) есть 5 прерываний на 0x14 вектора UART1_R_IDLE, UART1_R_LBDF, UART1_R_OR, UART1_R_PE, UART1_R_RXNESTM8 прерывание последовательного приема
В соответствии с Silverlight Developer: Регистры на STM8,
Vector 19 (0x13) = UART_RX
В соответствии с ST Микроэлектроника STM8S.h
#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 Справочное руководство RM0016 RXNE флаг (Rx буфер не пуст) установлен на последней выборки часов е dge, , когда данные передаются из регистра сдвига в буфер Rx. Указывает, что данные готовы к чтению из регистра SPI_DR. Rx buffer not empty (RXNE) При установке этот флаг указывает, что в Rx-буфере есть допустимые принятые данные. Этот флаг сбрасывается при чтении 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 не могут использоваться вместе . Мне очень нужно, чтобы это последовательное прерывание приема принималось. Пожалуйста помоги. Спасибо