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

STM32F411Nucleo卡发板调试串口不通

[复制链接]
小燕_lillian 提问时间:2015-8-28 15:20 /
今天调试了下串口UART,初始化代码就是STM32CubeMX生成的,没有问题:
  UART_HandleTypeDef huart1;
  UART_HandleTypeDef huart2;

  UART_HandleTypeDef huart6;

  MX_USART1_UART_Init();
  MX_USART2_UART_Init();

  MX_USART6_UART_Init();

然后调用发送:

HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
发现程序会在UART_WaitOnFlagUntilTimeout()中滞留,也就是说UART发送是不正常的,麻烦帮忙看看如何解决,谢谢!


收藏 评论7 发布时间:2015-8-28 15:20

举报

7个回答
风子 回答时间:2015-8-28 17:55:34
这,,,叫人看什么呢?
watershade 回答时间:2015-8-28 22:04:33
你连接的是uart2吧,这个接口连接到了CN3而不是CN9的PA2和PA3.类似的例子还有很多。注意看硬件原理图。

看下面三张图,都是选自原理图: nucleo串口问题.PNG
nucleo串口问题2.PNG
nucleo串口问题3.PNG
对照板子你会发现PA2和PA3没有被焊上,PA2和PA3最终被重定向到了CN3的两个引脚。
还有注意CN3的TX和RX已经是直接可接收设备引脚对应的了,不用调换
小燕_lillian 回答时间:2015-8-31 10:09:40
watershade 发表于 2015-8-28 22:04
你连接的是uart2吧,这个接口连接到了CN3而不是CN9的PA2和PA3.类似的例子还有很多。注意看硬件原理图。

看 ...

谢谢您耐心答复,这个电路图我看了,我是连接到CN3的,现在问题是发送函数HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF)没有正常工作,阻塞在UART_WaitOnFlagUntilTimeout()中一直等待;IAR调试程序,初始化等都是正常运行的,到这个发送里就一直阻塞了。其他的串口也是一样,我改为UART1和UART6情况是相同的。
小燕_lillian 回答时间:2015-8-31 10:18:55
风子 发表于 2015-8-28 17:55
这,,,叫人看什么呢?

/* USART1 init function */
void MX_USART1_UART_Init(void)
{

  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_UART_Init(&huart1);

}

/* USART2 init function */
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;
  HAL_UART_Init(&huart2);

}

/* USART6 init function */
void MX_USART6_UART_Init(void)
{

  huart6.Instance = USART6;
  huart6.Init.BaudRate = 115200;
  huart6.Init.WordLength = UART_WORDLENGTH_8B;
  huart6.Init.StopBits = UART_STOPBITS_1;
  huart6.Init.Parity = UART_PARITY_NONE;
  huart6.Init.Mode = UART_MODE_TX_RX;
  huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart6.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_UART_Init(&huart6);

}

#ifdef __GNUC__
        #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
        #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
        /* Place your implementation of fputc here */
        /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
        HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);

        return ch;
}

/**
  * @brief  Main program
  * @param  None
  * @retval None
  */
int main(void)
{
  HAL_Init();
  
  /* Configure the System clock to 100 MHz */
  SystemClock_Config();
  
  /* Initialize all configured peripherals */
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_USART6_UART_Init();

  printf("uart\r\n");


  /* Infinite loop */
  while (1)
  {   
  }
}
watershade 回答时间:2015-8-31 20:21:58
小燕_lillian 发表于 2015-8-31 10:18
/* USART1 init function */
void MX_USART1_UART_Init(void)
{

我之前试过没有问题,回头我再做一个demo试一下。
watershade 回答时间:2015-9-6 22:03:10
不好意思,前段时间在折腾电脑系统就没有传给你文件。也许你不需要了。
这个是一个简单的测试,测试通过了

N411printf.rar

下载

5.5 MB, 下载次数: 117, 下载积分: ST金币 -1

小燕_lillian 回答时间:2015-10-10 10:11:09
watershade 发表于 2015-9-6 22:03
不好意思,前段时间在折腾电脑系统就没有传给你文件。也许你不需要了。
这个是一个简单的测试,测试通过了 ...

谢谢您,是的,现在串口通讯没有问题了,您真是太热心了,很感动呢,谢谢!

所属标签

相似问题

官网相关资源

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