STM32F103ZET6单片机双串口互发程序设计与实现

2023-05-16

STM32库函数开发系列文章目录

第一篇:STM32F103ZET6单片机双串口互发程序设计与实现


文章目录

  • STM32库函数开发系列文章目录
  • 前言
  • 一、STM32F103ZET6单片机双串口互发程序设计与实现是什么?
  • 二、使用步骤
    • 1.下载程序
    • 2.测试步骤和程序说明
  • 总结


前言

    daodanjishui物联网核心原创技术之STM32F103ZET6单片机双串口互发程序设计与实现。


一、STM32F103ZET6单片机双串口互发程序设计与实现是什么?

    单片机初学者用串口来调试程序是非常方便的,用什么仿真器,用什么寄存器等等都不如串口打印来得方便快捷。正点原子官方出品的串口调试工具也涉及到串口调试。不过我这个串口互发程序属于自己原创出品,主要当时用STM32的串口连接ESP8266的时候发AT指令太麻烦了,先用串口调试助手接USB转TTL给ESP8266发AT指令,然后再在单片机编写串口发送程序发送AT指令,最后在单片机编写串口接收程序接收ESP8266的数据。
    后来就设计出一个串口互发程序来加速程序开发进程,直接给串口2发送AT指令,然后单片机接收到串口2的指令之后转发给串口1直接跟ESP8266通信。后期智能小车的设计中也直接利用了这个技术,让串口蓝牙和串口wifi的数据都可以实现串口互发。

二、使用步骤

1.下载程序

代码如下(示例):

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"
//ALIENTEK战舰STM32开发板
//串口实验  
//技术支持:daodanjishui 
 int main(void)
 {		
 	u8 t;
	u8 len;	
  u8 len2;	
	delay_init();	    	 //延时函数初始化	  
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(9600);	 //串口初始化为9600
	
  uart2_init(9600);
 	//LED_Init();			     //LED端口初始化
	//KEY_Init();          //初始化与按键连接的硬件接口
 	while(1)
	{
		if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			
			/* //因为我这里要把气象站的数据传回来,所以不能直接返回数据给气象站,否则可能出错
			printf("电脑 send to串口1的数据为:\r\n");
			for(t=0;t<len;t++)
			{
				USART_SendData(USART1, USART_RX_BUF[t]);//单片机通过串口1发送数据给电脑
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
			  //printf("\r\n发送成功\r\n");//插入换行
			}
      printf("\r\n");//插入换行
			*/
			
			
			
			
      u2_printf("电脑 send to串口2的数据为:\r\n");		
			for(t=0;t<len;t++)
			{
				USART_SendData(USART2, USART_RX_BUF[t]);//将串口1收到的数据转发给串口2输出
				while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
			}
			u2_printf("\r\n");//插入换行

			
			USART_RX_STA=0;
		} 
		
		
		
		
		if(USART2_RX_STA&0x8000)
		{					   
			len2=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
			
      u2_printf("电脑 send to串口2的数据为:\r\n");
			for(t=0;t<len2;t++)
			{
				USART_SendData(USART2, USART2_RX_BUF[t]);//单片机通过串口2给电脑发数据
				while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
			}
			u2_printf("\r\n");//插入换行		
			
			
			
			
      //printf("电脑 send to串口1的数据为:\r\n");
      printf("\r\n");//作为指令响应的开头		
			for(t=0;t<len2;t++)
			{
				USART_SendData(USART1, USART2_RX_BUF[t]);//将串口2收到的数据转发给串口1输出
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
			}			
			printf("\r\n");//插入换行
			
			USART2_RX_STA=0;
		} 
	}	 
 }


2.测试步骤和程序说明

为什么用51单片机调试串口蓝牙模块或者是串口wifi模块很困难呢?因为串口只有一个,串口一旦用于与模块通信之后,就没有办法进行调试信息的打印了,这次分享的程序是基于stm32f103zet6单片机,串口1和串口2的信息可以互发,举一个例子说明:

这里面 写了串口1 和串口2

串口一的打印语句是printf()

串口二的打印语句是u2_printf()

串口一接pa9 pa10

串口二接pa2 pa3

这个代码的功能就是双串口的消息互相发送
在这里插入图片描述

比如电脑给串口1发送 aaa,则单片机通过串口1和串口2向电脑发送aaa,在电脑的串口调试助手可以看出来

比如电脑给串口2发送 bbb,则单片机通过串口1和串口2向电脑发送bbb,在电脑的串口调试助手可以看出来


总结

    通过修改这套程序,可以让串口蓝牙调试模块或者是串口wifi模块的调试再也不需要用到usb转ttl模块进行测试了,可以直接用单片机两个串口来联合测试,单片机用一个串口接模块,用一个串口接电脑,这样用电脑串口助手给单片机发送AT指令的时候,单片机的串口就会将AT指令通过另一个串口转发到模块上,同时模块返回的信息也可以打印回电脑串口调试助手,相当方便。
    后期会推出基于串口蓝牙的智能小车程序,用双串口进行调试。
工程截图:
在这里插入图片描述

源码工程下载链接:https://www.cirmall.com/circuit/19782/
点我直接跳转

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F103ZET6单片机双串口互发程序设计与实现 的相关文章

