打印
[STM32L0]

STM32L053串口求助!!!在线求助

[复制链接]
7925|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我用的这个片子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         PB.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,貌似页不行
​请问一下大侠,你们碰到这个情况了么??????在线求助



QQ截图20140916094948.png (23.05 KB )

QQ截图20140916094948.png
沙发
化雨眠66|  楼主 | 2014-9-16 09:59 | 只看该作者
版主大人呢,都来瞅瞅呗

使用特权

评论回复
板凳
化雨眠66|  楼主 | 2014-9-16 10:14 | 只看该作者
求助   求助

使用特权

评论回复
地板
mmuuss586| | 2014-9-16 12:20 | 只看该作者
本帖最后由 mmuuss586 于 2014-9-16 12:24 编辑

串口初始化的时候,清下串口中断标志;

判断中断用这个看看:
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

至于程序的参考,最好参考官方的程序;

使用特权

评论回复
5
化雨眠66|  楼主 | 2014-9-16 12:50 | 只看该作者
mmuuss586 发表于 2014-9-16 12:20
串口初始化的时候,清下串口中断标志;

判断中断用这个看看:

stm32L053库函数,没有你说的那个函数原型

使用特权

评论回复
6
想做大牛的小马| | 2014-9-16 14:34 | 只看该作者
用cube吧
STM32Cube_FW_L0_V1.1.0

使用特权

评论回复
7
化雨眠66|  楼主 | 2014-9-16 14:49 | 只看该作者
想做大牛的小马 发表于 2014-9-16 14:34
用cube吧
STM32Cube_FW_L0_V1.1.0

我用的就是最新的库
  ******************************************************************************
  * @file    ADC/ADC_OverSampler/Src/stm32l0xx_it.c
  * @author  MCD Application Team
  * @version V1.1.0
  * @date    18-June-2014
  * @brief   Main Interrupt Service Routines.
  *          This file provides template for all exceptions handler and
  *          peripherals interrupt service routine.
  ******************************************************************************

使用特权

评论回复
8
想做大牛的小马| | 2014-9-16 16:09 | 只看该作者
化雨眠66 发表于 2014-9-16 14:49
我用的就是最新的库
  ***************************************************************************** ...

接收中断有没有打开~

使用特权

评论回复
9
化雨眠66|  楼主 | 2014-9-16 18:15 | 只看该作者
想做大牛的小马 发表于 2014-9-16 16:09
接收中断有没有打开~

使能了接收中断算不算
__HAL_UART_ENABLE_IT(&UartHandle,UART_IT_RXNE);//使能接收中断

使用特权

评论回复
10
化雨眠66|  楼主 | 2014-9-17 17:36 | 只看该作者

使用特权

评论回复
11
晓枫VS枯叶| | 2014-9-22 08:15 | 只看该作者
请问下楼主L053的串口搞好了没?

使用特权

评论回复
12
化雨眠66|  楼主 | 2014-9-22 08:57 | 只看该作者
晓枫VS枯叶 发表于 2014-9-22 08:15
请问下楼主L053的串口搞好了没?

搞好了    楼上有文档可以下载

使用特权

评论回复
13
晓枫VS枯叶| | 2014-9-22 20:52 | 只看该作者
请问下楼主用的什么固件库,目前只看到cubeL0的库没有看到其他L0的库?

使用特权

评论回复
14
化雨眠66|  楼主 | 2014-9-23 08:01 | 只看该作者
晓枫VS枯叶 发表于 2014-9-22 20:52
请问下楼主用的什么固件库,目前只看到cubeL0的库没有看到其他L0的库?

CubeL0   V1.10

使用特权

评论回复
15
晓枫VS枯叶| | 2014-9-23 12:27 | 只看该作者
请问下你发送用了printf函数吗?这个库里面没有usartsend函数啊!

使用特权

评论回复
16
晓枫VS枯叶| | 2014-9-24 17:37 | 只看该作者
楼主请问下你的接收中断可以多次接收吗?为什么我用你的这个中断函数只能接收到一次,第二次就接受不到了。

使用特权

评论回复
17
化雨眠66|  楼主 | 2014-9-25 08:01 | 只看该作者
晓枫VS枯叶 发表于 2014-9-24 17:37
楼主请问下你的接收中断可以多次接收吗?为什么我用你的这个中断函数只能接收到一次,第二次就接受不到了。 ...

可以多次接收

使用特权

评论回复
18
化雨眠66|  楼主 | 2014-9-25 08:02 | 只看该作者
晓枫VS枯叶 发表于 2014-9-24 17:37
楼主请问下你的接收中断可以多次接收吗?为什么我用你的这个中断函数只能接收到一次,第二次就接受不到了。 ...

但是每次只能接收一个字节,这根我的项目要求而设定的

使用特权

评论回复
19
8411240410| | 2014-10-7 13:53 | 只看该作者
跟贴部下,STM32L051 现在你采购的是多少一片

使用特权

评论回复
20
化雨眠66|  楼主 | 2014-10-7 15:33 | 只看该作者
晓枫VS枯叶 发表于 2014-9-23 12:27
请问下你发送用了printf函数吗?这个库里面没有usartsend函数啊!

没用printf   我自己写了个 uart_sent

使用特权

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

本版积分规则

17

主题

77

帖子

8

粉丝