stm32ethdma
⑴ stm32 dma串口发送和接收怎么配置
DMA接收数据只采用查询用此函数还可以。
但同时开了DMA中断的~~~~~~~
不管什么时候,都是接收完整个数据包之后才对该包进行处理,是吧?
函数DMA_GetCurrDataCounte()只得到当前收到了多少个数据,而不知道接收数据完成没有的
STM32要是有串口接收超时功能就好了。
问:如何利用STM32的资源自己做个类似超时的功能?加上DMA作为类似的接收FIFO.
⑵ STM32中DMA通道
呵呵,你这个应该是的stm32的固件库函数的修改版吧。
DMA_Channel_TypeDef*指的是DMA_Channel_TypeDef的指针,它指向一个地址。
DMA_CHx应该是一个宏定义,它定义了这个地址。
x值代表DMA的通道号,根据芯片不同,可能有1~7不等。
如果想要明白些,用goto difinition查看宏定义即可。
欢迎追问
⑶ stm32cubemx 组态怎么实现
1.新建工程
打开STM32cubeMX软件,点击New Project。选择对应开板MCU(STM32F103ZET6)。
选择工程后进入工程界面,如下图所示。
2. 配置外设。
RCC设置,选择HSE(外部高速时钟)为Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
GPIO口功能选择,PF6,PF7,PF8,PF9为LED1-LED4.找到对应管脚设置为GPIO_Output模式。(黄色引脚为该功能的GPIO已被用作其他功能,可以忽略。绿色表示管脚已使用)
3. 时钟配置
时钟配置采用图形配置,直观简单。各个外设时钟一目了然。STM32最高时钟为72M,此处只有在HCLK处输入72,软件即可自动配置。(RCC选择外部高速时钟)。
4.功能外设配置
在配置框我们可以看到有几个区域,分别对应的功能设置如下
Multimedia(多媒体):音频视频、LCD
Control(控制):定时器
Analog(模拟):DAC、ADC
Connectivity(通讯连接):串口、SPI 、I2C、USB、ETH
SYStem(系统):DMA(直接存储器存取)、GPIO、NVIC、RCC、看门狗
middlewares(中间件): FreeRTOS、FATFS、LwIP、USB
此工程中DMA没用的不用配置,NVIC(嵌套中断向量控制器(Nested Vectored Interrupt Controller))配置中断优先级。RCC不用配置。
GPIO Pin Level (管脚状态):低电平
GPIO mode (管脚模式 ):推挽输出
Maximum output speed (最大输出速度):低速
User Label (用户标签):LED1
更改用户标签,管脚配置图会显示管脚的标签。
4. 功耗计算
这个根据配置的外设计算功耗,不用理会。
5. 生成工程报告
点击Project –>Generate Reports或者点击快捷图标生成报告。系统会提示先创建一个工程项目。点击Yes设置工程。
输入工程名,选择工程路径(注意不要出现中文,否则可能出错)。工具链/IDE选择MDK-ARM V5。最后面可以设置堆栈大小,此处默认不作修改。
在Code Generator中找到Generated files框,勾选Generated periphera initialization as a pair of '.c/.h' files per IP。外设初始化为独立的C文件和头文件。
点击生成报告,工程目录下会生成txt文件和pdf文件,里面记录了我们刚才的设置。
6. 生成工程代码
点击Project –>Generate Code或者点击快捷图标生成工程代码。
点击Open Project打开工程。到此就配置好工程外设初始化。
点击Build按钮,Build Optput信息框会输出没有错误没有警告。
6. 添加应用程序
在gpio.c文件中可以看到LED管脚的初始化函数。
在stm32f1xx_hal_gpio.h头文件中可以看到GPIO的操作函数。
在main函数中的while循环中添加LED流水灯效果的应用程序。
重新编译程序,点击下载到Open103Z-C开发板。如果提示错误,可以点击图标对Option for Target 的Dubug选项进行修改。(图上选的是ST-LINK)
点击Settings->Flash Download勾选 Reset and Run选项。这样程序下载后自动启动运行,不用再按一下复位或者重新上电才能运行。
程序下载到Open103Z-C开发板。可以看到LED1~LED4依次被点亮,实现流水灯的效果。
总结:STM32Cube提供了固件库,用户可直接调用固件库函数来开发,并且可以很好的实现STM32-MCU全系列的代码一致性。同时STM32CubeMX工具提供的可视化引脚、外设、时钟等配置功能,可以帮助快速完成工程的建立、初始化。大大降低了开发者的工作量。
后续我们会结合微雪Open746I-C开发板,通过STM32cubeMX系列教程讲解如何学习STM32F7系列的片上外设。通过STM32F7系列的学习,可以让各位更快的掌握其他系列的使用方法。
附上出处链接:http://www.waveshare.net/forum/article-629-1.html
⑷ stm32 dma应用在什么地方
形象地说,DMA是MCU内的搬运工,通过DMA把数据从外设和内存之间的自动搬迁,节省软件的开销。
STM32 的DMA有三种模式:内存-外设,外设-内存,内存-内存。
我举几个例子:
USART串口发送:没DMA的情况,要发送大量数据,需要每一个字节发送后产生完成中断或轮询旗标,然后软件介入把下一个数据放入TDR寄存器,这样会有大量中断或等待消耗程序的资源,如果采用DMA的话,至需要预先在DMA通道设定要发送的数据的第一字节的内存地址(例如: &buf[0]), 和设定需要发送多少字节,开始发送后,DMA就会像z指针一样完成一节,指针自动递增或减自动移动数据到发送寄存器,直至发送完成会有一次中断通知。中间过程软件完全可以不介入。
ADC采集:多次采样或循环采样,同样地没DMA的话,采样完毕中断,搬移ADC的采样值,出现大量中断,如果是高速采样情况更甚。可以通过DMA采样完成后自动写入你指定的数组地址,一个循环后DMA一个完成中断通知你做后续的事情,例如平均算法之类的。
DAC波形输出:把波形的样本建立一个数组,使用DMA循环发送。
⑸ STM32 DMA 问题
下面的描述可以帮你理解DMA,具体使用自行查手册,读代码
DMA每一个通道可以视作一个独立的外设, 有一个源地址寄存器(),一个目标地址寄存器,
一个传输次数寄存器,若干控制寄存器
可以将传输过程视作一个额外的cpu在启动之后,开始执行如下代码:
UDdst * pDst; //UDdst可以是 u8 u16 u32 任意
UDsrc * pDst; //UDsrc 可以是 u8 u16 u32
while(TransCNT)
{
if(触发了一次传输) //一般来说指定了特定硬件功能(P2P,P2m,M2P)的话, 触发型号是外设电路给到DMA电路的,有时候启动传输会作为传输过程的第一个触发信号(比如用M2P模式发送若干数据至串口,启动时直接触发一次,后续触发则是传输完成时串口外设电路发送给DMA)
{
*pDst = *pSrc; TransCNT--;
if(源地址自动增 ==true)pSrc++;
if(目标地址自动增==true)pDst++;
}
}
⑹ STM32中DMA有什么好处
用和不用当然都可以发送。不用DMA发送是需要单片机实时参与,由单片机一个一个地发送数据并进行监控。但是如果用DMA,设置了起始地址,数据大小等参数后,就直接由专门的一个DMA模块进行数据发送,发送过程中单片机无需参与。发送完后会产生中断告知单片机。由此可知用DMA可以节省单片机资源,让单片可以在同一时间里干更多事。
⑺ STM32 DMA问题
STM32的DMA有多路!例如F103zet6有DMA1
7路
DMA2
5路,共计12路DMA通道。
使用三个不同外设分别配置三个通道即可!要注意每个外设对应的通道是手册中固定的,不能自己定义。同时避开冲突的外设即可。
举例:ADC1,TIM2_CH3,TIM4_CH1三个外设通道可配置为DMA1_CH1
。使用此三个外设时必须配置为此通道,且此三个外设不可同时使能配置使用!
⑻ 求嵌入式stm32中的dma工作原理如何个结构原理怎么实现具体实现过程是一定采纳
dma是将芯片的外设直接连接到ram上,外设可以直接访问某一段ram,这样可以提高运行的效率,减轻内核的负担。对于使用者来说,详细看看其相关寄存器的配置,使用应该挺简单的。
⑼ 关于stm32串口使用DMA接收数据的问题
USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //使能串口2的DMA发送
/*等待DMA传输完成,实际应用中,传输数据期间,可以执行另外的任务 */
while(1)
{
if(DMA_GetFlagStatus(DMA1_FLAG_TC7)!=RESET) //判断通道7传输完成
{
SZ_STM32_LED1Toggle();
SZ_STM32_LED2Toggle();
DMA_ClearFlag(DMA1_FLAG_TC7);//清除通道7传输完成标志
}
看不到你写的程序 给你个DMA中断提示