STM32ARM单片机USART2使用Printf函数的一点心得
今天刚学到用串口Printf输出,在例程中没有看到USART2使用Printf函数的方法。
在网上看了一些方法,但好像没有我使用的这种。不知这么使用有错误吗,但可以使用。
在使用USART1时用printf会有两个函数
int fputc(int ch, FILE *f);
int fgetc(FILE *f);
这两个函数中重新定义了putc和getc函数,使可以使用Printf和scanf函数;我在其中又定义了USART2 的,如下:
/*
*********************************************************************************************************
* 函 数 名: fputc
* 功能说明: 重定义putc函数,这样可以使用printf函数从串口1打印输出
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
int fputc(int ch, FILE *f)
{
/* 写一个字节到USART1 */
USART_SendData(USART1, (uint8_t) ch);
/* 等待发送结束 */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}
USART_SendData(USART2, (uint8_t) ch);
/* 等待发送结束 */
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
{}
return ch;
}
/*
*********************************************************************************************************
* 函 数 名: fgetc
* 功能说明: 重定义getc函数,这样可以使用scanff函数从串口1输入数据
* 形 参: 无
函数printf* 返 回 值: 无
*********************************************************************************************************
*/
int fgetc(FILE *f)
{
/* 等待串口1输入数据 */
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(USART1);
while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(USART2);
}
没有进行太多测试,只是将串口在串口1换到串口2时printf函数可以使用。希望高手多多指正。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论