STC8G1K08A串口收发测试程序:基于库函数的实现
针对我这种小白,想快速上手,又不想操作寄存器、嫌麻烦的,
使用库函数版本更方便更直接,并且有实例程序!!!
首先,我们需要库函数,这里提供一下百度云下载链接:
链接:https://pan.baidu.com/s/1QJzxtqpf8kFvx1miT2eRsQ
提取码:STC8
源链接为自此网站:
【STC8G1K08A-SOP8】芯片只有串口1(P3.0和P3.1),定时器只有0和1;
不要用ISP软件里面的“串口1例程”,那个程序里用的是定时器2,会导致无法运行
嫌麻烦的小伙伴,已经为你准备好了工程文件:
链接:https://pan.baidu.com/s/12JCqYxqiNNYvAPsCSk7fRw?pwd=stc8
提取码:stc8
附上代码:
【注意】原程序COMx_InitStructure.UART_BRT_Use = BRT_Timer2;
这里要改为COMx_InitStructure.UART_BRT_Use = BRT_Timer2;
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
/*---------------------------------------------------------------------*/
#include "config.h"
#include "gpio.h"
#include "UART.h"
#include "delay.h"
/************* 功能说明 **************
本例程基于STC8H8K64U为主控芯片的实验箱8进行编写测试,STC8G、STC8H系列芯片可通用参考.
双串口全双工中断方式收发通讯程序。
通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回, 默认波特率:115200,N,8,1.
通过开启 UART.h 头文件里面的 UART1~UART4 定义,启动不同通道的串口通信。
下载时, 选择时钟 22.1184MHz (用户可在"config.h"修改频率).
******************************************/
/************* 本地常量声明 **************/
/************* 本地变量声明 **************/
/************* 本地函数声明 **************/
/************* 外部函数和变量声明 *****************/
/******************* IO配置函数 *******************/
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //结构定义
GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //初始化
}
/*************** 串口初始化函数 *****************/
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 = Polity_0; //指定中断优先级(低到高)
Polity_0,Polity_1,Polity_2,Polity_3
COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //切换端口,
UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
UART_Configuration(UART1, &COMx_InitStructure); //初始化串口1
UART1,UART2,UART3,UART4
PrintString1("STC8H8K64U UART1 Test Programme!\r\n"); //UART1发送一个字符串
}
/**********************************************/
void main(void)
{
u8 i;
GPIO_config();
UART_config();
EA = 1;
while (1)
{
delay_ms(1);
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;
}
}
}
}
测试效果: