单片机串口打印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>

相关推荐
Flag- L10 分钟前
STM32标准库-TIM定时器
stm32·单片机·嵌入式硬件
2301_775602381 小时前
STM32什么是寄存器
stm32·单片机·嵌入式硬件
国科安芯3 小时前
抗辐照MCU在卫星载荷电机控制器中的实践探索
网络·嵌入式硬件·硬件工程·智能硬件·空间计算
双古4 小时前
步进电机调试记录(先让我的步进电机转起来)
单片机·嵌入式硬件
lixzest4 小时前
STM32开发中,线程启动异常问题排查简述
stm32·嵌入式硬件
程序员JerrySUN5 小时前
全面理解 Linux 内核性能问题:分类、实战与调优策略
java·linux·运维·服务器·单片机
学习噢学个屁5 小时前
基于STM32语音识别柔光台灯
c语言·stm32·单片机·嵌入式硬件·语音识别
欢乐熊嵌入式编程7 小时前
欢乐熊大话蓝牙知识14:用 STM32 或 EFR32 实现 BLE 通信模块:从0到蓝牙,你也能搞!
stm32·单片机·嵌入式硬件
傍晚冰川7 小时前
FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
开发语言·笔记·stm32·单片机·嵌入式硬件·学习
SY师弟10 小时前
51单片机基础部分——矩阵按键检测
嵌入式硬件·矩阵·51单片机