用HAL库改写江科大的stm32入门例子8-1 DMA数据转运

实验1-实验目的:通过DMA把buffer的数据搬运到buffer2当中。

//declare a buffer to store the data
uint32_t buffer[3] = {1,2,3};

//declare a buffer to store the data
uint32_t buffer2[3] = {0,0,0};

DMA:是个搬运数据的小助手。

相关设置:

main函数中搬运数据:

  HAL_DMA_Start(&hdma_memtomem_dma1_channel1, (uint32_t)buffer, (uint32_t)buffer2, 10);

so easy!  one line code~

观察结果:

首先把buffer  buffer2 右键加入watch:

其次断点运行代码:

最后再watch窗口观察变量。

实验2-串口与DMA配合使用:

 

代码如下:

uint8_t  t=0x11;
 HAL_UART_Transmit_DMA(&huart1,&t,1);

运行效果:

DMA +串口接收数据:

也就是一行代码:

uint8_t buffer2[3] = {0x00,0x00,0x00};
...
main(){
 ...
 HAL_UART_Receive_DMA(&huart1,buffer2,3);
}

当数据接收完后,会产生中断:

// interupt callback function for DMA1_Channel5_IRQn
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  	if(huart->Instance == USART1) {
    // if the data is received successfully, the data will be sent back to the sender
      HAL_UART_Transmit_DMA(&huart1,buffer2,3);
      //start the DMA-usart1 recevie data,data save to buffer2
      HAL_UART_Receive_DMA(&huart1,buffer2,3);
  }
}

看结果: 

另外,可以利用空闲中断接收不定长数据,但就我个人习惯而言,优先用定长数据,这也应该更合理,本文就不展开这些内容了。

(空闲中断也是三个方式)

直接上空闲中断回调函数代码,不多解释了。

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
  if(huart->Instance == USART1) {
    // if the data is received successfully, the data will be sent back to the sender
      HAL_UART_Transmit_DMA(&huart1,buffer2,3);
      //start the DMA-usart1 recevie data,data save to buffer2
      HAL_UARTEx_ReceiveToIdle_DMA(&huart1,buffer2,3);
  }
}

ps:

如果要开启调试,必须配置SYS

在一般工程中,通用的配置是开启时钟(RCC配置)、以及HAL初始化配置(SYS配置)。本文主要讲解SYS配置。

SYS配置页各配置项

CubeMX 中 SYS配置页如下:

Debug :
默认是关闭的,如果不使用调试器关闭即可,即No Debug;
在STM32CubeMX的SYS选项栏中有SW和JTAG协议选项,用户可以根据需要选择相应的协议;

JTAG调试接口(JTAG-DP)需要5个引脚;CubeMX中可选择5pin或4pin的JTAG,5pin比4pin多了一个复位引脚。
SW调试接口(SW-DP)需要2个引脚。二者之间有复用引脚。SW调试端口采用同步串行协议:SWCLK引脚为从主机到从机的时钟信号;SWDIO为双向数据信号。

ST-Link采用的是SW调试接口,选择Serial Wire ;
J-Link采用的是JTAG调试接口,根据实际要求选择 JTAG(4pin) 或者 JTAG(5pin) ;
如果使用J-Link 但是采用SWD协议,也可以选择Trace Asynchronous Sw ;
Trace Asynchronous Sw 模式有时候也可以解决使用ST-Link 烧录之后无法烧录和调试的情况

为了避免一次烧录之后无法下一次烧录或者调试的情况, 推荐选择Serial Wire

如果在STM32CubeMX中选择SW协议,MDK 也必须 选择SW协议。JTAG协议配置也同理。否则会造成下载和调试失败。在实际项目中SW协议使用使用的比较多,速度更快,占用的引脚更少,推荐配置成SW协议,即Serial Wire模式;

System Wake-Up :
设置低功耗模式下的自动唤醒功能,通过引脚PA0。

Timebase Source :
一般指HAL的时基,即HAL库中的uwTick,用于实现HAL_Delay()以及作为各种timeout时钟的基准。一般情况下直接选择默认的Sys Tick(嘀嗒定时器)来维护SYS Timebase Source即可,即直接放在SysTick_Handler()中断服务函数中,也就是下面的HAL_IncTick()函数。
 

