STM32F103VE串口printf 和 scanf 函数重定向

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);

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值