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

    文章

    186

    浏览量

    30407
  • NVIC
    +关注

    关注

    0

    文章

    35

    浏览量

    11517
  • STM32F4
    +关注

    关注

    3

    文章

    192

    浏览量

    27676
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    STM32USART发送数据时如何使用TXE和TC标志呢?

    STM32USART发送数据时如何使用TXE和TC标志呢? USARTSTM32 中非常重要的外设之一,用于串行通信,其中包括串口通信(RS232、RS485)、SPI 和 I
    的头像 发表于 10-26 11:31 786次阅读

    STM32 USART自动波特率检测

    电子发烧友网站提供《STM32 USART自动波特率检测.pdf》资料免费下载
    发表于 09-25 15:09 2次下载
    <b class='flag-5'>STM32</b> <b class='flag-5'>USART</b>自动波特率检测

    使用USART实现STM32F40x/STM32F41x的IAP

    电子发烧友网站提供《使用USART实现STM32F40x/STM32F41x的IAP.pdf》资料免费下载
    发表于 09-21 14:54 0次下载
    使用<b class='flag-5'>USART</b>实现<b class='flag-5'>STM32</b>F40x/<b class='flag-5'>STM32</b>F41x的IAP

    使用USART实现STM32F0xx应用编程

    电子发烧友网站提供《使用USART实现STM32F0xx应用编程 .pdf》资料免费下载
    发表于 09-21 14:43 0次下载
    使用<b class='flag-5'>USART</b>实现<b class='flag-5'>STM32</b>F0xx应用编程

    STM32自举程序中使用的USART协议

    电子发烧友网站提供《STM32自举程序中使用的USART协议.pdf》资料免费下载
    发表于 09-21 11:23 0次下载
    <b class='flag-5'>STM32</b>自举程序中使用的<b class='flag-5'>USART</b>协议

    39 第012章 STM32外设之USART 第6节 _STM32CubeMX配置 - 第4

    STM32字符函数代码USART
    充八万
    发布于 :2023年09月01日 10:43:28

    38 第012章 STM32外设之USART 第5节 _STM32USART外设2 - 第4

    STM32字符函数代码USART
    充八万
    发布于 :2023年09月01日 10:34:16

    37 第012章 STM32外设之USART4节 _STM32USART外设1 - 第6节

    STM32字符函数代码USART
    充八万
    发布于 :2023年09月01日 10:26:45

    37 第012章 STM32外设之USART4节 _STM32USART外设1 - 第5节

    STM32字符函数代码USART
    充八万
    发布于 :2023年09月01日 10:25:55

    37 第012章 STM32外设之USART4节 _STM32USART外设1 - 第2节

    STM32字符函数代码USART
    充八万
    发布于 :2023年09月01日 10:23:24

    STM32CubeMx配置USART1增加打印功能

    STM32CubeMx配置USART1增加打印功能
    的头像 发表于 08-22 10:32 668次阅读
    <b class='flag-5'>STM32</b>CubeMx<b class='flag-5'>配置</b><b class='flag-5'>USART</b>1增加打印功能

    STM32USART1与USART2模块串行数据通讯功能

    STM32USART1与USART2模块支持多种功能,包括IrDA红外、Smart Card(IC卡)等。
    发表于 07-24 14:28 2114次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>USART</b>1与<b class='flag-5'>USART</b>2模块串行数据通讯功能

    STM32CubeMx入门教程(2):USART的使用

    我们延续LED项目的时钟配置,在LED的基础上配置USART。使用CubeMX打开LED灯的项目。
    发表于 07-11 14:58 637次阅读
    <b class='flag-5'>STM32</b>CubeMx入门教程(2):<b class='flag-5'>USART</b>的使用