单片机数据通信学习中串口有多重要?

发布者:快乐旅行最新更新时间:2024-07-12 来源: elecfans关键字:单片机  数据通信  串口 手机看文章 扫描二维码
随时随地手机看文章

刚开始学单片机的你,是不是会因用程序把LED点亮而感到高兴,会因用程序把数码管点亮而感到高兴。这是好事,这也是想继续学习下去的动力。

但是到了与数据相关的实验时,却感觉很难有所进步。有时候,把驱动写好了,下载到单片机后,一点反应都没有,可是又不知道问题出在哪里,数据通信又不像LED那样可以用万用表测出到底有没有电。


这是学习单片机和STM32的一道坎。又或者说,这是一条河,阻拦着你的去路的河,有一条河你会怎么办?过去的方法很多,但是笔者觉得较快的方法就是借助原有工具渡过去。过去之后你会发现河的那边是一个不一样的世界。

那这个原有的工具是什么呢?那就是“串口通信”。

串口通信介绍

串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。。.。。.这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。

串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。如何使用串口通讯,你需要知道的几个重要的知识点:

1.波特率。(数据传输的速度,两个设备在通信时的速度要设置成一样,否则会出现乱码)。

2.硬件连接。串口通信是一种异步通信,一般都是TX-》RX,RX-》TX。

3.停止位。

4.奇偶校验。

5.硬件数据流。

3、4、5,这几项一般不需要改变,所以在这就不用多说了。

串口作用

串口能用来做什么事情?

学过C语言的人都知道,程序开发需要不断调试不断验证。很多的语言编程软件都有很完整的程序调试功能。使用起来很方便。而我们的开发虽然也是用C语言,但我们的程序最终运行的环境不是在我们的开平台而是在真正的硬件系统中运行。这时想要查看程序的运行过程或者结果就不像编程软件那么方便了。

想要解决这个问题,我们这时就可以借助串口通信来把我们需要知道的结果又或者是程序运行的关键步骤发送到电脑上,我们就知道程序在硬件系统中运行是否出现问题。51单片机可以用串口来调试,STM32可以用串口来调试。高级一点的LINUX开发板也是使用串口来调试。

学会串口通信能做什么

当你学会串口通信时,你可以开始玩WIFI模块、GSM模块、蓝牙模块、GPS模块、以及各种使用串口通信的传感器等等。有能力你还可以编写上位机软件通过串口通信来控制设备。

串口通信需要什么

如果你只有STM32核心板,那么你还需要一个串口转USB模块和一个串口数据接收软件还有几根杜邦线就可以了。如果你的是比较完整的一款开发板的话,一般都已经带有串口转USB模块,这样使用起来就更简单了。聪明的你是不是发现还缺少了点什么,对。没错因为还缺少了最重要的程序。想要使用串口通信当然还需要写串口通信的程序。下面就教你如何去用,而不是写。

串口实验

在做一个实验时,最好把这个实验分割成几个关键的步骤,这样做的好处就是可以清晰的知道自己需要做什么,以及做完了哪些。还有哪些还没做。下面笔者把串口实验分成几个关键的步骤:

1)串口通信使用到的GPIO引脚配置

STM32F103系列的芯片一般都有三个串口以上,用来调试使用的串口一般都是使用USART1。其他的串口配置都是一样的。

下面这段就是串口配置的程序:

GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能USART1,GPIOA时钟

//USART1_TX GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

//复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9//USART1_RX GPIOA.10初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10

左右滑动,查看代码

串口使用的的GPIO口是PA9和PA10,所以只需配置这两个IO口的输入输出模式就可以了。

2)串口主要参数设置(直接看程序)

USART_InitTypeDef USART_InitStructure;//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//数据格式,8位

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(USART1, &USART_InitStructure); //初始化串口

1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断

左右滑动,查看代码

串口参数配置无法就是配置串口的波特率、数据格式、停止位、奇偶校验、硬件流、收发模式。除了波特率需要改变其他的参数都不需要管。直接复制拿来用。

3)串口中断配置

串口如果使用中断接收,那么就需要配置串口的中断参数,配置项无法就是配置那个的中断源和中断的优先级。

NVIC_InitTypeDef NVIC_InitStructure;//Usart1 NVIC 配置

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子优先级

