stm32F407学习DAY.14 在DMA模式下进行USART串口数据收发(正点原子例程为例)

这篇具有很好参考价值的文章主要介绍了stm32F407学习DAY.14 在DMA模式下进行USART串口数据收发(正点原子例程为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、DMA配置

1、DMA1和DMA2的请求映射

2、DMA挂载总线

3、DMA相关库函数

​4、DMA配置过程(以串口1为例)

1)进行时钟使能

2)等待DMA可配置

3)初始化DMA(串口1的TX为DMA2 数据流7 通道4,RX为DMA2 数据流5 通道4)

a.DMA外设地址par:

b.DMA存储器0地址mar:

c.数据传输量ndtr:

4)开启DMA数据传输(初始化函数后写)

二、USART串口配置

0、串口相关库函数

1、串口发送与接收函数初始化思路

 2、senddata和receivedata库函数(一般在主函数中调用)

1)USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

2)uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

3、接收函数的两种方法(查询方法、中断方法)

1)查询方法

2)中断方法

三、在DMA模式下实现USART串口数据收发

1、初始化各配各的

2、在主函数中调用各自的初始化

3、在需要串口传输数据的时候使能USART_DMACmd并开启DMA传输

4、判断DMA传输是否完成(使用DMA状态标志位TCIF)

 5、DMA传输完成后清除传输完成标志


一、DMA配置

1、DMA1和DMA2的请求映射

stm32f407 uart dma,stm32,单片机,学习

stm32f407 uart dma,stm32,单片机,学习

2、DMA挂载总线

stm32f407 uart dma,stm32,单片机,学习

 可以看出DMA均挂载在AHB1总线上

3、DMA相关库函数

stm32f407 uart dma,stm32,单片机,学习

 4、DMA配置过程(以串口1为例)

1)进行时钟使能

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能 

2)等待DMA可配置

while (DMA_GetCmdStatus(DMA_Streamx) != DISABLE){}//等待DMA可配置 

3)初始化DMA(串口1的TX为DMA2 数据流7 通道4,RX为DMA2 数据流5 通道4)

stm32f407 uart dma,stm32,单片机,学习

 重点关注参数:

a.DMA外设地址par:

此处外设为串口1,∴将串口1的地址写进去即可:
par=(u32)&USART1->DR
地址是STM32规定的串口1的地址,应为0x40011000

b.DMA存储器0地址mar:

在主函数中定义一个发送数据缓冲区SendBuff[SEND_BUF_SIZE]

stm32f407 uart dma,stm32,单片机,学习

 此数据缓冲区的地址即为存储器0地址,利用强制类型转换写出其地址为:
mar=(u32)SendBuff

c.数据传输量ndtr:

为主函数中定义的大小为8200的SEND_BUF_SIZE,即
ndtr=SEND_BUF_SIZE

∴在主函数中调用DMA初始化函数时,可写作:
MYDMA_Config(DMA2_Stream7,DMA_Channel_4,(u32)&USART1->DR,(u32)SendBuff,SEND_BUF_SIZE);

4)开启DMA数据传输(初始化函数后写)

stm32f407 uart dma,stm32,单片机,学习

 思路:关闭DMA传输→查询DMA通道状态是否为使能(即确认DMA是否可以被设置)→设置DMA传输数据量→开启DMA传输

二、USART串口配置

0、串口相关库函数

stm32f407 uart dma,stm32,单片机,学习

stm32f407 uart dma,stm32,单片机,学习

1、串口发送与接收函数初始化思路

1)只需要发送的功能,直接在初始化中开启串口发送使能即可;

stm32f407 uart dma,stm32,单片机,学习

2)若需要发送和接收,需要在开启串口前写中断,即加上ITConfig和NVIC的部分,写中断服务函数。

stm32f407 uart dma,stm32,单片机,学习

 2、senddata和receivedata库函数(一般在主函数中调用)

1)USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

写DR寄存器

过程:数据写入TDR寄存器,再通过TDR传送给发送移位寄存器,将数据按位移出到TX引脚,完成串口数据的发送

2)uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

读DR寄存器

3、接收函数的两种方法(查询方法、中断方法)

1)查询方法

初始化串口的过程与串口发送一致,即不需要进行中断的设置

stm32f407 uart dma,stm32,单片机,学习

查询RXNE标志位是否置1,置1表示已准备好接收数据,可以进行数据接收(写USART_ReceiveData)

2)中断方法

stm32f407 uart dma,stm32,单片机,学习

 在usart.c文件的usart_init中加上串口中断的初始化结构体,由

可知 ,当RXNE标志位为1时,自动开启串口中断

再在usart.c中写usart串口中断服务函数:void USART1_IRQHandler(void)

stm32f407 uart dma,stm32,单片机,学习

三、在DMA模式下实现USART串口数据收发

1、初始化各配各的

即按照单独串口和单独dma进行两个.c文件的初始化配置

2、在主函数中调用各自的初始化

