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,一经查实,立即删除!

相关文章

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…

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

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;我们明白…

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

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

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

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

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

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

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

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

手撕C语言题典——移除链表元素(单链表)

目录 前言 一.思路 1&#xff09;遍历原链表&#xff0c;找到值为 val 的节点并释放 2&#xff09;创建新链表 二.代码实现 1)大胆去try一下思路 2&#xff09;竟然报错了&#xff1f;&#xff01; 3&#xff09;完善之后的成品代码 搭配食用更佳哦~~ 数据结构之单…

CellChat包文献介绍

Inference and analysis of cell-cell communication using CellChat - PubMed (nih.gov) 目录 在线数据 摘要 基础介绍 分析结果 1&#xff0c;概述 2&#xff0c;识别预测通路 3&#xff0c;连续的信号转导 4&#xff0c;预测空间共定位细胞群之间的关键信号转导事件…

Al Agent:开启智能化未来的关键角色,让机器更智能的为我们服务

文章目录 &#x1f680;Al Agent是什么&#x1f4d5;Al Agent的工作原理与技术&#x1f4aa;Al Agent应用领域&#x1f680;智能家居应用&#x1f308;医疗健康领域⭐金融服务行业&#x1f302;交通运输管理&#x1f3ac;教育培训应用 &#x1f512;Al Agent优势与挑战✊Al Age…

码题杯 世界警察 思想:双指针

https://www.matiji.net/exam/brushquestion/4/4446/16A92C42378232DEB56179D9C70DC45C 双指针 思路是这样的&#xff0c;首先r指针向右走&#xff0c;如果r指针遇到了和l指针一样的&#xff0c;那么l指针就&#xff0c;一直加到r指针的位置&#xff0c;此时a[l]a[r]&#xff0…

Flutter 首次亮相 Google Cloud Next 大会

作者 / Kelvin Boateng Flutter 团队在近期首次参加了 Google Cloud Next 大会&#xff0c;这意味着 Flutter 在开发社区中的影响力正在日益增长。 Google Cloud Next https://cloud.withgoogle.com/next 我们与 Google Cloud、Firebase、Very Good Ventures 和 Serverpod 的团…

双向链表(详解)

在单链表专题中我们提到链表的分类&#xff0c;其中提到了带头双向循环链表&#xff0c;今天小编将详细讲下双向链表。 话不多说&#xff0c;直接上货。 1.双向链表的结构 带头双向循环链表 注意 这几的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;实际前面的在…

【大学物理】东北大学-马文蔚听课笔记

4.1刚体的定轴转动_哔哩哔哩_bilibili 此笔记为课堂学习笔记~ 4.1刚体的定轴转动 基本教学要求 什么时刚体呢&#xff1f; 研究刚体运动切口 平动&#xff1a;刚体中所有的点的运动轨迹都完全相同。 转动&#xff1a;分为&#xffe5;定轴转动和非定轴转动 刚体转动的角速度…

【Unity 2D物理系统:触发】

在Unity的2D物理系统中&#xff0c;触发器&#xff08;Trigger&#xff09;是一种特殊的碰撞检测机制&#xff0c;它允许开发者检测到物体进入或离开特定区域时发生的动作&#xff0c;而不会影响物体的实际物理运动。触发器通常用于非物理交互的场景&#xff0c;如检测玩家进入…

vue3 antd-vue 超简单方式实现a-table跨页勾选

一、效果如下&#xff1a; 第一页勾选了2&#xff0c; 3&#xff0c; 4 翻到第三页勾选24&#xff0c; 25 回显&#xff0c;如比返回第一页的时候触发分页改变&#xff0c; 在映射中的第一页的数据给到a-table绑定的state.selectedRowKeys即可&#xff0c;如下方法 二、勾选思路…

Netty底层数据交互源码分析

文章目录 1. 前题回顾2. 主线流程源码分析3. Netty底层的零拷贝4. ByteBuf内存池设计 书接上文 1. 前题回顾 上一篇博客我们分析了Netty服务端启动的底层原理&#xff0c;主要就是将EventLoop里面的线程注册到了Select中&#xff0c;然后调用select方法监听客户端连接&#xf…