STM32
直播中

王岩

7年用户 798经验值
私信 关注
[问答]

如何去实现printf函数与scanf函数重定向呢

如何去实现printf函数重定向呢?

如何去实现scanf函数重定向呢?

回帖(1)

林明

2021-12-14 09:20:27
printf函数重定向

1.首先很的重要一点,一定要打开SysTick定时器,否则连跑马灯都跑不通;
printf函数重定向这个很简单没什么特殊要求
我们只需要在usart.h文件中加上#include “stdio.h”
在usart.c文件中加上

int fputc(int ch, FILE *f)
{           
        while((USART1_SR&UART_LSR_THRE)==0);       
        SEND_BUF1 = (u8) ch;
       
**加粗样式**        return ch;
}
在这里我们只需要明白三点
USART1_SR
#define USART1_SR (USART1->SR)
就是 串口1的状态寄存器
UART_LSR_THRE
#define UART_LSR_THRE (1<<6)
发送完成标志
SEND_BUF1
#define SEND_BUF1 (USART1->DR)
就是串口1的数据寄存器
scanf函数重定向

1.scanf函数重定向有一点点坑;
在printf函数重定向的基础上

在usart.c文件中加上

int fgetc(FILE* f)
{


        while(!(USART1_SR&UART_LSR_RDR));
        return RECV_BUF1;
}


还是有三点
USART1_SR
#define USART1_SR (USART1->SR)
就是 串口1的状态寄存器
UART_LSR_RDR
#define UART_LSR_RDR (1<<5)
接收完成标志
RECV_BUF1
#define RECV_BUF1 (USART1->DR)
就是串口1的数据寄存器
但是最重要的是一定要把串口的中断使能关闭!!!!

比如我使用的HAL库中的串口1

  __HAL_UART_ENABLE_IT(&usart1, UART_IT_RXNE);   //ʹÄܽÓÊÕÖжÏ
       
        HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
        HAL_NVIC_EnableIRQ(USART1_IRQn);


将这三个函数注释掉就好了,不用管其他的串口函数。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分