嵌入式课程 之 中断和串口通信实验

2023-05-16

版权归如下公司,禁止非授权转载:

  • 北京西普阳光教育科技股份有限公司(https://www.simpleware.com.cn)
  • 维周机器人科技有限公司(http://www.vejoe.com)

文章目录

    • 【实验目的】
    • 【实验原理】
      • 一、USART接口简介
      • 二、串口通信分类及原理
      • 三、硬件连接和USART库函数介绍
      • 四、软件流程图
    • 【实验环境】
      • 操作系统:
      • 设备简介:
    • 【实验步骤】
      • 一、配置工程环境
      • 二、开启时钟,完成端口初始化
      • 三、编写main函数实现实验要求
      • 四、编译并下载,观察实验现象
    • 【实验思考】
      • 一、选择题
      • 二、简答题
    • 附录:USART相关库函数


【实验目的】

掌握USART接口的基本的和主要指标。
掌握USART接口的编程原理和使用方法。

【实验原理】

STM32的串口非常强大,它不仅支持最基本的通用串口同步、异步通讯,还具有LIN总线功能(局域互联网)、IRDA 功能(红外通讯)、SmartCard功能。

一、USART接口简介

本实验使用的为串口中最基本、最常用的全双工、异步通讯方式,其寄存器说明如表1所示。要配置串口通讯,至少要设置以下几个参数:字长(一次传送的数据长度)、波特率(每秒传输的数据位数)、奇偶校验位、还有停止位。在初始化串口的时候,必然有一个串口初始化结构体,这个结构体的几个成员肯定就是存储这些控制参数的。
在这里插入图片描述
表1 USART相关寄存器

二、串口通信分类及原理

串口通讯分为并行通信和串行通信。并行通信是通过多条数据线来传输数据,所以传输的速度比较快,缺点是不利于长距离传输,串行通信指将数据字节分成位的形式,在一条线上来传输,相比并行通信可以大幅减少成本,但是控制难度较大,串行通信根据传输方向分为单工、半双工和全双工,根据时钟的特性又可以分为同步通信和异步通信。

一般使用异步通信较多,异步通信的原理是将数据以帧的形式传输,每帧间有固定的传输时间间隔,通信中的波特率、数据位、停止位和奇偶校验的参数设置很关键,必须使两个端口的参数匹配后才可以通信。

串行通信中的波特率和比特率:波特率指数据信号对载波的调制速率,波特率的单位是波特(baud),比特率指单位时间内传输的比特数,单位bit/s(bps),而对于USART来说,波特率和比特率是相等的。总之,波特率越大传输速率越快,通过控制时钟可以改变波特率。

数据位是传输数据的部分,停止位都在一帧数据的最后一位表示数据帧传输的结束,而奇偶校验位是用来纠错的,用于判读数据传输过程中是否发生了错误。

三、硬件连接和USART库函数介绍

在这里插入图片描述
图1 电路原理图
STM32芯片有3个同步异步串口和2个异步串口,本实验中使用异步串口的方式进行通讯,连接方式见图1,芯片上的PC10和PC11引脚分别对应异步串口UART4的发送端TX和接收端RX,小车上的电路板已经将这两个引脚引出。
在这里插入图片描述
表2 STM32F103xx芯片引脚功能定义

STM32的芯片引脚和串口的对应关系见上表2(芯片手册P34页),可以看出PC10和PC11引脚的功能分别是异步串口UART4的发送和接收端,为了使用串口通信功能,需要对GPIO和UART4的时钟进行配置。

与串口模块有关的结构体USART_InitTypeDef定义在stm32f10x_usart.h中,库函数USART_Init定义在stm32f10x_usart.c中。
USART_InitTypeDef结构体的配置如下:

typedef struct
{
uint32_t  USART_BaudRate;                // 波特率
uint16_t  USART_WordLength;              // 字长
uint16_t  USART_StopBits;                 // 停止位
uint16_t  USART_Parity;                   // 校验位
uint16_t  USART_Mode;                   // USART 模式
uint16_t  USART_HardwareFlowControl;     // 硬件流控制
} USART_InitTypeDef;

库函数USART_Init的作用是初始化串口参数,配置串口的波特率、数据位、停止位和奇偶校验等参数。

四、软件流程图

图2 系统流程图
系统流程图见图2,使用串口模块时同样要先初始化串口所对应的GPIO引脚,这里使用的是异步串口UART4,它所对应的引脚为PC10和PC11,所以先使能引脚的时钟,设置与串口发送端TX对应的PC10为推挽输出,与串口接收端RX对应的PC11引脚设置为浮空输入,然后初始化GPIO,之后再使能串口UART4的时钟,先将其复位,然后设置波特率、停止位、校验位等参数,最关键的是要重定位fputc函数,因为这里要与电脑通信,所以要将该函数的输出重定向到串口上,这样在使用printf语句时,输出的结果可以通过串口传到电脑端,然后再开启串口中断。最后开启串口进行通信,这样电脑端就可以显示从单片机发送来的信息。

【实验环境】

操作系统:

Windows7/8/10,32bit/64bit

设备简介:

1、自平衡小车,如下图3所示,小车所搭载的电路板已经将STM32芯片上的PC10和PC11引脚引出,测试串口时将电路板和电脑端的usb转TTL模块的GND端连接,TX和RX相互交叉连接,则串口通讯的物理连接就完成了。
在这里插入图片描述在这里插入图片描述
图3 双轮自平衡车和USB转TTL模块
2、ST-Link下载器(包含USB线与下载线),如下图4所示。
在这里插入图片描述
图4 ST-Link下载器与下载线
3、软件:Keil5、串口调试软件。

通过串口功能可以实现STM32单片机和电脑端的异步通讯,例如将单片机的信息输出到电脑端,在电脑端显示通讯结果的软件叫串口调试助手,串口调试助手的参数设置如图5所示。
在这里插入图片描述
图5 串口助手参数配置界面

4、实验场地:无

【实验步骤】

一、配置工程环境

1.1 打开已经建立好的工程模板,在新建立的工程模板中已经添加五个文件夹,分别命名为USER、HARDWARE、SYSTEM、CORE、FWLib文件夹,如下图6所示。其中USER文件夹存放的是主函数,HARDWARE文件夹存放的是本实验对应的硬件设备函数,SYSTEM存放的是本课程所有实验通用的函数,CORE文件夹存放的是启动文件,FWLib文件夹存放的是底层驱动函数。
在这里插入图片描述
图6 工程模板对应的文件夹
1.2 在SYSTEM文件夹下新建两个文件,分别为usart.c和usart.h。分别存放串口USART模块的初始化及配置函数与USART头文件,如图7所示。
在这里插入图片描述
图7 在SYSTEM文件夹下新建usart.c和usart.h文件

二、开启时钟,完成端口初始化

2.1 GPIO时钟使能:调用库函数RCC_APB2PeriphClockCmd()初始化UART4和GPIOC的时钟。

/*声明一个GPIO初始化结构体*/
GPIO_InitTypeDef  GPIO_InitStructure;
/*使能USART4对应的GPIOA时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
2.2设置GPIO端口模式:这是使用GPIOC的PC10和PC11的默认复用UART4的功能,在使用复用功能的时候,要开启相应的功能时钟UART4。
/*USART4_TX对应引脚PC10*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*复用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
/*初始化PC10引脚*/
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*USART4_RX对应引脚PC11*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
/*设置浮空输入*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
/*初始化PC11*/
GPIO_Init(GPIOC, &GPIO_InitStructure);

2.3 UART4外设使能:对UART进行初始化配置。分别配置串口的波特率、传输字长、停止位和校验位等。

/*声明一个串口初始化结构体*/
USART_InitTypeDef  USART_InitStructure;
/*声明一个中断初始化结构体*/ 
NVIC_InitTypeDef  NVIC_InitStructure;
/*使能USART4的时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
/*复位串口4 */ 
USART_DeInit(UART4);

/* USART初始化设置,波特率设置为9600*/
USART_InitStructure.USART_BaudRate = 9600;
/*字长为8位数据格式*/
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
/*一个停止位*/
USART_InitStructure.USART_StopBits = USART_StopBits_1;
/*无奇偶校验位*/
USART_InitStructure.USART_Parity = USART_Parity_No;
/*无硬件数据流控制*/
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
/*收发模式*/
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
/*初始化串口*/
USART_Init(UART4, &USART_InitStructure);
/*开启中断*/
//USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
/*使能串口*/
USART_Cmd(UART4, ENABLE);

2.4中断做初始化。

/* Usart4 NVIC配置*/
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
/*抢占优先级3*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
/*子优先级3*/
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
/*IRQ通道使能*/
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
/*根据指定的参数初始化VIC寄存器*/ 
NVIC_Init(&NVIC_InitStructure); 

2.5 输出:根据选择的串口类型重新定义fputc函数,则调用printf函数可以将结果通过串口打印到电脑端的串口助手上。

/*重定义fputc函数*/
int fputc(int ch, FILE*f)
{
	/*循环发送, 直到发送完毕*/
while(USART_GetFlagStatus(UART4, USART_FLAG_TC)!=Bit_SET);
UART4->DR = (u8)ch;
/*返回要发送的值*/
return ch;
}

三、编写main函数实现实验要求

3.1编写主函数来实现串口通信的功能

#include "delay.h"      //包含延时函数头文件
#include "usart.h"	   //包含串口函数头文件
#include "sys.h"        //包系统函数的头文件
int main(void)
{	  
	/*计数器初始化*/
u16 i = 0;
	/*延时函数初始化*/
	delay_init(); 
	/*设置NVIC中断分组2:2位抢占优先级,2位响应优先级*/
	NVIC_Configuration();
	/*串口初始化波特率为9600*/
	uart_init(9600);
	while(1)
	{
		/*将嵌入式实验输出到串口中,并在电脑端显示结果*/
printf("\r\n 嵌入式实验 \r\n");
/*计数器累加*/
	 	i++;
/*当计数器结果等于20时,改变输出结果*/
		if(i == 20)
		{
			/*串口输出中断和串口操作实验字符串*/
			printf("\r\n 中断和串口操作实验 \r\n");
			/*计数器清零 */
			i = 0; 
		}
		/* 延迟10ms*/
		delay_ms(10);
	}
 }

四、编译并下载,观察实验现象

4.1 本实验采用仿真器为STLink V2,将仿真器与小车相连,注意正负极不要接反,如下图8所示。
在这里插入图片描述
图8 仿真器与下载线连接图
4.2 编译程序:点击如图9所示的编译按键。
在这里插入图片描述
图9 Keil5编译环境下的编译按键
当编译完成后,如果没有问题,Build Output栏会出现无错误、无警告的提示,如图10所示。
在这里插入图片描述
图10 编译通过后Build Output栏提示信息
4.3 下载程序:点击如图所示的下载按键,程序就会下载到STM32的芯片中。下载按键如下图11所示。
在这里插入图片描述
图11 Keil5编译环境下的下载按键
4.4 打开串口调试软件。设置波特率为9600打开串口接受数据,如图12所示
在这里插入图片描述
图12 串口调试助手显示的结果

【实验思考】

一、选择题

题目1:下面哪条语句是设置串口传输字长? (A)
A:USART_InitStructure.USART_WordLength = USART_WordLength_8b;
B:USART_InitStructure.USART_BaudRate = 9600;
C:USART_InitStructure.USART_Mode=USART_Mode_Rx| USART_Mode_Tx;
D:USART_InitStructure.USART_StopBits = USART_StopBits_1;

题目2:在串口配置时将波特率设置为9600,那么在串口助手中应该将波特率设置为多少?(A)
A:9600
B:115200

二、简答题

题目1:在选定串口引脚后,应该如何对引脚进行功能配置选择?

在UART4串口选择管脚后,Tx为发送端,输出引脚,而且现在GPIO是使用复用功能,所以要把它配置为复用推挽输出(GPIO_Mode_AF_PP),而Rx引脚为接收端,输入引脚,所以配置为浮空输入模式GPIO_Mode_IN_FLOATING。

附录:USART相关库函数

在这里插入图片描述

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

嵌入式课程 之 中断和串口通信实验 的相关文章

  • 基于Simulink的FIR滤波器设计与仿真--初识matlab

    一直对信号分析与处理有着比较浓厚的兴趣 xff0c 只可惜数学水平挺一般 xff0c 难以将兴趣发展为job xff0c 因此就蜻蜓点水了 公司里的几乎人人都会simulink xff0c 而我是十足的门外汉 看别人用得行云流水总是挺眼馋的
  • 头文件定义并初始化变量的问题

    一个经典错误 在a h头文件中定义变量temp并初始化 xff0c 即显式初始化 int temp 61 0 xff1b a c b c文件中都包含了a h头文件 xff0c 则在编译时会出现 xff1a multiple definiti
  • 串口调试小节之二 串口通讯原理

    我们以接收方为例 xff0c 详细讲解串口通讯的简单原理 xff0c 一个串口数据的接收情况基本如下 xff1a 主要分了三层 xff1a 1 硬件层 xff1a 负责将比特位转换成字节型数据 xff0c 并且将数据传输的通讯状态记录下来
  • 串口调试小节之三 Linux串口应用层编程注意

    这里不打算很详细的介绍该如何编写Linux 代码 xff0c 这种代码在百度或者开源项目一找一大堆 xff0c 这里只对常用会出错的地方做一些介绍 xff0c 防止掉入这些陷阱 1 关于波特率设置 xff1a 关于波特率设置的部分看起来简单
  • <ROS> 机器人描述--URDF和XACRO

    1 关于URDF的一些杂谈 URDF Unified Robot Description Format 是一种特殊的xml文件格式 作为机器人的一种描述文件 在ROS里面大量使用 接触ROS比较久的同学 应该会经常见到一种类似命名的包 pa
  • 网络基础知识之报文格式介绍

    1 以太网数据帧头部 DMAC xff1a 目的MAC地址 xff0c 长度6个字节 SMAC xff1a 源MAC地址 xff0c 长度6个字节 TYPE xff1a 类型字段 xff0c 表明上层是哪种协议 xff0c IP协议是0x8
  • C# 摘要认证(digest authentication) IETF RFC 2617

    背景 xff1a 最近在对接一个公安局数据接口相关的这块业务 xff0c 基于HTTP RESTFUL的接口API xff0c 请求时需要做用户认证 厂家只给提供了JAVA的demo 由于业务比较分散需要用C 来进行业务交互 解决过程 首先
  • 字节序(大小端)理解

    一 概念 字节序 xff0c 就是 大于一个字节类型的数据在内存中的存放顺序 是在跨平台和网络编程中 xff0c 时常要考虑的问题 二 分类 字节序经常被分为两类 xff1a 1 Big Endian xff08 大端 xff09 xff1
  • HTTP请求报文

    HTTP请求报文 xff1a HTTP请求报文由3部分组成 xff08 请求行 43 请求头 43 请求体 xff09 请求行 xff1a 是请求方法 xff0c GET和POST是最常见的HTTP方法 xff0c 除此以外还包括DELET
  • Python requests HTTP验证登录(解决401错误)

    1 场景 1 xff09 用户输入完网址后 xff0c 浏览器直接弹出需要输入用户名 密码 PS xff1a 此时输入用户名密码即可登录 xff0c 或者直接带着用户名密码访问网站 假设url为 http xxx yyy zzz 用户名为a
  • CANopen学习笔记

    CANopen学习笔记 1 TPDO和RPDO都是针对从站来说的 xff0c 协议上没有有讲任何一个关于主站的概念 xff0c 协议就只是定义从站 xff0c 没有定义主站任何东西 TPDO xff1a 从站 lt 主站 RPDO xff1
  • MS5611气压传感器手册勘误

    说是勘误其实也不能完全算是勘误 xff0c 只能说是防止各位看官对手册的错误解读 前几天调试MS5611这款气压计 xff0c 按照手册来计算发现无论如何气压值都是不对的 xff0c 比如说我这的1020mbar xff08 前几天用BMP
  • 异常处理方式——抛出处理

    异常的处理方式2 抛出处理 throw throws 抛出处理注意的细节 xff1a 1 如果一个方法内部抛出了一个异常对象 xff0c 那麽必须在方法上声明抛出 2 如果调用了一个声明抛出异常类型的方法 xff0c 那么调用者必须要进行处
  • socket实现UDP通信

    UDP与TCP不同 xff0c 是一种无连接的通信方式 xff0c 相比TCP而言更加灵活 利用socket实现UDP的方式相比TCP而言也更加简单 发送方 xff1a 1 初始化套接字 2 创建socket 3 利用sendto发送数据
  • C语言之#define用法入门详解

    一 define的基本语法 在C语言中 xff0c 常量是使用频率很高的一个量 常量是指在程序运行过程中 xff0c 其值不能被改变的量 常量常使用 define来定义 使用 define定义的常量也称为符号常量 xff0c 可以提高程序的
  • 棋盘格自动生成器——四种格式(格雷码棋盘格、圆点、二维码棋盘格)

    棋盘格生成器可以生成上面四种格式的标定板 想要多大想要几行几列都可以动态设置 非常好用 对于自己写代码或用cad画都比较浪费时间 这个生成器可以立刻生成pdf 只要打印机不设置缩放 即可正常尺寸打印 非常非常好用 介绍给大家这个好用的地址
  • python爬虫-验证码的处理

    在爬取网页数据时 xff0c 经常出现需要登录账户且要输入验证码的情况 以http www santostang com wp login php action 61 register该网页为例 xff0c 需要先使用浏览器的检查功能找到f
  • HTTP协议的解码和编码

    HTTP协议的解码和编码 编码规范URL的编码与解码 编码 规范实战 xff1a 使用fiddler来抓住http请求 相当于各省各地的人说不同的话 xff0c 大家互相听不懂 xff0c 那么http就相当于有一个翻译器 xff0c 能够
  • Linux服务器上请求接口说明

    Linux服务器上请求接口说明 一 参数指令说明 X 指定请求方法 x 指定HTTP请求的代理 H 指定请求标头 d 发送POST请求提交的数据 xff0c 使用 d参数后 xff0c 会自动将请求转为POST xff0c HTTP请求会自
  • 编写一个程序,将两个字符串连接起来,不要用stracat 函数

    可能写的不好 xff0c 希望对你们有帮助 include lt stdio h gt int main int a 61 0 b 61 0 c 61 0 m 61 0 i j char str1 80 str2 80 printf 请输入

随机推荐

  • Linux ulimit命令详解

    ulimit 是一个计算机命令 xff0c 用于shell启动进程所占用的资源 xff0c 可用于修改系统资源限制 命令常用参数 H 设置硬资源限制 S 设置软资源限制 a 显示当前所有的资源限制 c size 设置core文件的最大值 单
  • 几种CAN应用层协议介绍

    一 CanOpen n CAL 提供了所有的网络管理服务和报文传送协议 xff0c 但并 没有定义 CMS 对象的内容或者正在通讯的对象的类 型 而这正是 CANopen 切入点 n CANopen 是在 CAL 基础上开发的 xff0c
  • CImage类

    我们知道 xff0c Visual C 43 43 中的CBitmap类的功能简直太弱小了 xff0c 这曾经让Visual C 43 43 在图像处理方面的功能比较尴尬 之前笔记里面 xff0c 我们采用的CBitmap配合GDI进行透明
  • PTA 7-20 表达式转换 (25分)

    算术表达式有前缀表示法 中缀表示法和后缀表示法等形式 日常使用的算术表达式是采用中缀表示法 xff0c 即二元运算符位于两个运算数中间 请设计程序将中缀表达式转换为后缀表达式 输入格式 输入在一行中给出不含空格的中缀表达式 xff0c 可包
  • Template Mode(模板方法)

    结构化程序 程序库开发人员 class Library public void step1 void step3 void step5 应用程序开发人员 class Application piblic bool Step2 bool St
  • Strategy 模式

    enum TaxBase CN Tax US Tax DE Tax class SaleOrder TaxBase tax public if tax 61 61 CN Tax else if tax 61 61 US Tax else i
  • 观察者模式

    在软件的构建过程中 xff0c 我们需要为某些对象建立一种通知依赖关系 一个对象 xff08 目标对象 xff09 发生改变 所有的依赖对象 xff08 观察者对象 xff09 都将得到通知 xff0c 如果依赖关系过于紧密 xff0c 将
  • matlab数据分类 画直方图

    我是刚刚接触matlab的小白 xff0c 在度娘和广大网友的帮助下终于完成了这个小任务 所以想记录下 xff0c 也希望可以帮助那些学习matlab的人 小任务 xff1a 主要对txt文本里的数据 进行处理下 xff0c 然后通过mat
  • 树莓派跑一个简单c++小程序教程

    我用的是树莓派3代b型 xff0c 所使用的是Debian系统的衍生系统raspbian 对系统不太了解不清楚 树莓派开发c 43 43 程序需要的工具有编辑器vim 调试器gdb 编译器gcc或者g 43 43 xff08 大神飘过就行
  • typedef 函数指针用法

    进入正文 xff1a 代码简化 促进跨平台开发的目的 typedef 行为有点像 define 宏 xff0c 用其实际类型替代同义字 不同点 xff1a typedef 在编译时被解释 xff0c 因此让编译器来应付超越预处理器能力的文本
  • 关于红外相机热成像相机的一些sdk使用方法

    将红外热成像相机转化成c格式 xff0c 从而用opencv进行显示 先看一些开发手册的函数 定义一个函数指针 typedef long CBF IR long lData long lParam CBF IR pCBFframe 相机接口
  • opencv显示图像并转换成灰度图(c++) day1

    include lt opencv2 opencv hpp gt include lt iostream gt using namespace cv int main Mat src 61 imread 34 aa jpg 34 Mat g
  • 古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少对

    基础不夯实 xff0c 工作两行泪 include lt stdio h gt int main 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 2 3 5 8 13 21 34 int m 61
  • 如果你还在用STM32F103,那么你OUT了

    自从ARM公司2007年首推出Cortex内核 xff0c ST凭借基于ARM CORTEX M3内核的STM32F1 xff0c 无疑成为了最大的赢家之一 特别是STM32F103系列 xff0c 更是成为市场上最通用的MCU系列之一 不
  • 瑞芯微RK1808开发板之进入系统

    参照RK1808 EVB用户指南 V10 20181226 pdf用户指南配置 文档获取地址https github com rockchip linux docs tree master SoC 20platform 20related
  • 瑞芯微RK1808编译rknn_demo

    操作步骤在ubuntu16 04下编译 官方给的sdk里的rknn demo不能直接编译 缺少一些动态链接库 xff0c 还需要完善一些CMakeLists txt内容 首先在rknn demo下新建一个build 进入 build文件夹下
  • libcurl在嵌入式设备C 的使用

    libcurl在嵌入式设备C 的使用 bingqingsuimeng的专栏 CSDN博客 linux configure prefix 61 root work code curl 7 61 1 curl linux disable sha
  • 某些项目因位于工作空间目录中而被隐藏

    今天晚上突然想建一个小项目 xff0c 建在了F project projectname 建完后发现项目并没有导入到Eclipse中 xff0c 于是又自己重新导入 xff0c 导入到最后一步就报了如题错误 在网上找了下原因 按照这篇博客h
  • C++关于文件检索的源码转译技巧(R"()"方式)

    在C C 43 43 编写代码的过程中 xff0c 经常会用到检索文件路径的时候 xff0c 首先要明确一点 xff0c 由于 符号是C C 43 43 的保留符号 xff0c 因此直接粘贴路径字符串在代码中是不能使用的 例如下面的方法 x
  • 嵌入式课程 之 中断和串口通信实验

    版权归如下公司 xff0c 禁止非授权转载 xff1a 北京西普阳光教育科技股份有限公司 xff08 https www simpleware com cn xff09 维周机器人科技有限公司 xff08 http www vejoe co