OpenEdv-开源电子网

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

STM32L151系列的串口接收丢数据

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-9-23
在线时间
5 小时
发表于 2017-9-28 10:06:39 | 显示全部楼层 |阅读模式
10金钱
问题描述:STM32L151,串口3,配置如下//串口配置

void MX_USART3_UART_Init(void)
{

  huart3.Instance = USART3;
  huart3.Init.BaudRate = 115200;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;//ó2¼tá÷¿ØÖÆ
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;//1y2éÑùéèÖÃ
  if (HAL_UART_Init(&huart3) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

//IO配置
if(huart->Instance==USART3)
  {
    GPIO_InitStruct.Pin = LOG_TX3_Pin|LOG_RX3_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;//íÆíêêä3ö
    GPIO_InitStruct.Pull = GPIO_PULLUP;//éÏà-
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//Ëù¶è
    GPIO_InitStruct.Alternate = GPIO_AF7_USART3;//¸′óÃ
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  }

//串口中断

void USART3_IRQHandler(void)
{
unsigned int timeout=0;
  HAL_UART_IRQHandler(&huart3);

        timeout=0;
  while (HAL_UART_GetState(&huart3) != HAL_UART_STATE_READY)//原子方式
        {
         timeout++;
     if(timeout>2000) break;               
        }

        timeout=0;
        while(HAL_UART_Receive_IT(&huart3, &Usart3.MidBuffer, 1) != HAL_OK)//原子方式
        {
         timeout++;
         if(timeout>2000) break;       
        }
}

//中断配置
void MX_NVIC_Init(void)
{
  /* TIM2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);
  HAL_NVIC_EnableIRQ(TIM2_IRQn);
  /* EXTI1_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(EXTI1_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(EXTI1_IRQn);
  /* USART1_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(USART1_IRQn);
  /* USART2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(USART2_IRQn, 2, 1);
  HAL_NVIC_EnableIRQ(USART2_IRQn);
  /* USART3_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(USART3_IRQn, 2, 2);
  HAL_NVIC_EnableIRQ(USART3_IRQn);
}

//串口回调:把接受的数据放在数组中,一直接收,一直放入
if(huart->Instance==USART3)
        {
                Timer1ms.Uart3Count = 0;
                Usart3.Data[Usart3.Count] = Usart3.MidBuffer;
                Usart3.Count++;
                if(Usart3.Count>=USART_BUFFER_LENGTH)        Usart3.Count = 0;

}

出现丢数据现象:我发1234567890,可能程序只收到了其中的几个(3-5个),hal新手不知道问题所在,基本配置和标准库方式差不多,希望原子哥看看,谢谢。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-9-23
在线时间
5 小时
 楼主| 发表于 2017-9-28 10:07:30 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-9-29 01:12:52 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-9-23
在线时间
5 小时
 楼主| 发表于 2017-10-16 11:42:55 | 显示全部楼层
暂未彻底解决,L1的串口有问题  大家一致反映,不知道什么时候能解决
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-9-23
在线时间
5 小时
 楼主| 发表于 2017-10-16 11:43:32 | 显示全部楼层
同样的程序在L4上面是好用的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 10:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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