今天调试了下串口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发送是不正常的,麻烦帮忙看看如何解决,谢谢! |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
看下面三张图,都是选自原理图:
对照板子你会发现PA2和PA3没有被焊上,PA2和PA3最终被重定向到了CN3的两个引脚。
还有注意CN3的TX和RX已经是直接可接收设备引脚对应的了,不用调换
谢谢您耐心答复,这个电路图我看了,我是连接到CN3的,现在问题是发送函数HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF)没有正常工作,阻塞在UART_WaitOnFlagUntilTimeout()中一直等待;IAR调试程序,初始化等都是正常运行的,到这个发送里就一直阻塞了。其他的串口也是一样,我改为UART1和UART6情况是相同的。
/* 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)
{
}
}
我之前试过没有问题,回头我再做一个demo试一下。
这个是一个简单的测试,测试通过了
N411printf.rar
2015-9-6 22:02 上传
点击文件名下载附件
下载积分: ST金币 -15.5 MB, 下载次数: 118, 下载积分: ST金币 -1
谢谢您,是的,现在串口通讯没有问题了,您真是太热心了,很感动呢,谢谢!