UART串口常用库函数(STC8系列)
UART串口常用库函数(STC8系列)
STC8系列单片机通常使用标准库或自定义库操作UART串口。以下是常见的库函数及其功能说明:
头文件
#include "UART.h"
#include "NVIC.h"
#include "Switch.h"
初始化函数
UART_Init()
:配置串口工作模式、波特率等参数。
- 参数:波特率(如115200 )、数据位(8位)、停止位(1位)、校验位(无)。
- 示例代码: UART1以此类推的修改
void UART_config(void) {// >>> 记得添加 NVIC.c, UART.c, UART_Isr.c <<<COMx_InitDefine COMx_InitStructure; //结构定义COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use = BRT_Timer1; //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 一般 110 ~ 115200COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLECOMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLEUART_Configuration(UART1, &COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4NVIC_UART1_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3UART1_SW(UART1_SW_P30_P31); // 引脚选择, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
}
发送数据函数
TX1_write2buff(xx);// 写一个byte
PrintString1(""); // 写字符串
接收数据函数
//超时计数if(--COM1.RX_TimeOut == 0) {if(COM1.RX_Cnt > 0) {// 这里处理收到的数据,做具体的逻辑,可以调用自己的on_uart1_recvfor(i=0; i<COM1.RX_Cnt; i++) {// RX1_Buffer[i]存的是接收的每个字节,写出用 TX1_write2buff}}COM1.RX_Cnt = 0;}
}// 不要处理的太快
delay_ms(10);
查询接收状态函数
UART_CheckReceive()
:检查是否有数据到达。
- 返回值:
1
表示有数据,0
表示无数据。 - 示例代码:
bit UART_CheckReceive() {return RI; // RI=1时表示收到数据
}
配置printf
#define UART1 1 //使用哪些串口就开对应的定义,不用的串口可屏蔽掉定义,节省资源
//#define UART2 2
//#define UART3 3
//#define UART4 4
#define PRINTF_SELECT UART1 //选择 printf 函数所使用的串口,参数 UART1~UART4
注意事项
- 波特率计算需根据单片机主频调整(如11.0592MHz或24MHz)。
- 多串口型号(如STC8H)可能支持UART1/UART2,需操作额外寄存器(如S2CON)。
- 实际开发中建议参考STC官方库(如
stc8x_uart.h
)。
以上函数需根据具体型号和硬件连接调整。使用STC-ISP工具可生成初始化代码模板。