搜索
查看: 1528|回复: 5

[已解决] STM8S105C6T6 UART2串口,能接收数据,不能发送数据

[复制链接]

该用户从未签到

1

主题

8

帖子

0

蝴蝶豆

新手上路

最后登录
2020-4-28
发表于 2019-8-11 09:36:36 | 显示全部楼层 |阅读模式
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);
}



回复

使用道具 举报

该用户从未签到

74

主题

3420

帖子

82

蝴蝶豆

社区小助手

最后登录
2023-11-12
发表于 2019-8-11 11:14:59 | 显示全部楼层
应该是双机的RXD和TXD连接错了

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

蝴蝶豆

新手上路

最后登录
2020-4-28
 楼主| 发表于 2019-8-11 12:59:42 | 显示全部楼层
这我特意注意了,交叉连接的
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2019-8-12 10:05:17 | 显示全部楼层
    单片机连接USB转串口,用示波器看一下单片机的TX(对应USB串口的RX)脚的波形,你可能会发现惊喜。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    613

    帖子

    138

    蝴蝶豆

    金牌会员

    最后登录
    2022-5-19
    发表于 2019-8-12 18:41:28 | 显示全部楼层
    不要在 接收中断处理程序中,直接发送刚收到的数据,尽量减少中断处理时间;再说您的发送程序有 多处while  loop, 您可能在一直等待某个状态。

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    STMCU + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    77

    帖子

    0

    蝴蝶豆

    中级会员

    最后登录
    2021-3-15
    发表于 2020-11-20 19:39:19 | 显示全部楼层
    把发送函数里最上面的两个语名位置掉换一下
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-26 09:17 , Processed in 0.187331 second(s), 36 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表