STC单片机如何快速配置和部署一个带串口调试输出的工程模板

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC单片机如何快速配置和部署一个带串口调试输出的工程模板相关的知识,希望对你有一定的参考价值。

STC单片机如何快速配置和部署一个带串口调试输出的工程模板


  • 本篇文章主要讲在Keil环境下的工程建立和调试串口输出相关代码的建立过程,不涉及其他内容的延伸,本文不考虑外设使用紧张的情况下使用此方法来配置工程。

配置前的准备工作

  1. 对工程建立前,需要对项目工程所需要使用的STC单片机型号有了解。
  2. 对所使用的STC 单片机的晶振源需要有所了解。
  3. STC-ISP软件

第一步确定单片机型号

建立工程时,你要确定你要选择哪款单片机型号,这一点,不用说,大家在建工程时都需要选择的,也没有什么可解释的。

确定晶振源

  • 晶振要素:晶振源、晶振频率

单片机是使用外部晶振还是内部晶振。STC有些系列是自带内部晶振源的(STC15),确定晶振源后,需要确定晶振频率,还有接下来就确定串口的波特率。在没有特殊要求的情况下,尽量选择误差率比较小的波特率,误差越小,在调试串口信息输出时,在排除其他因素影响情况下,乱码率就少。

利用STC-ISP软件生成串口初始化相关代码

  • 如果单片机有独立波特率发生器资源的,尽量选择独立波特率发生器,这样就可以不占用一个定时器资源。如果没有独立波特率发生器的,选择定时器时,尽量选择自动重载的。
  • 定时器时钟是否分频,由所选单片机确定,有1T的单片机也12T的单片机,根据所使用的具体单片机型号决定。
  • 特别注意STC15W408AS 只有定时器0和定时器2,在STC-ISP上面只能定时器2可以用来作为波特率发生器使用,没有定时器1

确定好前面的单片机型号和晶振源后,建立一个keil工程

//#include <STC12C5A60S2.H>
#include <STC8.H>
#include "intrins.h"//如果延时函数当中所用了nop()就需要添加此头文件
#include <stdio.h> 	       // 为使用KEIL自带的库函数printf而加入

void UartInit(void)		//19200bps@32MHz

	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xCC;		//设置定时初始值
	TH1 = 0xCC;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
	TI=1;			// 很关键,使用printf函数时必须有此命令


void Delay1000ms()		//@32MHz

	unsigned char i, j, k;

	_nop_();
	i = 163;
	j = 87;
	k = 1;
	do
	
		do
		
			while (--k);
		 while (--j);
	 while (--i);



void main()

	UartInit();
//	EA =1;//这一句加不加,实际测试都可以输出
	 while(1)
		 	
				printf ("perseverance51 \\n"); 
				Delay1000ms();
				printf ("hello world! \\n"); 
	

如果工程去除延时函数,仅保留串口配置的代码,其实使用寄存器这样定义,代码量是非常少的。主要原因是,使用了定时器自动重装载,省去了串口输入信息,如果要接受输入信息需要添加4号中断代码,RI寄存器标志位判断,以及相关业务代码编写,这里仅作调试输出内容的部署,就省掉了。

  • 串口打印信息

串口初始化代码说明

这部分代码是根据自身所使用的单片机型号和晶振频率以及所选波特率决定的,每个人的这部分代码配置是不一样的,切记不可照搬。在STC-ISP生成的代码里面,最后一行加上TI=1;

void UartInit(void)		//19200bps@32MHz

	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xCC;		//设置定时初始值
	TH1 = 0xCC;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
	TI=1;			// 很关键,使用printf函数时必须有此命令

以上是关于STC单片机如何快速配置和部署一个带串口调试输出的工程模板的主要内容,如果未能解决你的问题,请参考以下文章

STC15双串口printf调试输出案例

STC15不同配置模式下的串口输出方式总结

STC15不同配置模式下的串口输出方式总结

stc单片机串口调试的小程序,但是在串口调试助手里,显示接收不到数据,希望大虾们帮忙解决下,下面是程序

STC单片机3路PWM波形输出并串口打印当前脉冲值

STC单片机STC15单片机读取MPU6050模块数据并串口输出