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);
将这三个函数注释掉就好了,不用管其他的串口函数。
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);
将这三个函数注释掉就好了,不用管其他的串口函数。
举报