【STC15】利用库函数实现printf和scanf重载示例模板

【STC15】利用库函数实现printf和scanf重载


  • 这里以STC15F2K60S2功能演示
    在这里插入图片描述

-> 本实例是通过官方库函数示例修改得来,利用串口1中断来收发。

代码说明

1.晶振频率。由于STC15系列自带内部晶振,在STC-ISP烧录的时候选择内部晶振,也可以使用外部晶振。频率设置:config.h头文件的宏定义出修改:
//#define MAIN_Fosc		16000000L	//定义主时钟
//#define MAIN_Fosc		22118400L	//定义主时钟
//#define MAIN_Fosc		12000000L	//定义主时钟
#define MAIN_Fosc		11059200L	//定义主时钟
//#define MAIN_Fosc		 5529600L	//定义主时钟
//#define MAIN_Fosc		24000000L	//定义主时钟
2. 针对波特率发生器,在选择定时器时,如果是STC15W408AS只能使用2作为波特率发生器,没有定时器1,其他型号的可以在定时器1和定时器2上选择任意选择。
3. 使能的是串口1,波特率115200
/*************  串口1初始化函数 *****************/
void	UART_config(void)
{
	COMx_InitDefine		COMx_InitStructure;					//结构定义
	COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;		//模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
	COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;			//使用波特率,   BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
	COMx_InitStructure.UART_BaudRate  = 115200ul;			//波特率, 一般 110 ~ 115200
	COMx_InitStructure.UART_RxEnable  = ENABLE;				//接收允许,   ENABLE或DISABLE
	COMx_InitStructure.BaudRateDouble = DISABLE;			//波特率加倍, ENABLE或DISABLE
	COMx_InitStructure.UART_Interrupt = ENABLE;				//中断允许,   ENABLE或DISABLE
	COMx_InitStructure.UART_Polity    = PolityLow;			//中断优先级, PolityLow,PolityHigh
	COMx_InitStructure.UART_P_SW      = UART1_SW_P30_P31;	//切换端口,   UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必须使用内部时钟)
	COMx_InitStructure.UART_RXD_TXD_Short = DISABLE;		//内部短路RXD与TXD, 做中继, ENABLE,DISABLE
	USART_Configuration(USART1, &COMx_InitStructure);		//初始化串口1 USART1,USART2

//	PrintString1("STC15W408AS UART1 Test Prgramme!\r\n");	//SUART1发送一个字符串
}
printf函数和scanf函数重载
  • 相关函数在USART.c文件中。
char putchar(char c);//printf重载
char _getkey(void);//scanf
  • 重载函数实现函数
char putchar(char c)
{
TX1_write2buff(c);
return c;
}



char hal_uart_getchar(void)
{
	unsigned char i;
			if(COM1.RX_TimeOut > 0)		//超时计数
		{
			if(--COM1.RX_TimeOut == 0)
			{
				if(COM1.RX_Cnt > 0)
				{
					for(i=0; i<COM1.RX_Cnt; i++)	TX1_write2buff(RX1_Buffer[i]);	//收到的数据原样返回
				}
				COM1.RX_Cnt = 0;
			}
		}
		return i;
}

char _getkey(void)
{
return hal_uart_getchar();
}
编译时出现3条警告说明

在这里插入图片描述

  • 第一条是延时函数没使用。作为模板程序如果移植它用,可能会使用到,就将其保留下来,如果你不想要,可以自己移除掉。
    在这里插入图片描述
  • 另外两处报警是重载函数。

主程序代码

/* 使用printf和scanf进行格式化输入输出  */
#include	"config.h"
#include	"USART1.h"
#include	"delay.h"
#include <stdio.h>//printf/scanf函数


/*************	功能说明	**************

			双串口全双工中断方式收发通讯程序。
STC15W408AS只能使用定时0或2作为波特率发生器,没有定时器1

通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.

******************************************/

/*************	本地常量声明	**************/


/*************	本地变量声明	**************/


/*************	本地函数声明	**************/



/*************  外部函数和变量声明 *****************/


/*************  串口1初始化函数 *****************/
void	UART_config(void)
{
	COMx_InitDefine		COMx_InitStructure;					//结构定义
	COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;		//模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
	COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;			//使用波特率,   BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
	COMx_InitStructure.UART_BaudRate  = 115200ul;			//波特率, 一般 110 ~ 115200
	COMx_InitStructure.UART_RxEnable  = ENABLE;				//接收允许,   ENABLE或DISABLE
	COMx_InitStructure.BaudRateDouble = DISABLE;			//波特率加倍, ENABLE或DISABLE
	COMx_InitStructure.UART_Interrupt = ENABLE;				//中断允许,   ENABLE或DISABLE
	COMx_InitStructure.UART_Polity    = PolityLow;			//中断优先级, PolityLow,PolityHigh
	COMx_InitStructure.UART_P_SW      = UART1_SW_P30_P31;	//切换端口,   UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必须使用内部时钟)
	COMx_InitStructure.UART_RXD_TXD_Short = DISABLE;		//内部短路RXD与TXD, 做中继, ENABLE,DISABLE
	USART_Configuration(USART1, &COMx_InitStructure);		//初始化串口1 USART1,USART2

//	PrintString1("STC15W408AS UART1 Test Prgramme!\r\n");	//SUART1发送一个字符串
}


/**********************************************/
void main(void)
{
	UART_config();
	EA = 1;
	printf("Perseverance51");
	while (1)
	{
	}
}

程序源码

本程序实验在STC15系列使用范围内,如需在其他的型号上使用需要将其移植到对应型号库函数程序中去。而不是将生成的Hex文件烧录到其他型号的单片机上。

链接:https://pan.baidu.com/s/1GN9qnJk9Zriyy1pTaZ_I8g 
提取码:cu3f

  我们的人生路上都有精彩,更多的是平淡。精彩如夜空的流星,总是转瞬即逝;平淡似满天的繁星,看不清哪一颗是自己。流星的精彩,在于消失自己;繁星的平淡,在于沉默无言。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STC15系列库函数与例程测试版v2.0》 是一本关于STC15系列单片机库函数与例程的测试版。 STC15系列单片机是一种常见的单片机系列,广泛应用于各种电子设备中。这本测试版为用户提供了关于STC15系列单片机库函数与例程的详细介绍和测试。 首先,测试版提供了STC15系列单片机库函数的介绍与使用方法。库函数是事先编写好的函数,可以直接调用来完成特定的功能,比如串口通信、定时器控制、I/O口操作等。用户可以通过阅读测试版中的介绍,了解到每个库函数的功能和使用方法。 其次,测试版提供了一系列的例程供用户学习和测试。例程是编写好的完整代码,可以直接下载到STC15系列单片机中执行。例程中包含了各种功能的实现代码,用户可以通过阅读和测试这些例程来学习如何使用库函数来完成特定的任务。 此外,测试版还提供了相关的测试说明和使用指南,帮助用户更好地理解和应用书中的内容。同时,测试版还提供了一些常见问题的解答,以及一些使用技巧和注意事项,以帮助用户更加顺利地使用STC15系列单片机库函数与例程。 总的来说,《STC15系列库函数与例程测试版v2.0》是一本详细介绍STC15系列单片机库函数与例程的测试版。通过阅读和测试这本书,用户可以更好地了解和学习如何使用STC15系列单片机进行开发和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值