单片机串口打印printf函数显示内容(固件库开发)

1.hal_usart.c 文件

复制代码
#include <stdio.h>
#include "hal_usart.h"
#include "stm32F10x.h"


//**要根据 使用的是哪个串口 对应修改 串口号   eg:USART1**
void USART_PUTC(char ch)
{
    /* 等待数据寄存器为空 */
    while((USART1->SR & 0x40) == 0);
    /* 写入数据寄存器 */
    USART1->DR = (uint8_t)ch;
}
//重指向

#pragma import(__use_no_semihosting)

struct __FILE
{
		int handle;
};

FILE __stdout;

void _sys_exit(int x)
{
	x = x;
}

int fputc(int ch, FILE *f)
{
    if (ch == '\n')
    {
        USART_PUTC('\r');
    }
    USART_PUTC(ch);
    return ch;
}

static void hal_usart_Config(void);

void hal_UsartInit()
{

	hal_usart_Config();

	printf("FreeRtos教程学习\n\r");
}


static void hal_usart_Config(void)
{ 
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure; 
//	NVIC_InitTypeDef NVIC_InitStructure;
 	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
 	RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1,ENABLE);

/****************GPIO Setting *******************************************/
//  USART1_TX -> PA9 , 		
	GPIO_InitStructure.GPIO_Pin = DEBUF_TX_PIN;	         
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DEBUG_TX_PORT, &GPIO_InitStructure);		   
//  USART1_RX ->	PA10
	GPIO_InitStructure.GPIO_Pin = DEBUF_RX_PIN;	        
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
	GPIO_Init(DEBUG_RX_PORT, &GPIO_InitStructure);

	USART_InitStructure.USART_BaudRate = 115200;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	
	USART_Init(DEBUG_USART_PORT, &USART_InitStructure); 

    // NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//
	// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//
	// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//
	// NVIC_Init(&NVIC_InitStructure);	//


    // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//
	// USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//
 	// USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//
 	// USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);//
	
	USART_Cmd(USART1, ENABLE);                    ///
}

//
///
void USART1_IRQHandler(void)
{
    //unsigned char dat;
	if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
	{							
		 //dat = USART_ReceiveData(USART1);
		 USART_ClearITPendingBit(USART1,USART_IT_RXNE);
	}
}

2. hal_usar.h 文件

说明:要根据不同单片串口引脚的不同,来改变修改对应引脚

复制代码
#ifndef _HAL_USART_H
#define _HAL_USART_H


#define DEBUG_TX_PORT	GPIOA         //根据使用串口的 RX,TX 引脚的不同来修改头文件即可
#define DEBUF_TX_PIN	GPIO_Pin_9
#define DEBUG_RX_PORT	GPIOA
#define DEBUF_RX_PIN	GPIO_Pin_10
#define DEBUG_USART_PORT	USART1    //根据利用哪个串口来做Debug口  这里就设置为哪个串口

void hal_UsartInit(void);

#endif

3. 后续使用printf函数时,加入对应头文件,就能显示想要显示的内容

#include <stdio.h>

相关推荐
国科安芯6 小时前
高速CANFD收发器ASM1042在割草机器人轮毂电机通信系统中的适配性研究
网络·单片机·嵌入式硬件·性能优化·机器人·硬件工程
CC呢6 小时前
基于单片机智能路灯控制
单片机·嵌入式硬件·智能路灯
DDUU__7 小时前
STM32低功耗模式
stm32·单片机·嵌入式硬件
小莞尔8 小时前
【51单片机】【protues仿真】基于51单片机宠物投食器系统
c语言·stm32·单片机·嵌入式硬件·51单片机·proteus
逼子格8 小时前
【Protues仿真】基于AT89C52单片机的数码管驱动事例
单片机·嵌入式硬件·硬件工程·硬件工程师·protues·数码管·电路仿真
風清掦9 小时前
零基础玩转STM32:深入理解ARM Cortex-M内核与寄存器编程
stm32·单片机·嵌入式硬件·mcu·物联网
芯岭技术13 小时前
PY32F003国产单片机、外设丰富、高性价比的国产替代方案
单片机·嵌入式硬件
QQ52862112415 小时前
单片机GD32F230芯片解密解析及专业操作建议
单片机·嵌入式硬件
一枚小小程序员哈15 小时前
基于stm32的智能建筑能源管理系统/基于单片机的能源管理系统
stm32·单片机·能源
物联网牛七七15 小时前
51和stm32的点灯区别
stm32·单片机·51单片机