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

发布者:快乐旅行最新更新时间: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-02 02:29

几种使用过的单片机比较
几种使用过的单片机比较(个人观点),供选型者和初学者参考 51系列单片机 使用的人很多,资料很多,根本不需要技术支持。价钱便宜(如批量AT89c52只需要8.5RMB)。但普通型的芯片内部资源较少,需要外部扩展。总线外置使系统抗干扰型变差。外括看门狗电路增加成本(max813比89c52要贵)。执行速度较慢,晶振频率较高,EMI性能较差。 功耗较大,不能用于低功耗产品(虽然philip有低功耗产品,但价格不如pic单片机)。 近几年出现一些扩展功能的51单片机,如外部ram内置、2个uart、加入spi接口、a/d转换器等,价格不是很贵,但批量大和产品期望生命周期长,使用有所顾虑。以上说的好像都是缺点,但51单片机的优点也
[单片机]
Flash 单片机自编程技术的探讨
1 MSP430芯片Flash存储器的结构 Flash存储器模块是一个可独立操作的物理存储器单元。全部模块安排在同一个线性地址空间中,一个模块又可以分为多个段。当对Flash存储器段中的某一位编程时,就必须对整个段擦除,因此,Flash存储器必须分为较小的段,以方便地实现擦除和编程。图1是MSP430芯片上Flash存储器模块的结构框图。该Flash存储器模块包含如下部分:控制逻辑——控制Flash擦除和编程时的机器状态和时序发生器; Flash保护逻辑——避免意外的Flash擦除和编程操作;编程电压发生器——提供Flash擦除和编程所需全部电压的集成电荷泵; 3个16位控制寄存器——FCTL1、FCTL2、FCTL3控制
[单片机]
Flash <font color='red'>单片机</font>自编程技术的探讨
建立在单片机和PC串口通信基础上的测温系统设计
温度是工业控制中主要的被控参数之一,在日常生活及工农业生产中经常要用到温度的检测及控制,因此研究温度的测量方法和装置具有重要的意义。传统方法多以热电阻和热电偶等为温度传感元件,而这种模拟温度传感器输出为模拟信号,必须经过A/D 转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结构比较复杂、抗干扰性差、布线麻烦以及成本高等缺点。   针对上述问题,该设计提出了基于Dallas 半导体公司的数字式温度传感器DS18B20[1-2]和ATMEL 公司AT89S52 单片机构成的温度测量系统,并可通过串口连接在PC 系统上进行实时显示,该系统安装简易,可靠性高,适用于恶劣环境的现场温度测量。   1 系统构成  
[单片机]
建立在<font color='red'>单片机</font>和PC<font color='red'>串口</font>通信基础上的测温系统设计
STM32F10x单片机Flash写操作导致中断不响应问题
昨天遇到一个问题,在写入数据到STM32F103单片机的Flash中时会出现串口中断接收数据丢失现象,但是我设置的串口接收中断优先级是最高的,并且没有哪里将全局中断关闭很长时间(除了操作系统部分内核代码执行的时候关闭全局中断,但是没有占用很长时间,不会导致丢失串口数据)。在正常情况下在没有写数据到Flash中去的时候所有串口数据都能正常接收,没有数据丢包现象,但是当执行一次写入操作(写一个页256个字的数据)就会导致串口数据丢失,导致接收帧错误。 一开始我猜测是不是在擦除和写入Flash的时候系统会屏蔽所有中断,但是没有哪个参考文档中找到这样的说明。后来查阅了一下官方文档PM0042《STM32F10xxx闪存编程手册.en》,在
[单片机]
哪种蓝牙MCU最适合您的设计?
当今的蓝牙微控制器是集成的微小奇迹。即使是空间要求最小的嵌入式设计中也适用,并将CPU、内存资源和外设以及射频功能所需的元件封装在一起。但蓝牙MCU的型号以及其具有的“蓝色色调”多得让人眼花缭乱、无从选择。 为了帮助缩小选择范围并为您的设计找到恰当的色调,考虑设备功能和射频性能这两种不同类别的参数很有用。我们仔细了解一下每个参数。 功能变化 这涵盖了蓝牙MCU的能力和不足。需要考虑的关键区别是支持的蓝牙版本、专有协议的使用以及MCU的连接资源。 Bluetooth SIG版本(4.2、5.0、5.1等) Bluetooth SIG的每个标准版本中,都有必选和可选功能。必选功能确保认证设备满足最低限度的功能,而可
[网络通信]
哪种蓝牙<font color='red'>MCU</font>最适合您的设计?
PIC单片机内部IIC通信接口的使用方法
#include pic.h #define uchar unsigned char #define uint unsigned int #define add 0xaa __CONFIG(0x3B31); const uchar ee_da ta ={1,2,3,4,5,6}; uchar read_da ta ; const uchar table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint x); void init(); void didi(u
[单片机]
TI推出集成了智能模拟的全新系列MSP430™工业级微控制器
MSP430™ i系列微控制器为工厂和楼宇自动化、能量计量和工业照明等成本敏感型应用提供了最佳选择。 2014年11月21日,北京讯---日前,德州仪器(TI)宣布推出集成了智能模拟的全新系列MSP430™工业级微控制器(MCU),以实现高准确度、高精密度并节约成本。MSP430i204x MCU可满足工业和智能电网应用所需的-40℃至+105℃宽泛温度范围要求。全新MSP430 i系列MCU非常适用于占位传感器、远程温度与压力变送器、电源监控等各种成本敏感型工业领域。 全新MSP430i204x工业级MCU具有集成的智能模拟设置,包括多达四个集成式Σ-Δ模数转换器(ADC),这些转换器所提供的准确度可在2000:
[单片机]
GD32单片机和STM32单片机的区别
一、前言 什么GD32? GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。 所以GD32和STM32有很多地方都是一样的,不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的东西还是有区别的。相同的地方我们就不说了,下面我给大家讲一下不同的地方。 二、区别 1、内核 GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。 2、主频 使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M 使用HSI(高速内部时钟):GD32的主频最大10
[单片机]
GD32<font color='red'>单片机</font>和STM32<font color='red'>单片机</font>的区别
小广播
设计资源 培训 开发板 精华推荐

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

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

更多开源项目推荐

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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