随机推荐

  • RTMP 推送H265的实现(推流端、服务器、播放端)ffmpeg 播放H265

    众所周知的原因原生的RTMP只支持H264 并不支持H265的传输 xff0c 之前的项目基于海思3531DV200平台的多路输入 多路输出 基于FFMpeg 拉RTSP的流 然后通过海思硬件解码然后在编码成较小的分辨率 通过RTMP推流到
  • Visio画UML类图

    用Visio画UML类图 1 首先创建一个类图 接下来我们要做一下准备工作 xff0c 因为我们这里用了PSDK中的POINT类型 xff0c 在种数据类型在visio数据类型中找不到 xff0c 所以我们先得追加这个数据类型 为了便于管理
  • 二维数组的输入、输出、转置

    这里我将在二维数组中的一些基本操作进行一次整理 xff1a 编码思路 xff1a 1 inputTwoArry 输入函数 用于二维数组的初始化 xff08 也就是赋值 xff09 实现 xff1a 给函数中传入要初始化数组的地址 xff0c
  • 输入一句话,找出其中最长的单词,并输出

    理解题意 xff1a 1 先输入一句话 2 在这句话中找到最长的那个单词并输出显示 这个题是我们老师上课的时候给我们留的作业 因为刚好学过了二维数组所以果断采用二维数组来解题 个人觉得 xff0c 这个逻辑思路其实相较一维数组来解会更简单一
  • C语言:将学生信息存储到文件中

    描述 xff1a 从键盘输入两个学生的有关数据 xff0c 然后把它们转存到磁盘文件上去 基础知识点 xff1a 1 定义结构体变量 xff0c 存储复杂一点的变量 xff08 对象 xff09 2 用到了C语言中对文件的处理 3 排序 文
  • Maven的安装、配置以及在Eclipse中安装maven插件

    一 需要准备的东西 xff08 原文链接 xff09 1 首先确保安装了JDK xff0c 并且成功配置了JDK的环境变量 2 已安装Eclipse 3 Maven程序包 二 maven下载与安装 1 前往https maven apach
  • ros多机通信配置

    ros多机通信配置 xff0c 以两台计算机为例 xff0c 主机hostname为master从机hostname为slaver 1 在主机和从机 etc hosts内添加ip和hostname 例如两台计算机ip和hostname分别为
  • RS422接线方法

  • ORB-SLAM2的编译运行以及TUM数据集测试

    近段时间一直在学习高翔博士的 视觉SLAM十四讲 xff0c 学了以后发现自己欠缺的东西实在太多 xff0c 好多都需要深入系统的学习 ORB SLAM2是一套完整的SLAM方案 xff0c 提供了单目 xff0c 双目和RGB D三种接口
  • 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

    回到目录 写在前面 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU紧耦合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09
  • 视觉SLAM十四讲(第二版)章节总结+课后习题分析

    感谢博主nullwh 的分享 xff0c 原文链接 视觉SLAM十四讲 视觉SLAM十四讲 第二版 笔记及课后习题 xff08 第一讲 xff09 视觉SLAM十四讲 第二版 笔记及课后习题 xff08 第二讲 xff09 视觉SLAM十四
  • FFMPEG 编解码失败 non-existing PPS 0 referenced

    最近在尝试用ffmpeg进行编解码 大部分的rtsp拉流正常 编解码正常 但是有的rtsp不能解码 提示如下 xff1a 后来把把packet数据打印出来发现是没有sps pps信息 导致 ffmpeg不能正常解码 程序里面 经过测试 把
  • ROS主从机配置

    目标 xff1a 小车上运行SLAM算法 xff0c 在PC上使用rviz可视化观察 第一步 xff1a 分别在两台机器上使用 hostname 指令查看用户名 ifconfig 指令查看ip地址 wlp3s0是我的pc的无线网卡 xff0
  • Docker入门指南

    https yeasy gitbook io docker practice
  • STL迭代器模版详解

    1 STL iterator迭代器 STL xff08 Standard Template Library xff0c 标准模板库 是惠普实验室开发的一系列软件的统称 它是由Alexander Stepanov Meng Lee和David
  • 4种YOLO目标检测的C++和Python两种版本实现

    本文原创首发于极市平台公众号 xff0c 如需转载请私信作者 2020年 xff0c 新出了几个新版本的YOLO目标检测 xff0c 在微信朋友圈里转发的最多的有YOLOv4 xff0c Yolo Fastest xff0c YOLObil
  • Activity的任务栈Task以及启动模式与Intent的Flag详解

    什么是任务栈 Task 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity 这些 Activity 按照各自的打开顺序排列在堆栈 xff08 即 返回栈 xff09 中 其实就是以栈的结构 先进后出 将依次打
  • 什么是标记化?令牌?

    什么是标记化 xff1f 标记化就是 xff1a 将敏感数据元素 xff08 例如银行帐号 xff09 替换为非敏感替代项 xff08 称为令牌 xff09 令牌是一个随机数据字符串 xff0c 没有基本或可利用的值或含义 它是一个唯一的标
  • 如何使用c语言解析httppost请求

    头文件 ifndef UPLOAD define UPLOAD include 34 fastcgi fcgiapp h 34 include 34 sysinc h 34 ifdef WIN32 def GRCALL the callin
  • STM32F103ZET6单片机双串口互发程序设计与实现

    STM32库函数开发系列文章目录 第一篇 xff1a STM32F103ZET6单片机双串口互发程序设计与实现 文章目录 STM32库函数开发系列文章目录前言一 STM32F103ZET6单片机双串口互发程序设计与实现是什么 xff1f 二