嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

printf重定义:

C语言里面的printf函数默认输出设备是显示器,如果要实现printf函数输出正在串口或者LCD显示屏上,必须要重定义标准库函数里调用的与输出设备相关的函数,比如printf输出到串口,需要将fputc里面的输出指向串口。

应用:

usart.h

复制代码
#ifndef USART_H_
#define USART_H_

	void my_usart_init(void);
	void My_Usart_Send_Byte( USART_TypeDef* USARTx, uint16_t Data);
	void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string);

#endif

usart.c

复制代码
#include"stm32f10x.h"
#include"usart.h"
#include "stdio.h"

void my_usart_init(void)
{
	GPIO_InitTypeDef GPIOInitstruct;
	USART_InitTypeDef Usart_initstruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
	
	//A9
	GPIOInitstruct.GPIO_Pin = GPIO_Pin_9;
	GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&GPIOInitstruct);
	//A10
	GPIOInitstruct.GPIO_Pin =GPIO_Pin_10;
	GPIOInitstruct.GPIO_Mode =GPIO_Mode_IPU;
	GPIO_Init(GPIOA,&GPIOInitstruct);
	
	
	Usart_initstruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;									
	Usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;		
	Usart_initstruct.USART_BaudRate = 115200;						
	Usart_initstruct.USART_Parity = USART_Parity_No;		
	Usart_initstruct.USART_StopBits = USART_StopBits_1;  		
	Usart_initstruct.USART_WordLength = USART_WordLength_8b;  		
	USART_Init(USART1,&Usart_initstruct);
	USART_Cmd(USART1,ENABLE);																											
	
}

void My_Usart_Send_Byte(USART_TypeDef* USARTx, uint16_t Data)
{
			USART_SendData(USARTx,  Data);
			while( USART_GetFlagStatus( USARTx,  USART_FLAG_TXE) == RESET);
		
}
	
void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string)
{
		uint16_t i=0;
		do
		{
				My_Usart_Send_Byte(USARTx,*(string+i));
				i++;
		}while(*(string+i) != '\0');
		
		while( USART_GetFlagStatus( USARTx,  USART_FLAG_TC) == RESET);
}


int fputc(int ch, FILE * p)									//printf重定义
{
		USART_SendData(USART1,  (u8)ch);
		while( USART_GetFlagStatus( USART1,  USART_FLAG_TXE) == RESET);
		return ch;
}

main.c

复制代码
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
#include "usart.h"
#include "stdio.h"
void delay(uint16_t time) 
{
	uint16_t i=0;
	while(time--)
	{
		i =12000;
		while(i--);
	}

}
 
int  main() 
{

		my_usart_init();
//	My_Usart_Send_Byte( USART1,  'A');
//	My_Usart_Send_Byte( USART1,  'B');
//	My_Usart_Send_Byte( USART1,  'C');
//	My_Usart_Send_Sting( USART1,  "\r\n");
//	My_Usart_Send_Sting(USART1 , "fei \r\n");
	
	while(1)
	{
			printf("Hello,shi \r\n");
	}		
}

串口显示

相关推荐
蜡笔小电芯4 分钟前
【C语言】指针与回调机制学习笔记
c语言·笔记·学习
Wangshanjie_988 分钟前
【STM32】-单片机数据通讯基本概念
stm32·单片机
im_AMBER44 分钟前
学习日志03 python
学习
不落的太陽1 小时前
让测距功能与时俱进
单片机·嵌入式硬件
Funing71 小时前
stm32地址偏移:为什么相邻寄存器的地址偏移量0x04表示4个字节?
stm32·单片机·嵌入式硬件
DKPT2 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Green1Leaves2 小时前
pytorch学习-11卷积神经网络(高级篇)
pytorch·学习·cnn
DKPT9 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
竹照煜_ysn10 小时前
蓝桥杯51单片机设计
单片机·嵌入式硬件·51单片机
Do vis82411 小时前
STM32第十六天蓝牙模块
stm32·单片机·嵌入式硬件