stm32f407 uart dma,stm32,单片机,学习

3、在需要串口传输数据的时候使能USART_DMACmd并开启DMA传输

stm32f407 uart dma,stm32,单片机,学习

4、判断DMA传输是否完成(使用DMA状态标志位TCIF)

stm32f407 uart dma,stm32,单片机,学习文章来源地址https://www.toymoban.com/news/detail-762899.html

 5、DMA传输完成后清除传输完成标志

到了这里,关于stm32F407学习DAY.14 在DMA模式下进行USART串口数据收发(正点原子例程为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32F407 ADC+DMA采集压力变送器数据(HAL库)】

    之前项目中需要对麦克传感器的mpm480隔爆压力变送器(4-20ma输出)的数据进行实时采集,使用STM32F407作为控制器,使用信号转换模块将压力变送器4-20ma的输出转换为0-3.3v的信号量,输入到STM32F407板子的ADC1的通道10,并使用DMA2通道0数据流0将采集的多个值从外设直接存入存储器

    2024年02月16日
    浏览(16)
  • STM32F407以太网DMA描述符和数据链路层收发数据

    本文主要介绍STM32F407单片机MAC内核的DMA描述符,以及如何实现以太网二层的数据收发。这一篇先实现数据链路层的正常收发,下一篇再去介绍如何把LWIP移植到单片机上。大部分资料都是把LWIP移植和以太网卡驱动放在一起介绍,对新手不友好。所以我在这篇文章先把网卡驱动

    2024年02月10日
    浏览(18)
  • 洋桃电子STM32F407单片机入门教程笔记九:低功耗模式

      此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接: 第28集)低功耗模式_哔哩哔哩_bilibili         在之前的程序里应用程序在while(1)主循环中反复执行,ARM内核以100%的功率工作。这样的设计简单稳定,内核全速运行的功耗也只有几十毫安,对于外接电源的设备

    2024年01月23日
    浏览(28)
  • 正点原子stm32F407学习笔记5——串口通信实验

    上位机给开发板发送数据,开发板将收到的数据发回给上位机 串口设置的一般步骤可以总结为如下几个步骤: 串口时钟使能,GPIO 时钟使能。 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。 GPIO 初始化设置:要设置模式为复用功能。 串口参数初始化:设置波特率,字长,奇

    2024年02月06日
    浏览(20)
  • 野火霸天虎 STM32F407 学习笔记_1 stm32介绍;调试方法介绍

    博主开始探索嵌入式以来,其实很早就开始玩 stm32 了。但是学了一段时间之后总是感觉还是很没有头绪,不知道在学什么。前前后后分别尝试了江协科技、正点原子、野火霸天虎三次 stm32 的课程学习。江协科技的 stm32f103c8t6 课程看了一段时间,感觉对一些外设的调用方法有

    2024年02月06日
    浏览(17)
  • 【STM32F407学习笔记】中断优先级管理与外部中断

    计算机系统中中断占有极其重要的地位,在嵌入式系统中更是如此。中断机制能让计算机有效合理的发挥效能和提高效率。 涉及外设 :EXIT外部中断,NVIC内嵌向量中断控制器。 计算机在执行程序的过程中,当出现异常情况或特殊情况时,计算机停止现在程序的运行,转向对

    2024年02月02日
    浏览(26)
  • 野火霸天虎 STM32F407 学习笔记_2 寄存器介绍

    虽然正式编程没有必要用寄存器编程,通常都是库函数或者 hal 库。但是还是有必要学一下原理的。 寄存器映射 芯片视图如下。 丝印:芯片上印的信息。型号,内核,生产批次等。 引脚:左上角是有小圆点的,从左上-左下-右下-右上逆时针看。或者如果没有小圆点,把丝印

    2024年02月06日
    浏览(23)
  • 从STM32F407到AT32F407(一)

    雅特力公司的MCU有着性能超群,价格优越的巨大优势,缺点是相关资料少一些,我们可以充分利用ST的现有资源来开发它。 我用雅特力的STM32F437开发板,使用原子 stm32f407的开发板自带程序,测试串口程序,原设定串口波特率为115200,但是输出乱码,波特率改成230400,串口输

    2024年02月02日
    浏览(29)
  • 【正点原子STM32连载】第三十三章 待机模式实验 摘自【正点原子】APM32F407最小系统板使用指南

    1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html## 本章介绍APM32F407低功耗模式中的待机模式,进入待机模式后,MCU内部的电压调压器将断开1.3V电源域

    2024年02月07日
    浏览(20)
  • STM32F407的介绍

    内核 32位 高性能ARM Cortex-M4处理器 时钟: 高达168MHz,实际还可以超频一点点 stm32f407的主频通过PLL倍频后能够达到168MHz,而且芯片内置一个16MHz的晶振和一个32KHz的晶振,可以满足不同功耗的需求。 支持FPU(浮点运算)和DSP指令 144引脚 114个IO口 存储器容量: 1024K FLASH, 192K

    2024年02月10日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包