OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13385|回复: 13

STM32L0串口求助!!!!急求,调试了好久了

[复制链接]

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
发表于 2014-9-16 09:50:32 | 显示全部楼层 |阅读模式
5金钱
我用的这个片子stm32L053比较新,固件库函数跟f系列V3.50有很大不同。。。串口部分参考了原子个代码,但是stm32串口只能发送数据到上位机,不能接收上位发出来的数据。
一下是配置代码:
void USART1_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct; 
    //使能GPIOB时钟
    __GPIOB_CLK_ENABLE();    
    //USART1_TX   PB.6
    GPIO_InitStruct.Pin = GPIO_PIN_6;                //PB.6
    GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;    //复用推挽输出
   GPIO_InitStruct.Pull      = GPIO_NOPULL;
    GPIO_InitStruct.Alternate = GPIO_AF0_USART1;    //连接到USART1的外设
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
   
    //USART1_RX  B.7
    GPIO_InitStruct.Pin = GPIO_PIN_7;             //PB .7   
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;       //浮空输入
    GPIO_InitStruct.Alternate = GPIO_AF0_USART1;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);      
}

void USART_Init(void)
{  
     USART1_GPIO_Init();//串口IO初始化
    //使能串口时钟
    __USART1_CLK_ENABLE();    
    UartHandle.Instance        = USART1;
    UartHandle.Init.BaudRate   = 9600;
    UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
    UartHandle.Init.StopBits   = UART_STOPBITS_1;
    UartHandle.Init.Parity     = UART_PARITY_NONE;
    UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
    UartHandle.Init.Mode       = UART_MODE_TX_RX;   

    HAL_UART_Init(&UartHandle);   

   __HAL_UART_ENABLE(&UartHandle);//使能串口
    HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);//中断优先级配置
    HAL_NVIC_EnableIRQ(USART1_IRQn);        //使能串口中断    

    __HAL_UART_ENABLE_IT(&UartHandle,UART_IT_RXNE);//使能接收中断
       
}
串口中断:
//串口中断接收
void USART1_IRQHandler(void)
{
     uint8_t Res;

     HAL_UART_IRQHandler(&UartHandle);
    
    if(__HAL_UART_GET_IT(&UartHandle, UART_IT_RXNE) != RESET)  //
    {
          USART1->RQR |= 0x08;//清除 RXNE
          Res =USART1->RDR;//USARTx_RX_Data(&UartHandle);

         printf("Faiure !!!\n\r\n");//测试有没有进入中断
        if((USART_RX_STA&0x8000)==0)//
       {
               if(USART_RX_STA&0x4000)//
             {
                     if(Res!=0x0a)USART_RX_STA=0;//
                    else USART_RX_STA|=0x8000; // 
             }
           else //还没接收到0X0D
           {
                 if(Res==0x0d)USART_RX_STA|=0x4000;
                 else
                {
                       USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                      USART_RX_STA++;
                      if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//  
               }  
          }
       }    
  } 
}
我用示波器测量,发现TX、RX都有信号。
每次按下复位按键的时候,串口才能接收一次数据,以后数据就无法接受,只能发送数据到PC。我怀疑是没有清除串口中断,但是,我又加了USART1->RQR |= 0x08;//清除 RXNE,貌似页不行
请问一下大侠,你们碰到这个情况了么??????在线求助



最佳答案

查看完整内容[请看2#楼]

终于调试出来了,专门写了个文档供大家下载 http://www.ganmalai.com/forum.php?mod=viewthread&tid=69&extra=
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-16 09:50:33 | 显示全部楼层
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-16 09:58:37 | 显示全部楼层
原子哥,看看咋回事呗
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-16 10:13:55 | 显示全部楼层
怎么还没有人回复啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-16 12:15:29 | 显示全部楼层
估计问题出在你的接收中断处理里面,好好检查下吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-16 12:51:57 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
接收中断处理,是完全移植了你的程序啊,原子哥。只是由于库函数的不同,所以串口的配置有所不同
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-2-26
在线时间
19 小时
发表于 2016-7-25 18:53:37 | 显示全部楼层
我最近也遇到同样的问题了
回复

使用道具 举报

12

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-4-23
在线时间
21 小时
发表于 2016-10-25 21:57:19 | 显示全部楼层
交流zzk 发表于 2014-9-16 09:50
终于调试出来了,专门写了个文档供大家下载
http://www.ganmalai.com/forum.php?mod=viewthread&tid=69 ...

找不到文档了,能再发一次么
回复

使用道具 举报

12

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-4-23
在线时间
21 小时
发表于 2016-10-25 21:58:07 | 显示全部楼层
我最近也遇到这个问题,求各位大神指教指教!!!!
回复

使用道具 举报

garonleo 该用户已被删除
发表于 2017-2-16 09:31:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

15

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2017-1-29
在线时间
37 小时
发表于 2017-10-1 23:04:24 | 显示全部楼层
交流zzk 发表于 2014-9-16 09:50
终于调试出来了,专门写了个文档供大家下载
http://www.ganmalai.com/forum.php?mod=viewthread&tid=69 ...

你的文档网页打不开,没法下载看啊,有没有调试通的STM32L053串口程序参考下,我调试了几天不行啊, 比较急啊。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-1-19
在线时间
0 小时
发表于 2018-1-19 09:42:52 | 显示全部楼层
mochou99 发表于 2017-10-1 23:04
你的文档网页打不开,没法下载看啊,有没有调试通的STM32L053串口程序参考下,我调试了几天不行啊, 比较 ...

同求   在中断和 接受发送 BUFF的代码 不知道该怎么写了。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-1-19
在线时间
0 小时
发表于 2018-1-19 09:43:09 | 显示全部楼层
请问 中断和  接受发送的 函数该怎么写
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-9-26
在线时间
9 小时
发表于 2020-6-12 10:05:02 | 显示全部楼层
文档能不能再发一下,打不开了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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