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

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

3天内不再提示

STM32F4_ USART配置及细节描述

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-07 11:22 次阅读

Ⅰ、概述

关于USART串口通信,可以说是MCU的标配。不管是在实际项目应用中,还是在开发过程中,它都起着很重要的作用。

在项目应用中我们常常使用UART串口进行通信,根据通信的距离及稳定性,还选择添加RS232RS485等对UART数据进行转换。

在开发过程中,我们常常用它来打印调试信息,我们购买的开发板基本上都有一个UART通信接口(DB9的接头),这个接口主要的一个作用就是用来开发时调试使用。

本文主要针对STM32初学者,使用STM32F4标准外设库、Keil集成IDE,对STM32F4的USART进行配置及描述。1.详细描述使用自定义打印数据、自定义中断接收数据;2.重定义打印数据printf;

Ⅱ、实例工程下载

笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。

笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。

提供下载的软件工程是STM32F417的,但F4其他型号也适用(在工程中修改一下型号就行)。

360云盘下载地址:

https://yunpan.cn/cBQiZXDsvacwV访问密码 a98e

STM32F4资料

https://yunpan.cn/cR2pxqF5x2d9c访问密码 53e7

Ⅲ、USART初始化描述

笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为例来描述一下USART的初始化。

USART的初始化大致分三个部分:

1.USART时钟


该函数位于bsp.c文件下面;

重点注意:

A.USART时钟的配置要在USART其他配置(USART初始化、中断等)前面;

B.匹配对应时钟。

比如:RCC_APB2外设不要配置在RCC_APB1时钟里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);这样能编译通过,但这是错误的代码】

2.USART引脚配置


该函数位于usart.c文件下面;

注意:

A.GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

引脚配置中,引脚功能复用的配置比较重要,很多从F1转型到F4的朋友往往会忽略掉这一点(F1中没有这个配置选项)。

B.GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF;

这里配置为复用模式。

3.USART参数配置


该函数位于usart.c文件下面;

A.USART波特率:

对于STM32来说,波特率可根据用户自定义,也就是数值随便用户设定(但需要主要范围和误差值)。

关键的一点:它不受系统使用的变化而受影响(这就是使用标准外设库的好处),也就是说它自适应系统时钟。

B.USART模式:

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

提供实例是收发模式都有,但提醒一下,有些朋友从一个地方拷贝代码自己的工程就要注意,如果你使用了接收的功能,拷贝过来的代码没有配置接收,那就有问题。【在实际开发中有人遇见过这类问题】

C.中断配置

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

中断功能也是在应用中比较常用的一个功能,特别是接收中断。如果使用的USART中断,这个函数就需要配置,发送中断不常见,如果没有发送中断的要求就不需要配置发送功能。

Ⅳ、USART重定义(打印数据)

相信来学习该文章知识的朋友(都应该学习过C语言知识)都应该知道打印数据printf这个函数。但是,很多初学者可能不理解怎样才能实现printf这种打印方式,其实只需要简单的两步步骤就能实现printf这个函数。这一节就是关于描述使用USART来重定义打印数据。

1.使用微库


project -> Options for Target -> Target窗口下勾选上”Use MircoLIB”使用微库。

由于printf函数是标准的函数,这里我们就直接使用标准的“微库”,而不自己设计该函数的功能。

2.重定义函数

#include

首先要包含头文件”stdio.h”, 提供的实例工程位于usart.h文件下面。


该函数位于usart.c文件下面;

我们使用printf函数,需要重定义fputc函数。

经过上面两步骤,我们就可以实现printf函数打印输出UART数据了。

Ⅴ、USART自定义(打印数据)


该函数位于usart.c文件下面;

我们自定义的打印函数功能就比较简单,计算字符串个数。

Ⅵ、USART中断接收

接收数据可以查询接收,也可以中断接收;查询的效率比较低,我们实例提供的是中断接收的方式,实现的效果的接收到一个数据,就将其发送出去。

中断接收需要配置几个地方:

1.使能中断

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

这个函数位于USART初始化里面,主要是使能USART中断。

2.配置NVIC


该函数位于bsp.c文件下面;

配置NVIC通道和优先级。

3.USART接收中断


该函数位于stm32f4xx_it.c文件下面;

主要是中断接收和处理,效果就是:有中断就发送接收的数据。

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

    关注

    1

    文章

    195

    浏览量

    30757
  • NVIC
    +关注

    关注

    0

    文章

    35

    浏览量

    11667
  • STM32F4
    +关注

    关注

    3

    文章

    194

    浏览量

    27970
