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

embedded/2025/1/31 18:24:47/

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 ->	PA10GPIO_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>


http://www.ppmy.cn/embedded/158425.html

相关文章

sys中目录和文件的建立以及与驱动的交互

sys目录是利用Linux的sysfs特殊文件系统创建的&#xff0c;用于在用户态展示设备信息等内核数据。在sys中建立目录和文件涉及以下内容&#xff1a; sysfs文件系统初始化 sysfs文件系统通过 sysfs_init 函数完成注册和初始化&#xff0c;其主要操作包括&#xff1a; 使用 kme…

Spark Streaming的背压机制的原理与实现代码及分析

Spark Streaming的背压机制是一种根据JobScheduler反馈的作业执行信息来动态调整Receiver数据接收率的机制。 在Spark 1.5.0及以上版本中&#xff0c;可以通过设置spark.streaming.backpressure.enabled为true来启用背压机制。当启用背压机制时&#xff0c;Spark Streaming会自…

Visual Studio使用GitHub Copilot提高.NET开发工作效率

GitHub Copilot介绍 GitHub Copilot 是一款 AI 编码助手&#xff0c;可帮助你更快、更省力地编写代码&#xff0c;从而将更多精力集中在问题解决和协作上。 GitHub Copilot Free包含哪些功能&#xff1f; 每月 2000 代码补全&#xff0c;帮助开发者快速完成代码编写。 每月 …

第 10 课 Python 内置函数 (增补)

1.enumerate enumerate() 接受一个可迭代对象作为输入&#xff0c;并返回一个枚举对象这个枚举对象包含了原始可迭代对象中的每个元素以及对应的索引它允许在循环中同时获取索引和值&#xff0c;这对于需要索引的情况非常方便 作用&#xff1a;在循环中需要同时访问索引和值时非…

GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)

参考程序&#xff1a; #include <cstdio> using namespace std; const int N 2e5 5; const int mod 1e9 7; int n, a, b, c; int f[N << 1]; int ans; int main() {scanf("%d%d%d%d", &n, &a, &b, &c);f[N n] 1;for (int i n; i…

【Block总结】DynamicFilter,动态滤波器降低计算复杂度,替换传统的MHSA|即插即用

论文信息 标题: FFT-based Dynamic Token Mixer for Vision 论文链接: https://arxiv.org/pdf/2303.03932 关键词: 深度学习、计算机视觉、对象检测、分割 GitHub链接: https://github.com/okojoalg/dfformer 创新点 本论文提出了一种新的标记混合器&#xff08;token mix…

【Go语言圣经】第五节:函数

第五章&#xff1a;函数 5.1 函数声明 和其它语言类似&#xff0c;Golang 的函数声明包括函数名、形参列表、返回值列表&#xff08;可省略&#xff09;以及函数体&#xff1a; func name(parameter-list) (result-list) {/* ... Body ... */ }需要注意的是&#xff0c;函数…

性能优化案例:通过合理设置spark.default.parallelism参数的值来优化PySpark程序的性能

在 PySpark 中&#xff0c;spark.default.parallelism 是一个关键参数&#xff0c;直接影响作业的并行度和资源利用率。 通过合理设置 spark.default.parallelism 并结合数据特征调整&#xff0c;可显著提升 PySpark 作业的并行效率和资源利用率。建议在开发和生产环境中进行多…