3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器

左右滑动,查看代码

4)串口使能

就是你需要什么时候开始使用串口功能,就是一句原有的函数。

USART_Cmd(USART1, ENABLE); //使能串口1

左右滑动,查看代码

5)编写串口中断处理函数

使用库函数开发,所有的中断函数都是已经存在的,只是中断函数里面没有处理任何事情而已。中断函数如下:

void USART1_IRQHandler(void){//这里是编写中断处理的内容,但是一般会先判断相关的标准才算完整}

左右滑动,查看代码

完整的串口中断函数:

void USART1_IRQHandler(void){int Res=0; //定义一个变量用来接收串口数据集if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { Res =USART_ReceiveData(USART1);//读取接收到的数据 USART_SendData(USART1,Res ); //把接收到的数据通过串口1发送出去 }}

串口数据的接收和发送的函数都是库函数提供的,想用时只需找到它直接拿来用就可以了。

以上就完成了一个最简单的串口实验。把程序编译烧写到STM32然后用串口转USB模块连接到电脑,使用串口数据接收软件SSCOM或其他的数据接收软件设置好波特率,打开串口,正常的话,那发送什么到STM32那就会收到什么。这样就算完成了。

这次就说到这了,如果有开发板的配套例程可以先使用,用多了,慢慢就理解了。这篇文章主要想说明串口的重要性。用串口来调试真的方便很多。


关键字:单片机  数据通信  串口 引用地址:单片机数据通信学习中串口有多重要?

上一篇:手把手教你如何写单片机的结构体
下一篇:浅谈定时器基础知识与PWM输出原理

推荐阅读最新更新时间:2024-11-21 16:59

AVR单片机ISP下载线的制作
单片机编程器的作用是将调试好的程序烧写到单片机的存储器中。本文介绍的AVR单片机ISP下载线的成本只有10元左右,非常适合初学者自制。 AVR单片机的程序可以使用串行在线编程(ISP)方式下载写入,即可直接在电路板上进行程序的烧写和修改,所需的装置就是一根ISP下载线。 本文介绍的ISP下载线使用计算机的并口对单片机编程.不仅支持AVR单片机,也支持对51单片机中AT89S系列单片机的编程。 一、下载线电路 下载线的电路见图1。该下载线是STK200/300型的下载线。74HC244是8缓冲器电路,用来作计算机并口和单片机的缓冲隔离。图1中的LPT连接到计算机的并口,作计算机上的下载软件和单片机进行通信
[单片机]
AVR<font color='red'>单片机</font>ISP下载线的制作
DSP与PC间高速串口通信的实现
    摘要: 利用UART解决DSP与PC机间通信时速率匹配问题,并给出了具体实现电路。     关键词: DSP UART 串行通信 FIFO DSP是一种专门用来实现信号处理算法的微处理器芯片,主要优点有:硬件乘法器,哈佛总线结构,多种寻址方式,零耗循环(zero overhead loop),程序执行时间可预测等。     正是由于DSP的诸多优点能够满足密集的数学计算,而且DSP应用的另一个突出特点是实时性,使其在通信、雷达、数字电视等领域得到了广泛的应用,而且日益渗透到人们的日常生活的各个方面。     在实时信号处理中已经离不开DSP,这些处理系统中包含了各种数据通
[工业控制]
完整的单片机霍尔测速程序+原理图
经本人编写的正确的霍尔测速程序以及正确的原理图 /************霍尔测速仪******************/ /****************************************/ /****************************************/ /**编写人:刘梦宇**/ /**主控芯片:STC89C52RC**/ /**晶振12MHZ**/ #include reg52.h #include intrins.h #define uint8 unsigned char #define uint16 unsigned int #define CMD 0x00 #define D
[单片机]
完整的<font color='red'>单片机</font>霍尔测速程序+原理图
智能家居引爆MCU需求,多样化市场应用或成推力
    集微网消息,新一代年轻消费族群对于生活品质的需求逐渐提高,不仅小米要发展智能家居,中兴通讯也于上月22日正式于北京揭晓智慧家庭的新战略,研调机构预测全球智能家居设备和服务市场到了2018年,市场规模将达到680亿美元,可见“智能家居”将成为市场主流,而智能家居的崛起将引爆MCU(微控制器)的需求量迅速攀升,大陆以GigaDevice为首的MCU半导体厂商有望迎来庞大商机。   智能家居所需要的IC芯片与物联网主流芯片基本上是一致的,物联网的数据处理、加工、传输都离不开MCU,在物联网(IoT)发展趋势之下,节能、安全感测、3C产品、医疗及汽车电子应用等,均已成为MCU的热门应用领域。   MCU为未来每一个物联网
[手机便携]
基于AVR单片机的可预置程控宽带直流功率放大电路设计
 本文采用AVR单片机ATmegal28作为核心控制器,结合10位串行D/A芯片 TLC5615 、功率运放THS3092、可编程增益运放AD603以及其他相关电路,构成了可预置程控宽带直流功率放大电路。该电路系统增益调节范围为O~60 dB,步进间距为1 dB,频带为DC~10 MHz,输出电压有效值为10 V,矩阵键盘预置增益值步进,点阵液晶显示实时电压有效值,人机界面友好,操作简单方便。   1 系统总体方案   若采用可编程放大的思想,将输入的信号作为高速D/A转换器的基准电压,那么D/A转换器作为一个程控衰减器,对速度的要求很高。同时,为了实现O~60 dB增益可调,势必需要D/A转换器输出衰减最少60 dB以上。假设信
[单片机]
基于AVR<font color='red'>单片机</font>的可预置程控宽带直流功率放大电路设计
松翰单片机c语言的中断处理问题
松翰单片机的特殊内核架构,注定了,其中断优先级,只能靠软件实现。怎么在c语言的中断处理函数中,高优先级的标志为需要安排在前面,低优先级的标志没有安排在后面,这是一种软又掀起的实现方法。由于硬件的特殊结构,导致终端不能够实现嵌套,于是就会引出一个新的问题,那就是,中断的,事实性会大打折扣。对于多个中断的程序,这个问题就会凸显出来,无非有这样三种情况,高有仙妻,低优先级的终端同时出发,两个中段飞同时出发,你不不影响,两个终端,非同时出发,但是有相应的影响。对于两个终端同时处罚的情况系统的实时性肯定会受到影响。这是要做到的就是使这种影响叫到最低的程度,解决这个问题,无非只有一种办法,那就是,是每个中断程序,航速尽量的少尽量的简单,这样系统
[单片机]
TX-1C单片机开发板的Proteus仿真版与程序源码
郭天祥仿真单片机开发板的proteus原理图如下 测板程序介绍: 本程序为实验板的总体测试程序,综合测试了整个实验板上的绝大多数功能,用户可不用测试。 下载程序后会依次看到以下5种状态。 1.8个流水灯先会从上到下流动一遍,同时蜂鸣器发声。 2.接着DAC电流指示灯由暗变亮 3.接着前三位数码管显示温度值 4.接着AD数值显示在数码管的前三位 5.接着等待矩阵键盘的按下,按下后相应的数码显示在数码管的后三位上, 下面是其中的单键识别源程序: #include reg52.h sbit BY1=P3^4; //定义按键的输入端S2键 unsigned char count; //按键计数,每按一下,count加1 u
[单片机]
TX-1C<font color='red'>单片机</font>开发板的Proteus仿真版与程序源码
GD32MCU如何实现掉电数据保存?
大家在GD32 MCU应用时,是否会碰到以下应用需求:希望在MCU掉电时保存一定的数据或标志,用以记录一些关键的数据。 以GD32E103为例,数据的存储介质可以选择内部Flash或者备份数据寄存器。 如下图所示,片内Flash具有10年的保存寿命,10万次擦写,页擦除时间在3.5ms,字写入时间在40us左右,Flash特性决定Flash需要先擦后写,擦写要求的电压范围为供电范围:1.8V-3.6V. GD32 MCU基本都支持备份数据寄存器,GD32E103系列支持84字节数据寄存器,可以在VDD掉电,VBAT有电的情况下进行数据保存,备份数据寄存器不需要擦除可以直接写入,数据更新速度较快。 下面为大家介绍数据掉电保
[单片机]
GD32<font color='red'>MCU</font>如何实现掉电数据保存?
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多开源项目推荐

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved