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

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

3天内不再提示

串口在单片机中的重要性

STM32嵌入式开发 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2022-07-14 16:14 次阅读

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

但是数据相关的实验是学习单片机和STM32的一道坎,此时就需要用好本文要说的串口这个调试工具。

串口通信介绍

关于串口通信的介绍,也可以点击阅读之前发的一篇文章:STM32串口通信基本原理。

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

串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。

b5460dc0-028b-11ed-ba43-dac502259ad0.png

b55b15c6-028b-11ed-ba43-dac502259ad0.png

如何使用串口通讯,你需要知道的几个重要的知识点:

波特率,数据传输的速度,如上图设置为9600,那么程序中也要设置为9600

硬件连接,接收、发送交叉连接,如上图TxD->RxD,RxD->TxD

停止位

奇偶校验

硬件数据流

其中,后3项一般不需要改变。

学会串口通信能做什么

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

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

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

串口通信需要什么

如果你只有STM32核心板,那么你还需要一个串口转USB模块和一个串口数据接收软件还有几根杜邦线就可以了。

如果你的是比较完整的一款开发板的话,一般都已经带有串口转USB模块,这样使用起来就更简单了。聪明的你是不是发现还缺少了点什么,对。没错因为还缺少了最重要的程序。想要使用串口通信当然还需要写串口通信的程序。

下文就教你如何去用,而不是写。

串口实验

关于串口的实验,之前录过一个基于HAL库来实现的视频,可以点击查看:STM32打印数据到串口助手。

而下文中的实验基于标准库实现的,与HAL相比思路是一样的。

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

下面把串口实验分成几个关键的步骤:
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_RXGPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入GPIO_Init(GPIOA,&GPIO_InitStructure);  //初始化GPIOA.10

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

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

USART_InitTypeDefUSART_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)编写串口中断处理函数
使用库函数开发,所有的中断函数都是已经存在的,只是中断函数里面没有处理任何事情而已。中断函数如下:

b56730b8-028b-11ed-ba43-dac502259ad0.png

完整的串口中断函数:

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

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

6)实验现象

把程序编译烧写到STM32然后用串口转USB模块连接到电脑,在串口调试工具设置好波特率,打开串口。正常的话,那发送什么到STM32单片机,串口工具上就会收到什么。

总结

以上就完成了一个最简单的串口实验。

本文章主要是说明串口的重要性,用来调试程序很方便。

原文标题:学习STM32单片机,绕不开的串口

文章出处:【微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

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

    关注

    237

    文章

    22455

    浏览量

    645897
  • 单片机
    +关注

    关注

    6002

    文章

    43982

    浏览量

    620891
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348855
  • 串口
    +关注

    关注

    14

    文章

    1485

    浏览量

    74525

原文标题:学习STM32单片机,绕不开的串口

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基准源设计的重要性

    的充电过程。读过相关文章“Design SAR-ADC Driver Cirtuitry”工程师,都会深刻理解SAR-ADC驱动电路后,ADC输入引脚电容的重要性。原因是采样保持过程SAR-ADC
    发表于 06-18 06:10

    Syncer模块的重要性是什么?

    我的项目中使用25G以太网IP。通过打开此IP的示例设计,我们可以看到许多SYNCER模块,一个FSM模块和一个流量生成器模块。我想问一下这些Syncer模块的重要性是什么,我是否需要在我的最终设计中使用所有syncer模块。
    发表于 05-18 09:25

    代码规范的重要性是什么

    论代码规范的重要性
    发表于 05-19 13:07

    传感器波形分析汽车故障诊断重要性

    传感器波形分析汽车故障诊断重要性
    发表于 05-12 06:27

    STM32F4时钟树的重要性

    STM32F4时钟树时钟是单片机的心脏,重要性不言而喻,STM32F4的时钟树是比较复杂的,所以不是一言两语能写清楚的,我只简单的描述下时钟来源,详细知识需要去看正点原子的视频讲解。整个时钟来源有五
    发表于 08-11 07:40

    时钟对于单片机重要性

    时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行。时钟系统犹如人的心脏,一旦有问题整个系统就崩溃。我们知道STM32属于高级单片机,其内部有很
    发表于 08-12 06:18

    时钟的重要性

    运行执行指令,才能够做其他的处理 (点灯,串口,ADC),时钟的重要性不言而喻。为什么stm32需要多个时钟源?STM32本身十分复杂,外设非常多但我们实际使用的时候只会用到有限的几个外设,使用任何外设
    发表于 08-13 07:31

    论调节阀的重要性

    调节阀的重要性执行机构的选择  论调节阀的重要性:  1.控制阀是一种节流装置,属于运动部件。与检测元件、变送器和控制器相比,控制过程,控制阀需要不断改变节流部分的过流面积,使控制
    发表于 09-15 07:25

    UPS的重要性

    中心机房的UPS太重要了,前不久就出现过停电坏了一个磁盘陈列硬盘的事故,一个2T的硬盘坏了,还好有一个备用的硬盘使用,否则磁盘陈列里的资料就岌岌可危了。服务器多了,UPS的重要性尤其重要,学校周边
    发表于 11-16 09:09

    单片机中断的重要性

    单片机中断有什么作用打个比方,你房间看书,看书这个事是持久的,拖延几分钟也没事。突然淘宝买的衣服送到了,镖局的人敲门,你用书签做好标记去开门。拿回衣服,回去继续看书。这个事的发生过程很正常。同样
    发表于 11-26 07:34

    arm汇编的重要性是什么?

    arm汇编的重要性是什么?
    发表于 11-30 08:03

    单片机精确计时的重要性

    的。小到手机,大到汽车飞机,现在几乎只要是电子器件,就有单片机的身影。精确计时的重要性传感器能够感知外界环境,可以说是一切智能机器的基础。实际工程,常常使用单片机或者控制传感器工作,
    发表于 12-07 13:18

    led单片机应用重要性

    很多初学者觉得自己学的东西很基础,担心今后实际工作用不到。有初学者问了这样的问题:单片机真正开发产品和学习的时候有什么差别,平时学的LED、ADC这些东西,实际项目中会用到吗?虽然技术更...
    发表于 02-23 07:09

    单片机程序架构之时间轮片法程序架构重要性解析

    单片机程序架构—时间轮片法程序架构重要性很多人尤其是初学者写代码的时候往往都是想一点写一点,最开始没有一个整体的规划,导致后面代码越写越乱,bug不断。最终代码跑起来看似没有问题(有可能也真的
    发表于 02-24 06:52

    单片机项目中LED的重要性

    单片机项目中LED的重要性
    的头像 发表于 09-18 16:19 650次阅读
    <b class='flag-5'>单片机</b>项目中LED的<b class='flag-5'>重要性</b>