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

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, 下载次数: 118, 下载积分: ST金币 -1

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

谢谢您,是的,现在串口通讯没有问题了,您真是太热心了,很感动呢,谢谢!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版