当前位置: 首页 > news >正文

实现两个开发板的串口通讯(基于STC8实现)

实现两个开发板的串口通讯:开发板1转发数据给开发板2要用UART2,开发板2转发数据给开发板1数据要求用UART2

  • 注意的问题:接线和调试设计问题
    • UART1不用连线,不用连线,只要插上USB线,就已经和电脑连接好了
    • UART1用于PC发送数据,再通过UART2转发另外一个板子

    • 所以说UART1和UART2都要用
  • 开发板1发送消息给开发板2,控制开发板2的灯泡亮或者灭
  • 开发板2发送消息给开发板1,控制开发板1的灯泡亮或者灭
    • 发送0x00,对方灯灭
    • 发送0x01,对方灯亮

在这里插入图片描述
main.c代码

#include	"GPIO.h"
#include	"Delay.h"
#include    "UART.h"
#include	"NVIC.h"
#include    "Switch.h"void GPIO_config(void) {GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义// UART1:P30 P31GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1;		//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P3, &GPIO_InitStructure);//初始化// P53GPIO_InitStructure.Pin  = GPIO_Pin_3;		//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P5, &GPIO_InitStructure);//初始化// UART2:P46 P47GPIO_InitStructure.Pin  = GPIO_Pin_6 | GPIO_Pin_7;		//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P4, &GPIO_InitStructure);//初始化
}/***************  串口初始化函数 *****************/
void	UART_config(void)
{COMx_InitDefine		COMx_InitStructure;					//结构定义//========================================= UART1COMx_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//========================================= UART2COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;	//模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use   = BRT_Timer2;			//选择波特率发生器, 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(UART2, &COMx_InitStructure);		//初始化串口1 UART1,UART2,UART3,UART4NVIC_UART2_Init(ENABLE,Priority_1);		//中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3UART2_SW(UART2_SW_P46_P47);		//UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
}// A板子从UART1收的数据,通过UART2发送给B板子
void  on_uart1_recv(u8 buf1) {TX2_write2buff(buf1);
}// B板子从UART2收的数据,通过UART1发送给PC
void  on_uart2_recv(u8 buf2) {TX1_write2buff(buf2);if (buf2 == 0x00) {     // 灭P53 = 0;} else if (buf2 == 0x01) {      // 亮P53 = 1;}
}void main() {u8 i;// 配置GPIO_config();UART_config();// 全局中断使能(把UART_Isr.c加进来)// 打开中断总开关EA = 1;// P53 默认是灭的P53 = 0;// 死循环while (1) {delay_ms(20);if(COM1.RX_TimeOut > 0) {//超时计数if(--COM1.RX_TimeOut == 0) {if(COM1.RX_Cnt > 0) {for(i=0; i<COM1.RX_Cnt; i++)	{// RX1_Buffer[i]存的是接收的数据// TODO: 做具体的逻辑 on_uart1_recvon_uart1_recv(RX1_Buffer[i]);}}COM1.RX_Cnt = 0;}}if(COM2.RX_TimeOut > 0) {//超时计数if(--COM2.RX_TimeOut == 0) {if(COM2.RX_Cnt > 0) {for(i=0; i<COM2.RX_Cnt; i++)	{// RX2_Buffer[i]存的是接收的数据// TODO: 做具体的逻辑 on_uart2_recvon_uart2_recv(RX2_Buffer[i]);}}COM2.RX_Cnt = 0;}}}
}
http://www.dtcms.com/a/324321.html

相关文章:

  • 复刻苏宁易购(移动端)
  • 【GPT入门】第44课 检查 LlamaFactory微调Llama3的效果
  • cursor, vscode黄色波浪线警告问题
  • React:useEffect 与副作用
  • 小巧实用的工具——ZoomIt
  • 【C++对象诞生全解析】构造函数:从内存布局到高效初始化的终极指南
  • 152-基于CWT-CNN-BiGRU-Attention-SABO-LSSVM对滚动轴承的故障诊断
  • spring-boot-starter-data-redis 与 org.redisson 区别 联系
  • 【递归、搜索与回溯算法】深度优先搜索
  • Text2SQL 自助式数据报表开发(Chat BI)
  • 《解锁 C++ 起源与核心:命名空间用法 + 版本演进全知道》
  • Spring Boot 注解详解:@RequestMapping 的多种用法
  • Docker 跨主机容器之间的通信macvlan
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DHCP欺骗、DHCP饿死)
  • Spring Boot与WebSocket构建物联网实时通信系统
  • LeetCode 子集
  • Java基础-Map接口
  • 香橙派 RK3588 部署 DeepSeek
  • SQL约束:数据完整性的守护者
  • Linux中rsync数据镜像工具的解析与应用实战
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 MySQL 服务器
  • JavaScript防抖与节流:拯救你的网页卡顿危机!
  • GitHub 趋势日报 (2025年08月09日)
  • 通过Certbot自动申请更新HTTPS网站的SSL证书
  • vue中使用h5plus
  • 一些js数组去重的实现算法
  • 黑马SpringBoot+Elasticsearch作业2实战:商品搜索与竞价排名功能实现
  • 使用正则表达式检测Base64字符串并提取图片类型及正文的JavaScript函数,代码精简且高效
  • 250810-OpenWebUI集成Dify应用
  • 《设计模式》策略模式