0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机数据通信怎么学?

Q4MP_gh_c472c21 ? 来源:嵌入式ARM ? 作者:嵌入式ARM ? 2021-03-31 11:54 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

刚开始学单片机的你,是不是会因用程序把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那就会收到什么。这样就算完成了。

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

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6071

    文章

    45117

    浏览量

    654607
  • 串口通信
    +关注

    关注

    34

    文章

    1643

    浏览量

    57040
  • 控制线
    +关注

    关注

    0

    文章

    16

    浏览量

    4512

原文标题:单片机数据通信怎么学?这个工具要用好:串口通信

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    华为品智联接数据通信商业市场创新峰会圆满落幕

    近日,以“无智联,不AI”为主题的品智联接数据通信商业市场创新峰会在深圳成功举办。在此次峰会上,华为依托核心技术突破,重磅发布星河AI高品质万兆园区网络解决方案,以及“无智联,不AI”星云计划,并与
    的头像 发表于 07-01 15:52 ?459次阅读

    2025华为数据通信创新峰会香港站圆满收官

    华为数据通信创新峰会2025在香港盛大启幕。本次峰会以“星河AI网络:引领AI-Powered网络创新,跃升数智生产力”为主题,汇聚了来自中国香港、泰国、菲律宾、印度尼西亚、马来西亚、新加坡等
    的头像 发表于 06-11 11:05 ?723次阅读

    CYUSB3014采用5根地址线通信,但其中一条地址线悬空,对数据通信有影响吗?

    CYUSB3014采用5根地址线通信,但其中一条地址线悬空,对数据通信有影响吗??是否还能进行正常的多个端点通信,只要跳过那个地址线对应的socket即可?
    发表于 05-21 07:59

    2025华为河南商业市场数据通信新品推介会成功举行

    近日,以“品智联接耀中原,成就商业好生意”为主题的2025华为河南商业市场数据通信新品推介会在郑州成功举办。来自数据通信领域的众多精英以及业内知名企业代表齐聚一堂,共同见证华为在数据通信领域的创新
    的头像 发表于 05-15 14:12 ?614次阅读

    AD7768与STM32F407进行数据通信,SPI1读取到的数据不完整,整体数据在字节上出现偏移,怎么解决?

    进行数据通信,我们采用所有数据都在DOUT0上输出的模式。 然后使用DRDY信息来进行数据中断触发。 但是目前存在问题:SPI1读取到的数据不完整,整体
    发表于 04-24 06:40

    华为数据通信创新峰会2025成功举办

    华为数据通信创新峰会2025首站在摩洛哥马拉喀什成功举办,来自埃及、科特、埃塞俄比亚、摩洛哥等多个国家的400余位行业领袖、技术专家及合作伙伴现场参会,共同探讨AI驱动下的网络技术革新与非洲数字化
    的头像 发表于 04-16 16:29 ?518次阅读

    华为DatacomStar数据通信实训系统正式发布

    以“因聚而生 众智有为”为主题的“华为中国合作伙伴大会2025”在深圳举行。会议期间,由华为数据通信产品线和企业培训与认证部联合打造的“DatacomStar数据通信实训系统”正式发布,定义人才培养新范式!
    的头像 发表于 03-24 15:11 ?841次阅读

    利用ADS1293与ARM进行SPI数据通信的程序设计该注意什么?

    请教大家,利用ADS1293与ARM 进行SPI 数据通信的程序设计该注意什么?比如比特率的设置该设置什么?有没有相关的例程可以参考?3通道24位数据是按通道的次序每个通道24位这样发送吗?这个24位是不是只是指ECG的信号?谢谢!
    发表于 01-06 06:44

    使用SN65hvd50进行数据通信,在待机空闲的情况下温升有10℃以上,为什么?

    最近在使用SN65hvd50进行数据通信,发现这个片子在待机空闲的情况下温升有10℃以上,是在没有外接连线,没有任何匹配电阻的情况下,R和D测试均为低电平!如果在通信条件下温升有20多摄氏度。查找原因无果,换过不同批次的片子情况相同,麻烦大神给个指点!!!
    发表于 12-20 10:29

    ADS9110使用丝线SPI进行ADS数据通信,但是在调试页面读取不到数据,示波器上也未显示传输数据波形,怎么解决?

    ADS9110使用丝线SPI进行ADS数据通信,但是在调试页面读取不到数据,示波器上也未显示传输数据波形,供电电压正常
    发表于 11-29 06:38

    意法半导体推出新款增强版移动数据通信模块

    意法半导体新推出一款增强版移动数据通信模块,可简化大规模物联网设备的连接和管理,加快可持续智能电网和智能产业的应用。
    的头像 发表于 11-27 13:45 ?781次阅读

    OSI七层模型与数据通信的关系

    在现代信息技术中,数据通信是信息交换的基石。随着网络技术的快速发展,不同设备和系统之间的数据交换变得越来越频繁。为了确保这些交换能够顺利进行,需要一个统一的框架来指导通信过程。 OSI七层模型概述
    的头像 发表于 11-24 10:50 ?1120次阅读

    华为发布数据通信未来技术趋势报告

    中国工程院院士莅临大会作主旨报告。会上,华为发布《数据通信未来技术趋势》报告(以下简称“报告”),引领未来网络发展方向。
    的头像 发表于 11-18 11:28 ?1073次阅读

    如何实现51单片机与PC的串行通信

    51单片机与PC的串行通信是一种常见的通信方式,它允许单片机通过串行接口与PC进行
    的头像 发表于 10-21 11:35 ?2801次阅读

    单片机的中断有哪些?各类型中断有什么作用?

    )时触发。常用于周期性任务的执行。 比较中断:当定时器计数值与预设的比较值匹配时触发。常用于PWM信号的生成和精确计时。 3. 通信中断 通信中断用于处理单片机与其他设备之间的通信
    发表于 09-24 16:22