STM8S103串口问题,两天了都

2019-03-23 18:08发布

用的芯片是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++;
  }
}

大家看看还有什么需要配置的吗?感觉是接收不到的问题。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
a234280158
1楼-- · 2019-03-24 13:53
xingkong911 发表于 2014-7-15 17:19
你用什么编译器?

STVP    已解决!  谢谢!
错失流年
2楼-- · 2019-03-24 16:36
 精彩回答 2  元偷偷看……
水滴滴水
3楼-- · 2019-03-24 18:01
开发环境使用的IAR 同样的问题,请问怎么解决的,问题是不能够接收,但是能够发送,采用的485通信,while(UART1_GetFlagStatus(UART1_FLAG_RXNE) != SET)程序一直卡在这里。
yl20084784
4楼-- · 2019-03-24 20:01
水滴滴水 发表于 2015-10-24 18:27
开发环境使用的IAR 同样的问题,请问怎么解决的,问题是不能够接收,但是能够发送,采用的485通信,while(U ...

while(UART1_GetFlagStatus(UART1_FLAG_RXNE) != SET)我也调试过这句真心不好用,换个标志位吧
roceyulcy
5楼-- · 2019-03-24 22:12
 精彩回答 2  元偷偷看……
roceyulcy
6楼-- · 2019-03-24 23:38
yl20084784 发表于 2015-10-26 08:32
while(UART1_GetFlagStatus(UART1_FLAG_RXNE) != SET)我也调试过这句真心不好用,换个标志位吧

请问你是怎么解决的?

一周热门 更多>