STC32G单片机的开发(3)串口的调试

前言

说到入门一款单片机,如果有显示屏调试就更好了,如果没有显示屏使用串口就尤为关键了,所以我们这一节来看一下串口的相关内容。

寄存器说明

P_SW2像STM32一样,STC32的引脚可以复用映射到不同的引脚上哈,此寄存器是配置串口所用IO口的,我们使用P30和P31,因此将S1_S配置位00即可。

SCON:这边我们使用串口调试就使用一下串口的发送作用,我们将串口配置位模式1,即将这个寄存器的SM0和SM1位配置为0和1即可,还用以及B0位TI我们使用到发送发送完记得要软件手动清零

PCON:PCON寄存器可以加倍波特率这边我们用不到就先不配置了哈


AUXR:这边看到老朋友了,我们这边采用定时器1作为串口的波特率发生器,这个寄存器要配置两个位一是确保定时器开启的是1T模式即我们要对B7位进行修改,另一块,要让B0置0作为波特率发生器

TMOD:说到使用定时器1或0,这边我们就免不了使用这个寄存器,当然这里我们不需要什么配置,我们设置为16位自动重装模式为定时器的模式0,这边默认就是16为重装模式,因此我们可以不对其进行配置哈

TH1&&TL1:我们这边使用的是16为自动重装模式,高八位放TH1中,低八位放TL1中

串口波特率的计算

这边我们查阅官方的手册可以看到这个来计算哈。

代码

(1)初始化代码

大家可看一些寄存器的配置来结合思考哈

#include "USART1.h"
#include "stdio.h"

#define Baudrate        115200UL     //定义所需的波特率
#define TM              (65536 -(24000000/Baudrate/4))//计算时间
void USART1_Init(void)
{
	P_SW1 = (P_SW1 & 0x3f) | 0x00; //&逻辑清空低六位,|逻辑配置高二位为P31和P30为串口通信
	SCON = (SCON & 0x3f) | 0x40; //&逻辑清空低六位,|逻辑配置高二位串口工作模式1可变波特8位数据方式
	AUXR|=0x40;          //定时器1时钟1T模式
	AUXR&=0xFE;          //串口1选择定时器1为波特率发生器
	TL1 = TM;
	TH1 = TM>>8;
	TR1 = 1;			//启动定时器1
}


void USART1_SendByte(uint8_t Byte)
{
	SBUF = Byte; 
	while(TI==0);//等待发送标志位置位,才算成功发送
	TI = 0;//清0标志位
}

(2)串口调试实现代码

这边我去查了一下官方的例程使用printf但是却不知怎么的没有效果,于是我自己写了个PrintString的函数来支持printf函数的效果

void PrintString1(uint8_t *str)
{
    for(;*str!= 0;str++)
	{	
		USART1_SendByte(*str); 
	}
}
void main()
{

     char Text[30];
     uint8_t count=0;
     while(1)
     {
         PrintString1("Hello World!\r\n");
         sprintf(Text,"Count:%d\r\n",count);//使用sprintf将float型和int型转换为字符串
         PrintString1(Text);
         count++;
         Delay_ms(1000);
     }
}

运行效果

最后也通过上位机来和串口成功实现通信

用什么错误的地方也请大家指出,一起交流学习哈
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值