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

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

3天内不再提示

STM32F1 _DMA_USART

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-08 10:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

今天总结“STM32F103DMA_USART”,DMA学习过计算机人都明白它是什么意思,就是直接存储器存取(Direct Memory Access),很多人都知道它的意思,但基本上不知道的怎么用,或者不知道它的用途。其实DMA在计算机里面是非常重要的,它可以减少CPU的资源。大家都用U盘拷贝过数据,这就是很常见的DMA应用。假如不适用DMA传输数据,我们拷贝大文件的时候,我们的电脑操作其他应用程序的时候估计会把电脑卡死。

今天就总结一下DMA常用于串口通信的例子,实例源代码请自行下载。由于时间有限,只讲解了DMA发送及中断,接收这一块还没有来得及整理,后期我将以实例讲解,请持续关注。

下载

提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。

今天的软件工程下载地址(360云盘):

https://yunpan.cn/cSdzWimMT8v7S访问密码 4a02

STM32F10x的资料可以在我360云盘下载:

https://yunpan.cn/crBUdUGdYKam2访问密码 ca90

内容讲解

工程概要说明: 今天使用DMA1通道4(这里是重点,下面讲解)传输串口发送的数据。工程配置串口使能DMA传输,DMA按要求发送完成会响应DMA中断,这时在中断里变化一次LED,以提示的作用。关于串口使用DMA接收的原理类似,后期我会举例讲解。

提供的工程以简单为原则,详细中文注释,方便自己方便大家。

关于“STM32F103 DMA_USART”我把重要的几点在下面分别讲述:

一、RCC时钟

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

注意:

这里是使用RCC_AHBPeriphClockCmd,我开始调试的时候,使用RCC_APB1PeriphClockCmd,怎么都不行,结果我才发现时钟错了。

二、DMA的NVIC配置

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

由于使用DMA中断,这里必须配置才能响应中断。

三、DMA输出配置

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

主要就是我框出来的两点比较重要,串口发送数据寄存器地址,中断需要配置。

这里我封装成一个发送函数接口,所以下面是直接调用这个函数。

四、DMA中断

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

提出来说,有两点:1、函数必须有。2、需要清除标志位。

五、今天的重点

为什么是“DMA1_Channel4”,开始学习的人很纳闷,其实这里是规定的(定的要求,见手册)。

说明

今天提供的软件工程基于STM32F103大容量芯片,其实只要适当修改工程的部分配置,STM32F1的芯片都适用。

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

    关注

    3

    文章

    577

    浏览量

    105368
  • USART
    +关注

    关注

    1

    文章

    201

    浏览量

    32938
  • STM32F10
    +关注

    关注

    0

    文章

    49

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SDK资源包bug drv_usart.c不能使用UART9及以上的串口怎么解决?

    的问题,USART6复用配置好像也有问题,这个没有细看不是很确定。附上图片 问题三:在stm32_uart_get_dma_config(void)函数中只有串口1至串口6,虽然影响不是很大。
    发表于 09-25 06:37

    GD32的串口DMA收发数据失败怎么解决?

    我在使用RTT的GD32F303的BSP时,配置使用串口DMA收发(rt_device_open),发现错误,最终无法收发数据,对比了STM32的BSP发现在drv_usart.c中
    发表于 09-17 06:04

    制作STM32F1开发板的BSP失败的原因?

    \\bsp\\stm32\\stm32f10x_template,然后通过Keil5打开工程并编译,出现如下错误: compiling stm32f1xx_hal_nor.c... \"
    发表于 08-29 07:42

    STM32F407多机RS485串口通讯+地址位唤醒+DMA空闲线接收,无法进入中断服务程序怎么处理?

    / hdma_usart3_rx.Instance = DMA1_Stream1; hdma_usart3_rx.Init.Channel = DMA
    发表于 07-10 07:28

    小马哥STM32F1主控720空心杯四轴飞行器资料(包含源代码和相关教程)

    小马哥STM32F1主控720空心杯四轴飞行器资料(包含源代码和相关教程),推荐下载!
    发表于 05-29 21:51

    小马哥STM32F1主控720空心杯四轴飞行器资料(包含源代码和相关教程)

    小马哥STM32F1主控720空心杯四轴飞行器资料(包含源代码和相关教程) 项目实例下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-23 21:07

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

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

    STM32F1能使用11.059Mhz外部晶振吗?怎么设置系统频率和PLL?

    请问STM32F1能使用11.059Mhz外部晶振吗?如果可以,怎么设置系统频率和PLL?
    发表于 03-14 06:31

    求助,关于STM32F407 DMA NVIC设置的疑问求解

    采用STM32F407, DMA1 stream5(request: usart2_rx)DMA1 stream6(usart2_tx),
    发表于 03-13 08:09

    Arduino中可以使用STM32F1或者STM32F4系列芯片的内置看门狗吗?

    Arduino中可以使用STM32F1或者STM32F4系列芯片的内置看门狗吗
    发表于 03-13 07:32

    stm32g0b1中的usart5进不去HAL_UARTEx_RxEventCallback,为什么?

    请教一下关于stm32g系列的问题,stm32g0b1中的usart5进不去HAL_UARTEx_RxEventCallback,cudemx上配置跟其他串口也是一样的,都打开中断了,也配置了
    发表于 03-13 06:51

    stm32F407使用HAL_UARTEx_RxEventCallback实现的uart数据接收不会被清理,一直累加怎么解决?

    我正在使用stm32F407学些开发stm32环境,在调试usart1的环境中遇到了问题:我使用DMA+中断的方式来实现数据的收发,但是每次我使用串口工具发送相同长度的数据过来,在
    发表于 03-07 07:15

    CKS32F107xx系列USART的LIN模式

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

    如何使用DMA进行USART不定长度接收

    在上一讲中,我们对USART进行了简单介绍,并讲解了如何在不使用DMA的情况下进行不定长度数据接收,本讲将着重讲解如何使用DMA进行USART不定长度接收。
    的头像 发表于 02-18 17:01 1367次阅读
    如何使用<b class='flag-5'>DMA</b>进行<b class='flag-5'>USART</b>不定长度接收

    STM32F1开发指南

    这本书详细讲述了STM32HAL库开发的配置流程,非常详细
    发表于 01-21 15:33 3次下载