用的芯片是STM8S103F3. 使用串口1,内部时钟,查询发送,中断或者查询接收 疑问:STM8的管教复用是不是,你配置了串口,那么相应的两个管脚IO就自动成为RXD和TXD? 现在的把收发两个管脚直接短路,程序里面一直在发送,用万用表测试电压为1.8V左右,估计是在不停地发送。我不发送的时候一直保持高电平。 现在怀疑是接收出了问题。 参考的是风驰的串口程序。 初始化程序,都是调用库函数 void Uart_init(void) { // UART1_DeInit(); UART1_Init((u32)19200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_RX_ENABLE); UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); UART1_Cmd(ENABLE); } 发送函数参考风驰的 void UART1_SendByte(u8 data) //发送字节 { UART1_SendData8((unsigned char)data); /* Loop until the end of transmission */ while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET); } void UART1_SendString(u8* Data,u16 len) //发送指定长度的字符串 { u16 i=0; for(;i<len;i++) UART1_SendByte(Data); } 接收函数,中断方式: #pragma vector = ITC_IRQ_UART1_RX + 2 __interrupt void UART1_RX_IRQHandler(void) { u8 Res; if(UART1_GetITStatus(UART1_IT_RXNE )!= RESET) {/*接收中断(接收到的数据必须是0x0d 0x0a结尾)*/ Res =UART1_ReceiveData8(); /*(USART1->DR);读取接收到的数据,当读完数据后自动取消RXNE的中断标志位*/ rx_buf[rx_counter] = Res; dis_num[1] = Res; rx_counter++; } } 大家看看还有什么需要配置的吗?感觉是接收不到的问题。