当前位置:网站首页>利用 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就可以啦。
以上有来自网友的参考,也有自己实践出来的,希望能帮助大家解决一点小困惑,共同学习。谢谢。
附上我的源代码发在论坛里了,自己去搜索下载
边栏推荐
猜你喜欢

MySQL两阶段提交串讲

subprocess.CalledProcessError: Command ‘pip install ‘thop‘‘ returned non-zero exit status 1.

@Configuration详解

分布式领域最重要的一篇论文,到底讲了什么?

nucleo stm32 h743 FREERTOS CUBE MX配置小记录

API 低代码开发:接口大师,一套开发、管理和提供接口的产品框架

mysql中如何查看表是否被锁
![[详解C语言]一文带你玩转C语言小游戏---三子棋](/img/a7/1266ec8d1cc838a06fe4ff6810c0de.png)
[详解C语言]一文带你玩转C语言小游戏---三子棋

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

磷脂-聚乙二醇-叠氮,DSPE-PEG-Azide,DSPE-PEG-N3,MW:5000
随机推荐
2022.7.30 js notes Operators and flow controllers, loops
【C语言万字长文】 宏定义 结构体 共用体 内存对齐知识点总结
Basic usage of Monaco Editor
JJWT工具类
day11--shell脚本
MySQL8.0与MySQL5.7差异分析
Cut out web icons through PS 2021
yolov5调用ip摄像头时出现的问题
【面经】米哈游数据开发一面二面面经
Cloud server installation and deployment of Nacos 2.0.4 version
@ApiModel 和 @ApiModelProperty
DSPE-PEG-PDP,DSPE-PEG-OPSS,磷脂-聚乙二醇-巯基吡啶供应,MW:5000
基本运算符
AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'
语义分割标签即像素值的巨坑,transforms.ToTensor()的错误使用
Redis的集群模式
@Autowired详解[email protected]在static属性上的使用
「PHP基础知识」空值(null)的使用
磷脂-聚乙二醇-靶向新生血管靶向肽APRPG,DSPE-PEG-APRPG
API 低代码开发:接口大师,一套开发、管理和提供接口的产品框架