STC8增强型单片机开发【串口调试UART⭐⭐】

目录

一、引言

二、UART基础知识

三、STC8 UART配置

四、代码示例

上列代码中所需的库函数文件:

引入库函数的流程:

 五、总结


一、引言

在单片机开发中,串口调试(UART)是一种常用的通信方式,用于实现单片机与PC或其他设备之间的数据交换。STC8增强型单片机作为一款功能强大的微控制器,其内置的UART模块为开发者提供了便捷的串口通信功能。本文将详细介绍STC8增强型单片机UART模块的使用方法,并通过代码示例展示如何实现串口调试。

二、UART基础知识

UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发传输器,是一种异步串行通信协议。UART通信包括两个主要部分:发送(TX)和接收(RX)。在UART通信中,数据以字节为单位进行传输,每个字节包括起始位、数据位、可选的校验位和停止位。

三、STC8 UART配置

STC8增强型单片机的UART模块可以通过配置相关寄存器来实现不同的通信参数设置,如波特率、数据位、停止位和校验位等。以下是一个典型的UART配置步骤:

  1. 设置波特率:通过配置波特率生成器相关寄存器,设置UART通信的波特率。
  2. 设置数据格式:配置数据位、停止位和校验位等参数。
  3. 启用UART发送和接收功能:设置相关控制位,使能UART模块的发送和接收功能。

四、代码示例

以下是一个基于STC8增强型单片机的UART通信示例代码,用于实现串口调试功能:

