打印
[STM8]

STM8S105C6T6 UART2串口,能接收数据,不能发送数据

[复制链接]
575|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2021-1-4 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM8S105C6T6 UART2串口,能接收数据,不能发送数据,哪位大神能帮忙看看。现在单片机自发自收没有问题,串口自发自收也没有问题,但是两个连接起来就单片机只能接收数据,发送数据,串口无接收
工具:USB转TTL
以下是程序代码:

void UART2_GPIO_init()
{
   GPIO_DeInit(GPIOD);
//GPIO_Init(GPIOD,GPIO_PIN_5,GPIO_MODE_IN_PU_NO_IT);//串口通讯TX
GPIO_Init(GPIOD,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_FAST);
//GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOD,GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);//串口通讯RX
}

void UART2_ConfigurationInit(void)
{
UART2_GPIO_init();
  UART2_DeInit();
  UART2_Init((u32)9600,                 
             UART2_WORDLENGTH_8D,
             UART2_STOPBITS_1,
             UART2_PARITY_NO,
             UART2_SYNCMODE_CLOCK_DISABLE,
             UART2_MODE_TXRX_ENABLE);  //波特率 9600 8位数据  1个停止位  没有奇偶校验 关闭SCK 同意串口接受和发送
  UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);//开启读中断,接收数据寄存器非空或溢出错误中断
  //UART2_ITConfig(UART2_IT_TXE,ENABLE);//开启写中断
   UART2_Cmd(ENABLE);//启用串口
}


void UART2_Close()
{
  UART2_Cmd(DISABLE);
  UART2_ITConfig(UART2_IT_RXNE_OR,DISABLE);//关读中断,接收数据寄存器非空或溢出错误中断
  UART2_ITConfig(UART2_IT_TXE,DISABLE);//关写中断
}


void Send_Data(u8 Data)

{
  /*while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET));
//待发送寄存器为空
      UART2_SendData8((unsigned char)Data);

     while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET));
//传输完成的标志
  */
unsigned int j;
while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET));
//待发送寄存器为空
  UART2_SendData8(Data);
while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET));
//UART2_ClearFlag(UART2_FLAG_TC);
//j=50;
//while(j--);

}

//发送字符串Send_Str("STM8SUART \r\n")
void Send_Str(unsigned char *Data)
{
while(*Data!='\0')
{
   Send_Data(*Data);
   Data++;
}
}


INTERRUPT_HANDLER(UART2_TX_IRQHandler, 20)//发送数据中断
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */

   // 写操作自动清中断,因此可以不用显式清中断
//UART2_ClearITPendingBit(UART2_IT_TXE);

}

/**
  * @brief UART2 RX interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)//接收数据中断
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    UART2_ClearITPendingBit(UART2_IT_RXNE);
   Uart2RecData = UART2_ReceiveData8();
   Send(Uart2RecData);
    */
   // 读操作自动清中断,因此可以不用显式清中断
// 注意这里的中断名是RXNE,不是RXNE_OR

   Uart2RecData = UART2_ReceiveData8();
  UART2_SendData8(Uart2RecData);
   UART2_ClearITPendingBit(UART2_IT_RXNE);
}

使用特权

评论回复
沙发
heimaojingzhang| | 2021-2-1 21:02 | 只看该作者
硬件上有没有复用啊

使用特权

评论回复
板凳
keaibukelian| | 2021-2-1 21:04 | 只看该作者
串口需要电阻匹配吗

使用特权

评论回复
地板
labasi| | 2021-2-1 21:09 | 只看该作者
如果一直不让他发送数据  他可以接受数据吗

使用特权

评论回复
5
paotangsan| | 2021-2-1 21:11 | 只看该作者
用示波器看看总线上有波形吗

使用特权

评论回复
6
renzheshengui| | 2021-2-1 21:16 | 只看该作者
楼主如何确定没有发送出去数据呢

使用特权

评论回复
7
wakayi| | 2021-2-1 21:17 | 只看该作者
楼主硬件上是如何进行连接的呢

使用特权

评论回复
8
两只袜子| | 2021-2-8 15:44 | 只看该作者

应该是双机的RXD和TXD连接错了

使用特权

评论回复
9
两只袜子| | 2021-2-8 15:46 | 只看该作者

应该是双机的RXD和TXD连接错了

使用特权

评论回复
10
laocuo1142| | 2021-2-8 15:48 | 只看该作者

不要在 接收中断处理程序中,直接发送刚收到的数据,尽量减少中断处理时间;再说您的发送程序有 多处while  loop, 您可能在一直等待某个状态。

使用特权

评论回复
11
flycamelaaa| | 2021-2-8 15:49 | 只看该作者

把发送函数里最上面的两个语名位置掉换一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

968

主题

2965

帖子

7

粉丝