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发送是不正常的,麻烦帮忙看看如何解决,谢谢!
这,,,叫人看什么呢? 你连接的是uart2吧,这个接口连接到了CN3而不是CN9的PA2和PA3.类似的例子还有很多。注意看硬件原理图。
看下面三张图,都是选自原理图:
对照板子你会发现PA2和PA3没有被焊上,PA2和PA3最终被重定向到了CN3的两个引脚。
还有注意CN3的TX和RX已经是直接可接收设备引脚对应的了,不用调换
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情况是相同的。 风子 发表于 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)
{
}
} 小燕_lillian 发表于 2015-8-31 10:18
/* USART1 init function */
void MX_USART1_UART_Init(void)
{
我之前试过没有问题,回头我再做一个demo试一下。 不好意思,前段时间在折腾电脑系统就没有传给你文件。也许你不需要了。
这个是一个简单的测试,测试通过了 watershade 发表于 2015-9-6 22:03
不好意思,前段时间在折腾电脑系统就没有传给你文件。也许你不需要了。
这个是一个简单的测试,测试通过了 ...
谢谢您,是的,现在串口通讯没有问题了,您真是太热心了,很感动呢,谢谢!
页:
[1]