#include "STC8G_H_GPIO.h"
#include "STC8G_H_UART.h"
#include "STC8G_H_Switch.h"
#include "STC8G_H_NVIC.h"
#include "STC8G_H_Delay.h"// 指定P3端口下的0号引脚和1号引脚为准双向模式   p3.0 和 p3.1默认是准双向模式,可以不配置
void GPIO_config(void) {GPIO_InitTypeDef	init;		//结构定义init.Pin  = GPIO_Pin_0 | GPIO_Pin_1;		//指定要初始化的IO,init.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P3, &init);//初始化 参数一:端口,参数二:结构体地址init.Pin  = GPIO_Pin_3;		//指定要初始化的IO,init.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P5, &init);//初始化 参数一:端口,参数二:结构体地址
}// 串口调试环境
void UART_config() {COMx_InitDefine init; // 结构定义init.UART_Mode = UART_8bit_BRTx;	//模式, UART_8bit_BRTx 8位数据,可变波特率         UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxinit.UART_BRT_Use = BRT_Timer1;		//使用波特率,   BRT_Timer1 = 1,BRT_Timer2,BRT_Timer3,BRT_Timer4init.UART_BaudRate = 115200ul;		//波特率, 	   一般 110 ~ 115200// init.Morecommunicate;					//一般不使用,多机通讯允许, ENABLE 允许,DISABLE 不允许init.UART_RxEnable = ENABLE;			//允许接收,   ENABLE 允许,DISABLEinit.BaudRateDouble = DISABLE;		//波特率加倍, ENABLE,DISABLE 不允许UART_Configuration(UART1, &init); // UART_Configuration(参数1:初始化串口,参数2:结构体地址)// 引脚选择UART1_SW(UART1_SW_P30_P31);  // 指定UART1串口的引脚为p30,p32// 中断NVIC_UART1_Init(ENABLE,Priority_1);  // 参数一:允许中断,参数二: 中断等级}// 解析数据
void no_receive_msg() {int i;  // 初始化下标for(i = 0; i < COM1.RX_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);  // 该数组中的每个数据都是u8类型的数据// 判断发送过来的数据是1,还是0if(RX1_Buffer[i] == 0x01) {P53 = 1;    // 开灯} else if(RX1_Buffer[i] == 0x00) {P53 = 0;		// 熄灯}}}int main() {EA = 1;  // 开启系统总中断// 1. 初始化IO口的工作模式GPIO_config();// 2. 配置UART工作的参数UART_config();// 3. 发数据TX1_write2buff(0x24); // 串口1 发送数据   发送的是16进制数据PrintString1("hello");// 发送的是字符串的数据printf("你好 \n"); // 发送的是字符串的数据  在STC8G_H_UART.h库文件中#define	PRINTF_SELECT  UART2 改成#define	PRINTF_SELECT  UART1// 4. 收数据while(1) {/*1. UART1接收数据时会把数据存储到RX1_Buffer 数组缓冲区中;2. 接收的数据长度是:RX_Cnt;【注意】: RX_TimeOut:当发送数据(8位)过来时,会将RX_TimeOut设置为一个大于0的数。如果还有数据,下一个8位数据过来后,还会将RX_TimeOut设置为一个大于0的数,如果没有数据了,就不会再修改RX_TimeOut的数值了。*/// 4.1 确认是否发完数据了?RX_TimeOut被减为0时,数据就发完了if(COM1.RX_TimeOut > 0) { // 来数据了if((--COM1.RX_TimeOut) == 0) {// 数据发完了,开始解析数据// 4.2 判断发送过来的数据长度是否大于0if(COM1.RX_Cnt > 0) {// 4.3 如果大于0 接收数据// printf("receive!\n");no_receive_msg();   // 解析数据COM1.RX_Cnt = 0;}}}delay_ms(10);}
}
上列代码中所需的库函数文件:

引入库函数的流程:

STC8增强型单片机开发 【GPIO的理解⭐⭐】icon-default.png?t=N7T8https://blog.csdn.net/weixin_68429349/article/details/138625351这篇文章中我提到了如何下载库函数,所以就不重复了,现在就当已经拥有了库函数文件。

这是我下载的库函数文件部分截图,根据自己所需复制到自己的项目中:

复制完毕:

进入编辑器:

 

 

【注意】: 我在上方代码中注释掉了一个printf(xxx)的代码,如果想用printf()进行输出可进入STC8G_H_UART.h这个文件中修改配置即可使用。

原本的样子:

修改之后:

此处因为我使用的串口是UART1,所以我改为UART1,根据自己的情况进行修改。

 五、总结

本文详细介绍了STC8增强型单片机UART模块的使用方法和串口调试功能的实现。通过配置UART相关寄存器并编写相应的发送和接收函数,我们可以实现单片机与PC或其他设备之间的数据交换。在实际开发中,我们可以利用串口调试功能来监控单片机的运行状态和调试程序中的错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LC719

719. 找出第 K 小的数对距离 719. 找出第 K 小的数对距离 - 力扣&#xff08;LeetCode&#xff09; 数对 (a,b) 由整数 a 和 b 组成&#xff0c;其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k &#xff0c;数对由 nums[i] 和 nums[j] 组成且满足 …

linux grep命令搜索指定路径

在Linux开发的过程中grep这个搜索命令&#xff0c;是必不可少的存在。它可以快速的搜索出来我们需要的关键字所在的位置。 有助于我们快速分析定位问题。 下面&#xff0c;分享一个简单实用的小技巧。 原始grep 最终grep grep过滤掉二进制的文件 -I选项 结论 这样子是不…

126.删除链表的倒数第N个节点(力扣)

题目描述 代码解决&#xff08;双指针&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, Li…

【QT教程】QT6信号与槽 QT信号与槽

QT6信号与槽 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视…

C++-Primer-Plus 习题解答(第十六章-string类和标准模板库)

题目&#xff1a;16.1 回文指的是顺读和逆读都一样的字符串。例如&#xff0c;“tot”和“otto”都 是简短的回文。编写一个程序&#xff0c;让用户输入字符串&#xff0c;并将字符串引用传 递给一个bool函数。如果字符串是回文&#xff0c;该函数将返回true&#xff0c;否则返…

全视通助力珠海市井岸镇卫生院新院,建设智慧病房

5月6日&#xff0c;位于珠海市斗门区的井岸镇卫生院新院正式启用&#xff0c;面向市民开诊。新院各诊区就医秩序井然&#xff0c;总体情况良好。据统计&#xff0c;截至开诊当天11点30分&#xff0c;新院门诊共接诊347人次&#xff0c;预防接种81人次&#xff0c;儿童体检33人次…

网络相关笔记

IPv4地址 IPv4地址通常以“点分十进制”形式书写&#xff0c;即四个0-255之间的十进制数&#xff0c;各数之间用英文句点&#xff08;.&#xff09;分隔&#xff0c;例如&#xff1a;192.0.2.1。总共32位的地址空间可以表示大约42亿个不同的地址。 IPv4地址结构包括&#xff…

HashSet扩容机制

HashSet底层是HashMap,第一次添加的时候,table数组扩容到16,临界值是16*加载因子(默认是0.75),到达临界值进行扩容。 HashSet<Integer> hashSet = new HashSet<>();hashSet.add(5);hashSet.add(2);hashSet.add(5);hashSet.add(8);hashSet.add(1);当new一个H…

【C++STL详解(十)】--------priority_queue的模拟实现

目录 前言 一、堆的向上调整算法 二、堆的向下调整算法 三、优先队列模拟实现 Ⅰ、接口总览 Ⅱ、各个接口实现 1.构造函数 2.仿函数 3.向上调整 4.向下调整 5.其余接口 Ⅲ、完成代码 前言 上节内容我们简单的介绍了关于priority_queue的使用内容&#xff0c;我们明白…

秒杀系统架构设计-01

前言 在当今互联网技术快速发展的背景下&#xff0c;电商平台的秒杀活动成为了一个热门话题。特别是对于技术人员而言&#xff0c;如何设计一个高效、可靠的秒杀系统架构&#xff0c;已经成为了面试中的常见问题。这篇博文将围绕秒杀系统架构设计的大纲和授课思路&#xff0c;…

【TypeScript高级类型简介以及使用方法】

TypeScript 的高级类型提供了更复杂的类型系统&#xff0c;允许开发者更精确地描述和约束代码中的数据类型。以下是几种常用的 TypeScript 高级类型及其简介和使用方法&#xff1a; 交叉类型&#xff08;Intersection Types&#xff09; 交叉类型是将多个类型合并为一个类型&…

Baidu Comate 编程插件:提升开发效率的利器

文章目录 引言简介目的 Baidu Comate插件概述定义与功能市场现状竞品分析 安装与配置VsCode 安装&#xff1a;注意事项 版本选择 核心特性详解功能介绍代码生成实时续写错误纠正 使用体验体验地址 引言 简介 基于文心大模型&#xff0c;结合百度积累多年的编程现场大数据和外…

三维dp,LeetCode 741. 摘樱桃

一、题目 1、题目描述 给你一个 n x n 的网格 grid &#xff0c;代表一块樱桃地&#xff0c;每个格子由以下三种数字的一种来表示&#xff1a; 0 表示这个格子是空的&#xff0c;所以你可以穿过它。1 表示这个格子里装着一个樱桃&#xff0c;你可以摘到樱桃然后穿过它。-1 表示…

设计一个people类 如何输入用户自定义个数的对象?

题目: 设计一个People 类&#xff0c;该类的数据成员有姓名、年龄、身高、体重和人数&#xff0c;其中人数为静态数据成员&#xff0c;成员函数有构造函数、显示和显示人数。其中构造函数由参数姓名、年龄、身高和体重来构造对象&#xff1b;显示函数用于显示人的姓名、年龄、…

PDF批量编辑:PDF转HTML批量操作技巧,提升文档格式转换效率

在数字化办公日益普及的今天&#xff0c;PDF&#xff08;Portable Document Format&#xff09;作为一种跨平台的文件格式&#xff0c;广泛应用于各种文档的存储和传输。然而&#xff0c;PDF文件的不可编辑性使得在某些情况下&#xff0c;我们需要将其转换为HTML格式以便更好地…

蓝桥杯备赛1.统计单词数

题目链接&#xff1a;P1308 [NOIP2011 普及组] 统计单词数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> #define int long long #define endl \n const int N 1e510; using namespace std; int a[N]; signed main() {std::ios::sync_with_st…

【国产SSL】哪家SSL证书可以保证数据不出境,是在国内验签

随着网络安全的重视&#xff0c;网站安装SSL证书已经是标配了。但是为什么目前常见的SSL证书都是国外的&#xff1f;数据受国外掌控&#xff0c;安全吗&#xff1f;那么哪家国产品牌是可以保证数据不出境的呢&#xff1f; 为什么目前常见的SSL证书都是国外的&#xff1f; 原因…

您的计算机已被360勒索病毒感染?恢复您的数据的方法在这里!

引言 .360勒索病毒&#xff0c;作为BeijingCrypt勒索病毒家族的一员&#xff0c;因其独特的加密技术和狡猾的传播方式&#xff0c;已成为网络安全领域的重大威胁。它不仅能加密用户的重要文件&#xff0c;使文件无法被正常访问和使用&#xff0c;还可能进一步破坏系统&#xf…

ssh连接服务器教程,账号密码登陆和通过密钥直接登陆

ssh如何连接服务器&#xff1f; 两种连接方式 通过账号密码登陆通过密钥直接登陆 通过账号密码登陆 在终端使用命令登陆&#xff1a;ssh [服务器用户名][服务器ip或服务器域名]之后输入服务器用户密码即可登陆 通过密钥直接登陆 首先在本地创建自己的私钥公钥&#xff0c…

Java苍穹外卖05-订单状态定时处理-数据统计-导出excel

一、订单状态定时处理 1.Spring Task ①介绍 应用场景&#xff1a; ②cron表达式 https://cron.qqe2.com/ ③入门案例 2.需求分析 3.代码开发 每一分钟检查是否存在超时15分钟的订单 每天凌晨一点处理上一条处于派送中的订单 mapper&#xff1a; 二、来单提醒、客户催单 1…