MDK中对应的调试设置

在魔术棒设置界面,进入(1)Debug界面,在(2)位置选择自己使用的下载器,然后进入(3)Settings界面;

在Settings界面 ,根据之前在STM32CubeMx里面SYS设置的,进行选择这里使用的SW还是JTAG协议;
注意STM32CubeMx 和 MKD 里面协议要一致,否则无法进行调试

补充

单片机的三种烧录模式
ICP:使用SWD接口进行烧录,如J-Link烧录器和J-Flash软件配合使用。
ISP:使用引导程序(Bootload)加上外围UART/USB等接口进行烧录。
IAP:软件自身实现在线电擦除和编程的方法,不使用任何工具。程序通常分成两块,分别为引导程序和应用程序。

CubeMX代码生成器配置

Copy all used libraries into the project folder
将HAL库的所有.C和.H都复制到所建工程中
优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便
缺点: 体积大,编译时间相比于其他选项非常长

Copy only the necessary library files
只复制所需要的.C和.H
优点:体积相对小,编译时间短,并且工程可复制拷贝
缺点: 新增外设时需要重新用STM32CubeMX导入

Add necessary library files as reference in the toolchain project configuration file
不复制文件,直接从软件包存放位置导入.C和.H
优点:体积小,比较节约硬盘空间
缺点: 复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径

根据自己需求选择就行,一般来说第一个和第二个都行;


参考:CSDN博主「Dir_xr」原文链接:https://blog.csdn.net/Dir_x/article/details/128846252

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/615659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DHCP原理

什么是DHCP DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)是由Internet工作任务小组设计开发的,专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议,是一个应用层协议,使用UDP的67和68端口。 DHCP的前身是B…

导航软件iApp源码V3+配置教程

一款支持侧边导航栏的网页导航APP源码,风格简约为主,可以通过远程文档进行远程控制列表,浏览器拥有检测下载的功能。,配置较为简单,适合入门小白学习参考。 导航软件iApp源码V3配置教程 配置教程在mian.iyu的载入事件…

BGP基础

1.BGP概述 (1)AS IANA(Internet Assigned Numbers Authority,因特网地址分配组织):IAB(Internet Architecture Board,因特网体系委员会)的下设组织。IANA授权NIC&#x…

【hana】hana1.0多容器常用命令

基础命令 数据库 连接数据库 hdbsql -u system -p {passwd} -i 02 -d {dbname}查询所有数据库 SELECT DATABASE_NAME, ACTIVE_STATUS FROM M_DATABASES;停止数据库,会修改数据库状态为No ALTER SYSTEM STOP DATABASE testdb; 启动数据库,会修改数据…

基于阿里云向量检索 Milvus 版与 PAI 搭建高效的检索增强生成(RAG)系统

阿里云向量检索 Milvus 版现已无缝集成于阿里云 PAI 平台,一站式赋能用户构建高性能的检索增强生成(RAG)系统。您可以利用 Milvus 作为向量数据的实时存储与检索核心,高效结合 PAI 和 LangChain 技术栈,实现从理论到实…

Gitlab:从其它项目组里导入一个项目

1.首先获取原项目的http地址 http://ip/projectGroup/ProjectX.git其中,ip 为公司gitlab内网地址。 2.进入目的项目组进行创建 首先,需要拥有一个该组拥有者权限的账号,才能进行后续的操作。 2.1.点击创建项目按钮 2.2.选择导入项目 其中…

C语言基础——循环语句

🌺​🙏🙏🙏欢迎大家观看,写的好的话希望三连感谢🙏🙏🙏🌺 文章目录 一、循环语句的介绍 二、不同循环语句的使用 1.while循环 1.1 while循环的使用方式 1.2 while循环的执…

ICode国际青少年编程竞赛- Python-4级训练场-综合训练4

