小燕_lillian 发表于 2015-8-28 15:20:52

STM32F411Nucleo卡发板调试串口不通

今天调试了下串口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发送是不正常的,麻烦帮忙看看如何解决,谢谢!

风子 发表于 2015-8-28 17:55:34

这,,,叫人看什么呢?

watershade 发表于 2015-8-28 22:04:33

你连接的是uart2吧,这个接口连接到了CN3而不是CN9的PA2和PA3.类似的例子还有很多。注意看硬件原理图。

看下面三张图,都是选自原理图:


对照板子你会发现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__ */

/**
* @briefRetargets the C library printf function to the USART.
* @paramNone
* @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;
}

/**
* @briefMain program
* @paramNone
* @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

不好意思,前段时间在折腾电脑系统就没有传给你文件。也许你不需要了。
这个是一个简单的测试,测试通过了

小燕_lillian 发表于 2015-10-10 10:11:09

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

谢谢您,是的,现在串口通讯没有问题了,您真是太热心了,很感动呢,谢谢!
页: [1]
查看完整版本: STM32F411Nucleo卡发板调试串口不通