datasheet

STM32入门——第二天学习串口收发

2019-07-11来源: eefocus关键字:STM32  入门  串口收发

第二步 学习串口, 实现串口收发



学习之前先了解几个重要的寄存器:


串口时钟使能,GPIO相应时钟使能:APB2ENR、APB1ENR  

GPIOx模式设置:GPIOX_CRL/ODR ,如图:

输出位应设置为推挽复用输出


接收位设为浮空输入或带上拉输入,设置方法参看前一篇讲解。


 

串口复位: APB2RSTR 、 APB1RSTR 

串口波特率设置: USART_BRR

串口控制:USART_CR1~3

    初步只用到USART_CR1,UE 为串口使能位,使串口开始工作;M 为字长选择位,8或9位数据;PCE 为校验使能位,0禁止校验;PS 为校验位选择,设置为 0 则为偶校验,否则为奇校验;TCIE 为发送完成中断使能位; RXNEIE 为接收缓冲区非空中断使能,接收到数据后进入中断函数;TE 为发送使能位,设置为 1,将开启串口的发送功能。RE 为接收使能位,用法同 TE。

数据发送与接收:USART_DR

      包含了 TDR 和 RDR,当向该寄存器写数据的时候,串口就会自动发送,当收到收据的时候,也是存在该寄存器内。


串口状态寄存器 USART_SR 

       RXNE(读数据寄存器非空),当该位被置 1 的时候就是提示已经有数据被接收到了,并且可以读出来了。通过读 USART_DR 可以将该位清零,也可以向该位写 0,直接清除。 


TC (发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。该位也有两种清零方式:1)读 USART_SR,写USART_DR。2)直接向该位写 0。


根据顺序依次配置完这几个寄存器后,串口初始化就基本完成了




接下来可以根据代码来进一步理解串口配置过程


计算波特率部分有兴趣的可以查阅相关资料理解一下。


写完后串口基本配置完成了,下面是接收数据的函数:


根据上面寄存器的讲解这些内容是很简单的!


还有一点,USART_RX_BUF[ ],这个数组是这样定义的:

       如果你在某一头文件(如A.h)中定义了extern u8 USART_RX_BUF[133];  表明该数组的定义在别的文件中。在C文件中正常定义(例u8 USART_RX_BUF[133];)然后使用后使该数组中加入了数据,如果想在别的C 文件中(如main.c)将其中的数据读出来,可将该头文件(A.h)加入到该C文件(如main.c)中即可,或直接将extern u8 USART_RX_BUF[133]; 加入到该C文件(如main.c),当编译器遇到时会知道它的定义在别的文件中,并去找到。extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!” 编译的时候C文件是逐个编译的,如果你用到了某一个本文件中没定义的标示符,编译器会报错,而链接阶段,各个文件的内容(实际是编译产生的obj文件)是被合并到一起的,因而,定义于某文件内的全局变量,在链接完成后,它的可见范围被扩大到了整个程序,如果你在两个C 文件中定义了相同的全局变量,那么编译时可以通过,链接时就因重复定义报错了,总之如果你想在A.c文件中用到其它C文件中的变量,可以在A.c文件中声明(如extern u8 USART_RX_BUF[133];)该变量,使用即可。如果还是不懂的话,可以去百度上搜一下。


下面是主函数了:

关键字:STM32  入门  串口收发

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic467450.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:SPI协议内容及STM32 SPI的操作
下一篇:STM32入门——第一天学习GPIO

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32开发笔记20: STM32L053R8T6的keil配置

单片机型号:STM32L053R8T6    使用STM32CubeMX生成STM32L053R8T6相关的应用程序代码后,使用Keil开发环境第1次下载的时候,提示如下错误,我使用F0和F4的单片机,没有遇到过。    仔细查看工程设置,原因在工程设置中,我们需加入相应的Flash配置信息,如下图所示,具体的选择,要根据单片机的类型,我们可以仔细查看数据手册。    但下载的时候,偶尔还会提示如下错误:    这件事情网上说了很多的解决方法,我自己测试,更改2处Keil的设置既可以解决,如下图所示。    此2处更改后,反复
发表于 2019-07-16
STM32开发笔记20: STM32L053R8T6的keil配置

STM32开发笔记21: USB驱动的移植

单片机型号:STM32L053R8T6    现在使用的STM32L053R8T6单片机带有USB接口,原先一直使用UART转USB芯片来完成USB功能的支持,现在这款单片机带了就希望使用以下。由于已经建立了自己的工程目录,再重新使用STM32CubeMX生成的工程文件,重新建立是不显示的,所以本文探索将USB驱动文件移植到自己项目中的方法,我使用的是USB的CDCD类,步骤如下:    1、使用STM32CubeMX使能USB,如下图所示:    2、设置时钟,USB需要48M时钟,使用内部和外部均可,我这里使用外部时钟。    3、生成工程文件
发表于 2019-07-16
STM32开发笔记21: USB驱动的移植

STM32开发笔记22: 手动添加驱动文件

单片机型号:STM32L053R8T6    我们可以通过STM32CubeMX生成工程代码,但是如果我们的工程已经建立完毕了,或者说我们在原有的工程上,开始新的项目设计,此时又需加入新的驱动,该如何呢?本文探讨其解决方法。    1、STM32CubeMX的驱动路径如下图所示,我们希望加入什么驱动,就直接将其对应的.c文件加入到工程中即可。    2、为了使该模块生效,我们还学将其使能。其使能宏,在stm32l0xx_hal_conf.h中,如下图所示。    3、上述工作完成后,我们就可以对工程进行编译了,至于驱动的具体调用方法,我们可以参看ST
发表于 2019-07-16
STM32开发笔记22: 手动添加驱动文件

STM32开发笔记23: 使用__weak修饰符

单片机型号:STM32L053R8T6在 HAL 库中,很多回调函数前面使用__weak 修饰符。 weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。 举个例子:我们打开工程模板,找到并打开文件stm32f4xx_hal.c 文件,里面定义了一个函数 HAL_MspInit,定义如下:__weak void 
发表于 2019-07-16

STM32开发笔记24:STM32L0低功耗设计——需求概述

单片机型号:STM32L053R8T6    这几篇日志将详细记录,自己应用stm32进行低功耗设计的全过程。    使用芯片:STM32L053R8T6    运行模式:        Range 1:电源电压限制在1.71-3.6V,CPU最大运行频率为32MHz。        Range 2:CPU最大运行频率为16MHz。        Range 3:CPU最大运行频率4.2MHz    低功耗模式: 
发表于 2019-07-16
STM32开发笔记24:STM32L0低功耗设计——需求概述

STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

单片机型号:STM32L053R8T6    继续项目的开发工作,突然发现,程序不能够正常下载到单片机中了,提示如下图所示的错误,我使用的是keil和ST-Link。    这个问题在我第1次调试的时候发生过1次,我认为是我误操作将芯片烧坏了,因为当时又反复的焊接了一下芯片,也没有修好,就把这件事情放下了。    今天再次出现,自己感觉可能和低功耗有关,仔细查看刚刚下载的程序,里面上来程序就进入低功耗,没有任何退出语句,所以应该是CPU不响应下载命令了。    按照这种思路,先将单片机的复位引脚接地,然后点击下载按钮的同时,放开复位引脚,居然成功
发表于 2019-07-16
STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

小广播

何立民专栏

单片机及嵌入式宝典

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

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