当前位置:网站首页>利用 nucleo stm32 f767zi 进行USART+DMA+PWM输入模式 CUBE配置
利用 nucleo stm32 f767zi 进行USART+DMA+PWM输入模式 CUBE配置
2022-08-02 03:21:00 【& Tom】
相信用过stm官方核心板的朋友们都知道 cube 这个神奇的东西,我也是刚接触这东西没两个月,就最基本的 usart+dma+exit+pwm输入模式跟大家分享一下,希望能跟大家一起学习。
1、USART_TX+DMA:
USART大家都不陌生,就不解释,解释一下DMA吧,官方定义为:直接存储器访问控制器。可在无CPU干预下进行数据传输,多方便啊,一边传数据一边干别的事,一举两得。
言归正传:直接上图,串口利用DMA进行数据传输。
第一步:串口配置照旧,没啥不一样

第二部:在串口 DMA Settings 添加 串口DMA通道,如图

在这里只用了串口发送DMA ,所以会看到是 USART_TX 优先级等参数根据自己的需要自己设定
好了,出口配置就差不多了,接下来配置 PWM的输入模式,用了定时器3 具体配置看图说话

PWM输入模式,不需要设置通道,只需要选择一下 PWM输入模式就行了。
再仔细看定时器的设置:

看好这两个设置,PWM输入模式是定时器输入捕获的一个特例,可以用来测量脉冲宽度。
在这里楼主也用到了DMA传输,在配置时同样要添加DMA通道,就不上图了,参照前边地添加方法
好了,可以生成答案吗了,注意,CUBE是强制生成DMA中断。
接下来就是程序设置了:
在主程序中,添加开启 串口发送DMA 和 定时器输入捕获DMA 开启函数
HAL_UART_Transmit_DMA(&huart1,Tx_Buff,1000);
HAL_TIM_IC_Start_DMA(&htim3,TIM_CHANNEL_1,TIM3_INPUT,1000);这样就开启了串口发送DMA和输入捕获DMA 就都开启了,但是,这样是不是就能直接用了呢,当然不是!
这样不加处理的话就只能传输一遍,然后所有的中断中标志位都被置位,而且使能DMA的EN也会被清除,无法再次启动传输。

原因就是DMA配置成了单次模式,如上图所示,这样一来,DMA就会触发一次传输完成之后,一直处于忙状态,没有清除相应的流传输完成中断标志位,而且没有使能DMA, 就无法启动第二次传输。
经过一番仿真,终于搞定了这一步,下面贴上代码
在DMA中断函数里会把相应的流传输完成中断标志位给清零,我们要做的就是给清除相应的传输完成中断标志位和使能DMA
1.串口发送DMA 在中断里添加代码
/* USER CODE BEGIN DMA2_Stream7_IRQn 1 */
/* Disable the tx DMA peripheral */
__HAL_DMA_DISABLE(&hdma_usart1_tx);
/*Clear the DMA Stream pending flags.*/
__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx,__HAL_DMA_GET_TC_FLAG_INDEX(&hdma_usart1_tx));
/* Process Unlocked */
__HAL_UNLOCK(&hdma_usart1_tx);
__HAL_DMA_ENABLE(&hdma_usart1_tx);
/* USER CODE END DMA2_Stream7_IRQn 1 */2.定时器的DMA中断与串口DMA中断不尽相同,用同样的代码不管用
通过仿真来看是相应的流传输完成中断标志位没清除,导致无法使能DMA
所以在中断里直接清位,使能就OK啦
上图
到这里,两个DMA就可以啦。
以上有来自网友的参考,也有自己实践出来的,希望能帮助大家解决一点小困惑,共同学习。谢谢。
附上我的源代码发在论坛里了,自己去搜索下载
边栏推荐
猜你喜欢

磷脂-聚乙二醇-叠氮,DSPE-PEG-Azide,DSPE-PEG-N3,MW:5000

科研试剂DMPE-PEG-Mal 二肉豆蔻酰磷脂酰乙醇胺-聚乙二醇-马来酰亚胺

Knowledge Engineering Assignment 2: Introduction to Knowledge Engineering Related Fields

LeetCode:第304场周赛【总结】

Redis笔记进阶篇:万字长文-整理Redis,各种知识点,建议收藏
![[Remote Control Development Basic Tutorial 3] Crazy Shell Open Source Formation UAV-ADC (Joystick Control)](/img/8f/4944a31ca7066f300ef1ffe2d226e1.png)
[Remote Control Development Basic Tutorial 3] Crazy Shell Open Source Formation UAV-ADC (Joystick Control)

RHCSA第三天

Redis安装,基本命令,持久化方式,集群

MySQL两阶段提交串讲

DSPE-PEG-DBCO 磷脂-聚乙二醇-二苯并环辛炔 一种线性杂双官能聚乙二醇化试剂
随机推荐
Phospholipid-Polyethylene Glycol-Aldehyde DSPE-PEG-Aldehyde DSPE-PEG-CHO MW: 5000
【博学谷学习记录】超强总结,用心分享 | 软件测试 接口测试基础
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
MySQL删除表数据 MySQL清空表命令 3种方法
MySQL分区表详解
DSPE-PEG-PDP,DSPE-PEG-OPSS,磷脂-聚乙二醇-巯基吡啶供应,MW:5000
MySQL中的各种锁(行锁、间隙锁、临键锁等等LBCC)
parser = argparse.ArgumentParser()解析
np.isnan ()
String comparison size in MySQL (date string comparison problem)
[Basic Tutorial of Remote Control Development 1] Crazy Shell Open Source Formation Drone-GPIO (Remote Control Indicator Light Control)
sh: 1: curl: not found
AttributeError: Can't get attribute 'SPPF' on
UserWarning:火炬。meshgrid:在以后的版本中,它将被要求通过索引ing argu
「PHP基础知识」空值(null)的使用
JJWT tool class
ssm各类配置模板
The @autowired distinguished from @ the Resource
2022ACM夏季集训周报(五)
Phospholipid-polyethylene glycol-thiol, DSPE-PEG-Thiol, DSPE-PEG-SH, MW: 5000