草庐IT

STM32的DMA中FIFO和突发模式理解

STM32的DMA中FIFO和突发模式理解学习stm32DMA时遇到了FIFO和突发配置的疑惑,看手册完全云里雾里,节拍是什么等等都不清楚。首先理解什么是突发,突发传输就是两个设备进行数据传输,一个设备发数据,一个设备接收数据,或者像是CPU到内存进行读取数据,肯定是每读取一个字节,读取指针就会自增一次,如果每次读一个字节,还要到程序里面执行一个指针自增指令的话,那CPU岂不是时时刻刻都在读取内存然后指针自增指令执行,那也太蠢了,CPU利用率太低了,所以出现了突发模式,我设定为CPU进行读内存,我指定一个宽度,每次读取都读这一个宽度的数据,比如为128B,每次读取,指针会自己增加,读取满了这1

STM32配置ADC2(DMA)进行采集 DAC 输出-2

0.一定要先看上一节:STM32配置ADC2(DMA)进行采集DAC输出-21.实验目标在上一节的基础上,我们把DAC(三角波)给集成进来,实现按下按键输出三角波,通过串口发送数据给电脑,分析然后画出电压的波形并且展示出来开发板:正点原子探索者STM32F407ZG2.STM32部分1.DAC部分这里我们采用实验22-2DAC输出三角波实验的例程,查看主函数找中和DAC相关的代码,发现下图红框中的函数只出现在了DAC.c中,于是我们将DAC.c添加到上一节的项目中,此时还不够,因为我们采用的是HAL库编程,还需要引入官方提供的和DAC相关的库函数才可以使用。全部添加完成后,文件结构如下图所示此

GD32 SPI DMA收发

由于需求用到GD32SPI,故做相关实验记录分享,本实验为SPIDMA发送与接收 16bit数据,GD32相关配置如下GD32F30x系列DMA配置如下 SPIDMA发:使用SPI0,对应的DMA为0Channel2。 注意打开对应DMA与SPI相关时钟,DMAwrite使用时需要先拉低NSS,发送结束,拉高NSSvoidSPI0_config(void){ rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_SPI0); rcu_periph_clock_enable(RCU_DMA0);/*SPI0GPIOconfi

完美解决HAL库HAL_UART_Transmit_DMA()不延时就发不了下一条的问题

问题原因在连续用HAL_UART_Transmit_DMA()函数的时候,会遇到只能发出第一条的问题,原因是DMA传输数据到串口这个外设太快了,传输完后程序并不会在该处停留,但是串口发送需要时间,运行到下一条HAL_UART_Transmit_DMA()函数的时候,上一条数据还没来得及发完,导致串处于BUZY(即HAL_UART_STATE_BUSY)状态如果串口处于BUZY状态,则HAL_UART_Transmit_DMA()不会进入发送程序,直接returnHAL_BUSY;这就导致了HAL_UART_Transmit_DMA()不能连续运行,目前网上主流的解决办法是延时一定时间或whil

FPGA基于AXI 1G/2.5G Ethernet Subsystem实现UDP通信DMA传输 提供工程源码和技术支持

目录1、前言2、我这里已有的UDP方案3、详细设计方案传统UDP网络通信方案本方案详细设计说明DMA和BRAMAXIS-FIFOUDP模块设计UDP模块FIFOAXI1G/2.5GEthernetSubsystem:输出4、vivado工程详解5、上板调试验证并演示注意事项6、福利:工程代码的获取1、前言目前网上的fpga实现udp基本生态如下:1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?2

STM32的HAL库开发系列 - 串口DMA接收

STM32的HAL库开发系列-串口DMA接收串口DMA接收函数:HAL_StatusTypeDefHAL_UART_Receive_DMA(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize)串口空闲中断(IDLE):当DMA串口接收开始后,DMA通道会不断的将发送来的数据转移到主存,那么问题来了,该如何判断串口接收是否完成从而及时关闭DMA通道?如何知道接收到数据的长度?答案便是使用串口空闲中断。串口空闲中断,对应事件标志为IDLE。检测到串口空闲线路时,该位由硬件置1。如果USART_CR1寄存器中IDLEIE=1,则会生成中断。该位由软

AXI DMA IP核使用说明

文章目录1AXIDMAIP核结构图2AXIDMAIP接口1寄存器说明1MM2S寄存器2S2MM寄存器2S/G描述符3DMA多通道模式3AXIDMAIP核使用说明1时钟2复位3使用说明1直接DMA使用顺序2S/G模式3循环DMA模式4AXIDMAIP核使用配置AXIDMA提供内存和AXI4-Stream目标外设之间的高带宽直接内存访问。DMA除了配置为直接DMA模式外,还可以配置为scatter/gather(S/G)模式,S/G模式减轻CPU负担。为了掌握对DMA的使用方法,需要对DMAIP核有足够的了解。这篇文章主要对AXIDMAIP核的使用进行简单的说明,接下来详细论述,首先是AXIDMA

U8g2库的STM32硬件SPI(DMA)移植教程(HAL、OLED显示、四线SPI、DMA)

U8g2库的STM32硬件SPI(DMA)移植教程U8g2库的STM32硬件SPI移植教程(HAL、OLED显示、四线SPI)前言U8g2简介U8g2是什么U8g2支持的显示控制器U8g2的优势CubexMX的配置RCC配置外部高速晶振(精度更高)——HSE:SYS配置:Debug设置成SerialWire(否则可能导致芯片自锁):时钟树配置:SPI1配置半双工(全双工):作为OLED的通讯方式:(注意这里的配置)DMA配置:工程配置:U8g2移植准备U8g2库文件精简U8g2库文件去掉csrc文件夹中无用的驱动文件精简u8g2_d_setup.c(注意不是u8x8_setup.c)精简u8g

STM32-HAL库串口DMA空闲中断的正确使用方式+解析SBUS信号

STM32-HAL库串口DMA空闲中断的正确使用方式+解析SBUS信号一.问题描述二.方法一——使用HAL_UART_Receive_DMA三.方法二——使用HAL_UARTEx_ReceiveToIdle_DMA四.方法三——使用HAL_UARTEx_ReceiveToIdle_IT(不使用DMA)五.总结一.问题描述能够点进这篇文章的小伙伴肯定是对STM32串口DMA空闲中断接收数据感兴趣的啦,今天用这一功能实现串口解析航模遥控器sbus信号时,查阅了很多网友发布的文章(勤劳的搬运工~),包括自己之前写过一篇博客STM32_HAL库_CubeMx串口DMA通信(DMA发送+DMA空闲接收不

HAL库配置通用定时器TIM触发ADC采样,然后DMA搬运到内存空间。

ADC+TIM+DMA1.简介HAL库配置通用定时器TIM触发ADC采样,然后DMA搬运到内存空间。MCU为STM32F429ADC的触发可以配置为外部触发转换支持定时器作为触发源,定时器的输出也可以不配置GPIO引脚,专门选一个输出通道作为触发源来控制ADC的采样。2.cubemx的配置以及代码cubemx的版本为6.6.0mdk的版本为5.34ADC配置因为要使用TIM来触发ADC,所以要关闭连续模式,在下面的触发选项选择TIM2的通道2,触发边沿选择上升沿触发。DMA配置要选择循环模式,否则DMA只传输一次就结束了,达不到一直触发ADC一直搬运数据的结果。定时器的配置。因为ADC是上升沿