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

    文章

    201

    浏览量

    32168
  • NVIC
    +关注

    关注

    0

    文章

    36

    浏览量

    12094
  • STM32F4
    +关注

    关注

    3

    文章

    203

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    stm32N657配置USART2,可以发送,但是为什么无法进入接收中断呢?

    https://gitee.com/liu-qingchang/code/tree/master/stm32n6 main函数和usart代码 使用stm32N657这块评估板,使用cubeMX
    发表于 06-18 07:13

    STM32F4标准外设库资料

    stm32f4xx.h,标准外设库
    发表于 06-08 09:49 ?2次下载

    STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4编程手册

    电子发烧友网站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4编程手册.pdf》资料
    发表于 06-06 17:06 ?6次下载

    STM32F40xxx和STM32f41xx flash编程手册

    PM0081_STM32F40xxx and STM32F41xxx单片机编程手册
    发表于 06-06 17:02 ?3次下载

    使用STM32CubeMX进行配置USB的时候,有哪些小的需要注意的细节

    在使用STM32CubeMX进行配置USB的时候,是参照例程进行的配置,自己配置的就是没有成功,例程就灭有问题,总感觉哪里没有打开?有人遇到过需要注意的小
    发表于 04-23 06:54

    STM32F103x8 STM32F103xB单片机数据手册

    STM32F103x8STM32F103xB单片机数据手册
    发表于 04-14 14:55 ?4次下载

    STM32F107的USART2为什么进不了中断?

    刚开始学STM32,手里有一块公司的板子,板子上的USB接到FT232R,再从FT232R接到MCU的PD5(USART2TX)和PD6(USART2RX)。 我尝试了公司的代码,应该是用标准库写
    发表于 03-14 16:57

    使用stm32F103的USART的lin通讯模式,TX,RX,GND,三根线怎么和lin总线连接?

    使用stm32F103的USART的lin通讯模式,TX,RX,GND,三根线怎么和lin总线连接
    发表于 03-14 07:39

    CKS32F107xx系列USART的LIN模式

    CKS32F107xx系列在支持正常USART功能的同时,亦支持LIN(局域互联网)模式。
    的头像 发表于 02-18 17:18 ?562次阅读
    CKS32<b class='flag-5'>F</b>107xx系列<b class='flag-5'>USART</b>的LIN模式

    STM32F4xx中文参考手册--ST意法半导体

    STM32F4xx中文参考手册--全中文主营ST意法芯片,需要可提供样品测试,数据手册,欢迎联系.
    发表于 02-11 16:39 ?3次下载

    STM32F101x8/STM32F101xB手册

    电子发烧友网站提供《STM32F101x8/STM32F101xB手册.pdf》资料免费下载
    发表于 12-06 15:45 ?9次下载

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

    《智能灯光控制系统_STM32F4》项目完整文档、项目源码,私信小雯老师免费领取。STM32项目实战之“智能灯光控制系统”(基于STM32F4)今天小编来分享一个《智能灯光控制系统》的项目案例,硬件
    的头像 发表于 10-17 16:16 ?1996次阅读
    <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 ?2876次阅读
    【GD32 MCU 移植教程】8、从 <b class='flag-5'>STM32F4</b>xx 系列移植到 GD32<b class='flag-5'>F4</b>xx 系

    STM32CUBEMX(2)--USART通过DMA方式接收不定长数据

    : 选择芯片型号 使用STM32CUBEMX选择芯片stm32f030r8,如下所示: 配置时钟源 HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项
    发表于 09-04 11:48

    stm32用串口烧录怎么设置

    微控制器。 STM32CubeMX配置 打开STM32CubeMX,选择您的STM32芯片型号。 配置您的微控制器的时钟设置,确保PLL和其
    的头像 发表于 08-22 09:33 ?3700次阅读