|
目前在使用STM32L053系列MCU,基于HAL库的程序,硬件串口资源有3个,都已经被使用;其中USART2通过Switch芯片来实现printf打印和读取传感器数据;因为USART2串口接收数据长度不定,因此采用中断接收。在测试时发现当串口USART2指向传感器时,发送数据没有问题,中断接收函数没办法进入。将printf定向到其他串口时,USART2就可以正常接收数据。 因此,结论是printf指向哪个串口,该串口就没办法实现中断接收数据。 请问各位大神有碰到相似的问题吗?是如何解决的? |
微信公众号
手机版
printf指向哪个串口由下面函数设定,本例使用usart2:
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart2 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
可以使用中断接收的:
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
评分
查看全部评分
评分
查看全部评分
添加这个之后使用printf来打印的。
int fputc(int ch,FILE *f)
{
uint8_t temp[1]={ch};
return HAL_UART_Transmit(&huart2,temp,1,3);
}
在串口2初始化的时候增加的中断接收
if(HAL_UART_Receive_IT(&huart2,(uint8_t*)bRxBuffer,1) != HAL_OK)
{
//Error_Handler();
printf("error\n");
}
在中断函数里面
void USART2_IRQHandler(void)
{
//printf("uart2\n");
HAL_UART_IRQHandler(&huart2);
}
实际测试的时候,没有办法进中断函数里面。
备注:同样的中断接收方式同时在Lpuart1上使用,可以正常使用;将putc()函数定向到UART1之后UART2接收中断就可以使用了。
串口打印是通过下面实现的:
int fputc(int ch,FILE *f)
{
uint8_t temp[1]={ch};
return HAL_UART_Transmit(&huart2,temp,1,3);
}