欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

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

2025/9/19 23:50:25 来源:https://blog.csdn.net/Sfy314/article/details/148121134  浏览:    关键词:嵌入式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);//A9GPIOInitstruct.GPIO_Pin = GPIO_Pin_9;GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIOInitstruct);//A10GPIOInitstruct.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");}		
}

串口显示

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词