收藏 人收藏

    评论

    相关推荐

    STM32项目实战:基于STM32F4的智能灯光控制系统(LVGL),附项目教程/源码

    《智能灯光控制系统_STM32F4》项目完整文档、项目源码,私信小雯老师免费领取。STM32项目实战之“智能灯光控制系统”(基于STM32F4)今天小编来分享一个《智能灯光控制系统》的项目案例,硬件
    的头像 发表于 10-17 16:16 531次阅读
    <b class='flag-5'>STM32</b>项目实战:基于<b class='flag-5'>STM32F4</b>的智能灯光控制系统(LVGL),附项目教程/源码

    【GD32 MCU 移植教程】8、从 STM32F4xx 系列移植到 GD32F4xx 系

    GD32F4xx 系列 MCU 是基于 Arm® Cortex®-M4 处理器的 32 位通用微控制器,与 STM32F4xx系列 MCU 保持高度兼容。本文主要从以下三个方面进行介绍:硬件资源对比
    的头像 发表于 09-06 09:40 869次阅读
    【GD32 MCU 移植教程】8、从 <b class='flag-5'>STM32F4</b>xx 系列移植到 GD32<b class='flag-5'>F4</b>xx 系

    STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx中文手册

    STM32F4系列单片机中文手册
    发表于 08-08 14:32 2次下载

    自制一款兼容STM32F1/F4芯片的飞控板

    自己制作的一款兼容STM32F1/F4芯片的飞控板。
    发表于 07-04 14:07 0次下载

    用Cubemx配置调通过STM32F0的USART2,发送可以正常发送,但接收不正常,为什么?

    我用Cubemx 配置调通过STM32F0的USART2,发送可以正常发送,但接收不正常,我现在怀疑是Cubemx的问题,有没有人曾经条通过?
    发表于 05-06 06:25

    STM32F103使用硬件SPI1,USART2不出时钟怎么解决?

    STM32F103C8T6单片机,使用usart2的smartcard接口,单独使用时正常,CK脚可以正常输出clk。当我在添加一路SPI1时,CK脚就不能正常输出CLK信号了。CK脚是SPI的NSS脚。但是没有在cube里配置
    发表于 04-17 07:25

    STM32F103RCT6的USART1不能接收多字节数据是什么原因导致的?

    用串口助手手动发送和1秒一次的定时发送时,STM32F103RCT6能完整地接收到15个字节的数据。 用串口助循环发送时,与延时有关。500毫秒延时,STM32F103RCT6能接收到12个字
    发表于 04-17 06:35

    关于STM32F303CB USART2中断接收的疑问求解

    STM32-CUBE环境。 STM32F303CB USART2 采用中断接收,串口下载程序后能运行正常。 问题是,只要重新断电再启动就只有一次中断接收,确认主程序运行正常,但不再自动再次进入接收中断。 其它端口无此问题,仅
    发表于 04-03 06:30

    STM32F401使用USART6时不正常,发送HELLO WORLD为乱码怎么解决?

    各位大神: 我用STM32F401 进行串口通信,UASRT1跟UASRT2使用正常,使用USART6时不正常,发送HELLO WORLD为乱码怎么破? 代码如下: main
    发表于 03-22 06:18

    STM32F429可以使用USART2的PD5,PD6作为串口下载口吗?

    在使用STM32F429的时候想到可不可以使用USART2的PD5,PD6作为串口下载口,USART1的PA9,PA10作为别的用途,但是在尝试过程中发现好像并不可以。我想请问是本身就不支持还是说我哪里
    发表于 03-11 08:24

    stm32f407 LAN8720A速率调整

    STM32F407是一款基于ARM Cortex-M4内核的高性能微控制器,而LAN8720A是一款高速以太网PHY芯片。它们的组合可以实现在STM32F407上使用以太网功能。 调整
    的头像 发表于 01-05 13:54 3372次阅读

    STM32WB55开发(4)----配置串口打印Debug调试信息

    STM32WB55系列微控制器上进行开发时,实时监控应用程序的运行情况和调试潜在问题是至关重要的。使用串口(USART/UART)进行Debug信息打印是一种简便、高效的方法。下面是如何在STM32WB55上
    的头像 发表于 12-01 15:48 1154次阅读
    <b class='flag-5'>STM32</b>WB55开发(<b class='flag-5'>4</b>)----<b class='flag-5'>配置</b>串口打印Debug调试信息

    STM32F207VC、STM32F205VC例程

    STM32F207VC、STM32F205VC例程| name                 | 描述                                   || :------------------- | -
    发表于 11-16 17:02 5次下载

    RT-thread源码移植到STM32F10x和STM32F4xx

    RT-thread源码移植到STM32F10x和STM32F4xx: 一、源码下载 点击入门->下载   在历史版本里边随便选取一个   会进入百度云盘的下载地址,里边有全部版本的源码。这里下载
    的头像 发表于 11-15 09:38 2357次阅读
    RT-thread源码移植到<b class='flag-5'>STM32F</b>10x和<b class='flag-5'>STM32F4</b>xx

    串口在STM32中的配置

    首先要明确几点:使用STM32串口外设中的哪一个?串口发送或者接收数据?串口相关的参数配置?发送或接收是否使用到中断? 下方为串口发送的配置。 1. RCC开启USART、串口TX/R
    的头像 发表于 11-10 16:09 2111次阅读
    串口在<b class='flag-5'>STM32</b>中的<b class='flag-5'>配置</b>