你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

为什么我串口能发但是接受不了求大神帮忙,快半个月了

[复制链接]
请叫我小张张 提问时间:2016-12-6 17:46 /

程序截图

程序截图

程序截图

程序截图

程序截图

程序截图

程序截图

程序截图
收藏 1 评论25 发布时间:2016-12-6 17:46

举报

25个回答
Stm32McuLover 回答时间:2016-12-6 18:13:43
赶紧用CUBE库

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

oktigerxia 回答时间:2016-12-7 14:56:58
void GPIO_Configuration_USART2(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
       
        /*使能USART1时钟*/
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

    /* Configure USART2 Rx (PA.3) as input floating */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* Configure USART2 Tx (PA.02) as alternate function push-pull */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_Init(GPIOA, &GPIO_InitStructure);

    /*设置USART1波特率为115200*/
    USART_Baud_Rate(USART2,38400);

          /* Enable USART2 Receive and Transmit interrupts */
          USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

          /* Enable the USART2 */
          USART_Cmd(USART2, ENABLE);
   
       
        USART_ClearFlag(USART2, USART_FLAG_TC);
        USART_ClearFlag(USART2,USART_IT_RXNE);        //先清标志,否则第一个数据有可能出错
   
}



void USART2_IRQHandler(void)
{

    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
          {
   
        OEMVSTATIC.Buf[OEMVSTATIC.In++] = USART_ReceiveData(USART2);
                OEMVSTATIC.Count++;
                if(OEMVSTATIC.In >= OEMVSTATIC_Buf_Size)OEMVSTATIC.In = 0;
                if(OEMVSTATIC.Count >= OEMVSTATIC_Buf_Size)
                {
                        OEMVSTATIC.Count = 0;
                        OEMVSTATIC.In = 0;
                }
        OEMVSTATICDatTimeOut = 0;
        USART_ClearFlag(USART2, USART_FLAG_RXNE);
    }
}

参考下

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

lzts 回答时间:2016-12-7 18:54:16
//说明:串口接收中断服务
//------------------------------------------------------------------
void USART1_IRQHandler(void)
{
    if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET) //溢出
   {
       USART_ClearFlag(USART1, USART_FLAG_ORE);  //读SR
       USART_ReceiveData(USART1);  //读DR
    }
   if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)  //接收完成, 则
  {
      USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清接收中断标志
    //PBout(2) = !PBout(2);  //LED灯取反
    //..................
  }
  if(USART_GetITStatus(USART1, USART_IT_TC) != RESET)  //发送完成
  {
  //PBout(2) = !PBout(2);
      //...................
  }
}

判断接收用这个,看指示灯,接收一次,灯变一下, 你程序那个要进N多次.好象还死在里面

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

请叫我小张张 回答时间:2016-12-6 18:19:51

这个CUBE库我没有用过  是不是比标准库要难 啊
294479435@qq.co 回答时间:2016-12-6 18:22:43
USART_Cmd(USART1, ENABLE);加上呢

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

Stm32McuLover 回答时间:2016-12-6 18:22:51
请叫我小张张 发表于 2016-12-6 18:19
这个CUBE库我没有用过  是不是比标准库要难 啊

简单
creep 回答时间:2016-12-6 18:32:56
楼主用的哪个系列,标准库也有官方的串口代码可以参考啊,或者社区论坛也有不少例子。
freeelectron 回答时间:2016-12-6 20:21:18
楼主,图2的最后两行代码是干嘛用的
xmshao 回答时间:2016-12-6 21:29:54
中断程序尽量简洁点;
是否有其它中断在影响了接收?注意优先级的合理安排。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

大器所成 回答时间:2016-12-6 22:23:42

USART_Cmd(USART1, ENABLE);

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

andypanfan 回答时间:2016-12-7 08:41:51
半个月   不会吧!!!
高二毛 回答时间:2016-12-7 08:55:27
结合提供的例子好好研究研究。串口还是最简单的。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

斜阳 回答时间:2016-12-7 09:17:05
首先看进接收中断了么?如果没进,看串口配置哪里出错了;如果进了,好好捋一下中断内的处理过程

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

anobodykey 回答时间:2016-12-7 09:21:46
看下官方例程吧
oktigerxia 回答时间:2016-12-7 14:55:29


USART_Cmd(USART2, ENABLE);串口2使能没
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版