嵌入式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");
	}		
}

串口显示

相关推荐
外收内放7 小时前
面向对象高级(实战案例)
开发语言·python·学习
薛定e的猫咪8 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
HQB20268 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
薛定e的猫咪9 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
果壳science10 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
沉淀的.晴天11 小时前
can总线
stm32
桀人11 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
别动我齐刘海12 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
国科安芯12 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C12 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull