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

    文章

    568

    浏览量

    101442
  • USART
    +关注

    关注

    1

    文章

    198

    浏览量

    31153
  • STM32F10
    +关注

    关注

    0

    文章

    45

    浏览量

    15702
收藏 人收藏

    相关推荐

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

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

    使用STM32F1输入捕获功能时,TIM6和TIM7无法实现输入捕获是哪里的问题?

    使用STM32F1输入捕获功能时,TIM6和TIM7无法实现输入捕获,是芯片问题吗?在配置STM32F1的TIM6和TIM7定时器时,发现无法进行输入捕获,是否因为芯片功能受限?
    发表于 09-27 09:11

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

    的不同,有一个或两个DMA模块。 STM32F0XX DMA控制器总共有5个通道用于DMA1,每个通道都专门管理来自一个或多个外设的存储器访问请求。它具有一个仲裁器,用于处理不同的
    发表于 09-04 11:48

    如何使用STM32F1控制ESP8266?

    如何使用STM32F1控制ESP8266?
    发表于 07-09 06:21

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

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

    【GD32F303红枫派开发板使用手册】第十六讲 USART-DMA串口收发实验

    在前面ADC章节中,我们介绍了DMA的工作原理,这里就不多做介绍。从GD32F303用户手册中可以查到,各串口的TX和RX分别对应DMA的不同通道,比如USART0的TX对应
    的头像 发表于 06-15 09:54 1361次阅读
    【GD32<b class='flag-5'>F</b>303红枫派开发板使用手册】第十六讲 <b class='flag-5'>USART-DMA</b>串口收发实验

    如何在STM32F439 DMA流中断中区分是哪个通道产生的中断?

    STM32F439有两个DMA控制器DMA1DMA2,每个控制器有8个流,每个流有8个通道,我做的是采用串口1DMA中断接收数据,
    发表于 05-17 08:20

    STM32F103的DMA无法实现共存怎么解决?

    有幸在工程中用到STM32F103的DMA功能,而且是两个串口(USART2和USART3)都需要用到DMA功能来实现数据传输。以前用
    发表于 05-11 07:14

    stm8l的USART+DMA如何使用?

    请问大家8L的USART+DMA如何使用啊,程序如下没有发送数据。 void USART1_Send(unsigned char n) { while(!USART
    发表于 05-10 07:15

    STM32F1内部ADC的DUAL MODE的使用问题求解

    我想利用STM32F1内部的ADC采集四路电压值,因为要求同时采集,所以我使用了ADC的DUAL MODE,可是由于始终未能读明白芯片手册!ADC的设置与DMA的设置基本上参考STM32F1提供
    发表于 05-09 06:51

    stm32f1做的usb键盘,连电脑无法识别怎么解决?

    stm32f1做的usb键盘,连电脑无法识别
    发表于 04-11 08:19

    STM32F1改用STM32F2或STM32F4芯片后,发现芯片根本不能正常工作怎么解决?

    曾有工程师反映,之前用STM32F1系列芯片好好的,后来因为产品需要,改用STM32F2或STM32F4芯片后,发现芯片根本不能正常工作,即使最简单的程序也跑不顺畅。
    发表于 04-08 06:45

    STM32f1怎么判断引起CAN发送中断的ID是哪个?

    STM32f1怎么判断引起CAN发送中断的ID是哪个
    发表于 04-03 07:46

    STM32 USART中断与ADC DMA中断冲突造成硬件错误的原因?

    使用STM32USART与主机设备通讯,主机设备每隔50ms会与STM32USART通讯一次,使用ADC 的DMA功能采集数据,再通过
    发表于 04-02 06:26

    STM32F1的LL库,RTC怎么不能设置日期?

    STM32F1的LL库,RTC 怎么不能设置日期,只能设置时间。
    发表于 03-29 07:02