ICode国际青少年编程竞赛- Python-4级训练场-综合训练4 1、 Dev.turnLeft() Dev.step(3) Dev.turnRight() Dev.step(3) Dev.turnLeft() Dev.step(4)2、 for i in range(3):Dev.step(2)Dev.turnRight()while Flyer[i].disappear():wait()Dev.step(2 i)Dev.turnLeft()3、 …

【机器学习】逻辑回归:智能垃圾邮件分类实例

逻辑回归:智能垃圾邮件分类的利器 一、引言二、逻辑回归概述三、垃圾邮件分类实例数据准备特征选择与建模 四、总结与展望 一、引言 随着互联网的迅猛发展,电子邮件已成为人们日常生活和工作中不可或缺的一部分。然而,与此同时,垃…

docker+nginx+Jenkins自动构建

文章目录 前言一、实操记录问下AI:jenkins 配置新增一个mobilegit配置Build TriggersBuild EnvironmentBuild StepsPost-build Actions 上面一顿配置下来,构建 -- FAILURE 总结 前言 在已有docker-Jenkins-nginx 部署方案上,在另外一台测试…

【定制化】在Android平台实现自定义的程序启动页

特别说明:以下仅适用于Android平台。 实现原理 创建安卓端自定义的Activity禁用UnityPlayerActivity的启动Logo改用自定义Activity 示例效果 参考简单步骤或详细步骤都可实现。 自定义的启动动画,效果如下: 简单步骤 三步操作实现启动动画…

亚信安全发布《2024年第一季度网络安全威胁报告》

亚信安全2024年第一季度网络安全威胁报告 一季度威胁概览 《亚信安全2024年第一季度网络安全威胁报告》的发布旨在从一个全面的视角解析当前的网络安全威胁环境。此报告通过详尽梳理和总结2024年第一季度的网络攻击威胁,目的是提供一个准确和直观的终端威胁感知。…

Excel 分组汇总后删除明细

有 Excel 数据如下所示: IDCriteria1Criteria2Criteria3Criteria4101210271239312381236123171826182918239182120182147 需要按 ID 分组汇总其余列,结果如下: IDCriteria1Criteria2Criteria3Criteria410121027123932561826939267 解法及简…

yo!这里是socket网络编程相关介绍

目录 前言 基本概念 源ip&&目的ip 源端口号&&目的端口号 udp&&tcp初识 socket编程 网络字节序 socket常见接口 socket bind listen accept connect 地址转换函数 字符串转in_addr in_addr转字符串 套接字读写函数 recvfrom&&a…

线性集合:ArrayList,LinkedList,Vector/Stack

共同点:都是线性集合 ArrayList ArrayList 底层是基于数组实现的,并且实现了动态扩容(当需要添加新元素时,如果 elementData 数组已满,则会自动扩容,新的容量将是原来的 1.5 倍),来…

STK与matlab交互 Astrogator模块(14)

一、背景介绍 高轨卫星的轨道保持。与任何其它轨道状态一样,地球同步轨道也会受到各种扰动力的影响,这些摄动力会影响GEO卫星在位置方面的稳定性。摄动的主要来源是地球的非地球位势、太阳辐射压力和第三体效应(主要是月球和太阳&#xff09…

特产销售|基于Springboot+vue的藏区特产销售平台(源码+数据库+文档)​

目录 基于Springbootvue的藏区特产销售平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道…

JavaScript 防抖与节流——以游戏智慧解锁实战奥秘

🔥 个人主页:空白诗 文章目录 🎮 引言❓ 什么是防抖和节流🏹 防抖(Debounce) - 锁定追击,精确无误📌 基础概念📌 适用场景📌 实战代码:防抖 应用于输入框的实时搜索 &…

【Python-爬虫】

Python-爬虫 ■ 爬虫分类■ 1. 通用网络爬虫:(搜索引擎使用,遵守robots协议)■ robots协议(君子协议) ■ 2. 聚集网络爬虫:自己写的爬虫程序 ■ urllib.request(要导入的模块&#x…

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题: 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本: sed -i s/old_string/new_string/g /path/to/file然而,当我在Mac OS X上尝试时,我得到: command i expects \ followed by text我以为我的Mac运行的是…