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

【Nucleo-F303RE开发】关于UART中断发送丢失数据问题请教

[复制链接]
lkl0305 提问时间:2015-5-27 14:42 /
本帖最后由 lkl0305 于 2015-5-27 14:43 编辑

今天写了一个UART的HAL库中断发送数据的程序,本来要发送两个字符串,但是串口发送时只输出了1个字符串,请问大家程序出了什么问题,请高手帮助解答。
如图主程序:
每2秒循环发送2个字符串:
201.jpg
但是串口接收的数据只有一个字符串:
202.jpg
主函数我把CUBEMX自动生成的注释给删掉,看着短一些:
#include "stm32f3xx_hal.h"

UART_HandleTypeDef huart2;

#define TXBUFFERSIZE1                             COUNTOF(TxBuffer1)
#define TXBUFFERSIZE2                             COUNTOF(TxBuffer2)

#define COUNTOF(__BUFFER__)   (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))

static __IO ITStatus UartReady = RESET;
uint8_t TxBuffer1[] = "第一个字符串\n";
uint8_t TxBuffer2[] = “第二个字符串\n";


void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);

int main(void)
{

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART2_UART_Init();
  while (1)
  {
    HAL_UART_Transmit_IT(&huart2, (uint8_t *)TxBuffer1, TXBUFFERSIZE1);
    while (UartReady != SET)
    {
      ;
    }
    UartReady = RESET;
   
    HAL_UART_Transmit_IT(&huart2, (uint8_t *)TxBuffer2, TXBUFFERSIZE2);
    while (UartReady != SET)
    {
      ;
    }
    UartReady = RESET;
   

    HAL_Delay(2000);

  }

}

void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

  __SYSCFG_CLK_ENABLE();

}

void MX_USART2_UART_Init(void)
{

  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  huart2.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED ;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  HAL_UART_Init(&huart2);

}

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __GPIOA_CLK_ENABLE();

  /*Configure GPIO pin : PA5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
  UartReady = SET;
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  UartReady = SET;
}
完整工程附上:
UART_LED.rar (6.7 MB, 下载次数: 45)
收藏 评论16 发布时间:2015-5-27 14:42

举报

16个回答
harvardx 回答时间:2015-5-27 14:49:24
有种可能是在第一次发送的过程中 发生了复位 .于是没有机会执行第二次发送
harvardx 回答时间:2015-5-27 14:50:23
单步调试看看呢 ..看看程序的走向.
occupy 回答时间:2015-5-27 15:10:18
希望楼主能进一步深入学习,共同进步
ts2000 回答时间:2015-5-27 15:16:57
估计发送太快了吧。
jiaswang 回答时间:2015-5-27 15:17:12
建议楼主在第一次和第二次之间增加一个LED反转并延时的语句,这样可以确定地看到程序在执行还是死了
星辰一方 回答时间:2015-5-27 15:34:19
ts2000 发表于 2015-5-27 15:16
估计发送太快了吧。

经测试,楼主这确实是发送太快了
星辰一方 回答时间:2015-5-27 15:34:47
楼主在两次发送之间增加HAL_Delay(10);即可
回答时间:2015-5-27 16:07:43
楼主是想通过UartReady 来控制,UartReady 要在发送完毕再赋值。
上达到 回答时间:2015-5-27 18:02:42
装金币啊
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版