我们使用USART1串口外设,从数据手册中可以查到,USART1的发送和接收都是支持DMA的,使用的是DMA2. 接下来我们循序渐进了解DMA在串口中的应用 02、DMA接收 我们先配置DMA,将DMA外设和串口联动起来。首先需要配置DMA。 DMA配置这一块不再详解,不太懂的同学请看文章《STM32DMA详解》,这里我们直接贴代码。 voidDM...
DMA是CPU一个用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,数据拷贝结束则通知CPU处理。因此,大量数据拷贝时,使用DMA可以释放CPU资源。 在STM32控制器中,芯片采用Cortex-M3架构,总线结构有了很大的优化,DMA占用另外的总线,并不会与CPU的系统总线发生冲突。也就是说,DMA的使...
u8 USART_RX_BUF[35];//接收缓冲,最大USART_REC_LEN个字节.末字节为换行符MYDMA_Config(DMA1_Channel5,(u32)&USART1->DR,(u32)USART_RX_BUF,35);//DMA1通道5,外设为串口1,存储器为SendBuff,长度35, 3.3 MYDMA_Config()函数如下,最后会调用MYDMA_Enable()开始一次DMA传输!: voidMYDMA_Config(DMA...
STM32使用DMA接收串口数据
我们使用USART1串口外设,从数据手册中可以查到,USART1的发送和接收都是支持DMA的,使用的是DMA2. 接下来我们循序渐进了解DMA在串口中的应用 02、DMA接收 我们先配置DMA,将DMA外设和串口联动起来。首先需要配置DMA。 DMA配置这一块不再详解,不太懂的同学请看文章《STM32DMA详解》,这里我们直接贴代码。
我们使用USART1串口外设,从数据手册中可以查到,USART1的发送和接收都是支持DMA的,使用的是DMA2. 接下来我们循序渐进了解DMA在串口中的应用 02、DMA接收 我们先配置DMA,将DMA外设和串口联动起来。首先需要配置DMA。 DMA配置这一块不再详解,不太懂的同学请看文章《STM32DMA详解》,这里我们直接贴代码。
使用STM32标准库实现开启串口1的DMA接收数据并在空闲时产生中断的步骤如下: 配置串口1的硬件初始化参数。包括波特率、数据位、停止位、奇偶校验等。 // 串口1配置 USART_InitTypeDef USART_InitStruct; USART_InitStruct.BaudRate=9600; USART_InitStruct.WordLength=USART_WordLength_8b; ...
在串口讲解的文章中,示例代码采用中断方式接收和发送数据,中断的好处在于可以及时响应,快速接收到数据,但缺点也很明显,那就是频繁中断,接收1000个字节需要中断1000次,频繁中断就意味着会打断其他代码的执行,对一些应用场景是不允许的。 01概述 在之前的文章里《STM32串口详解》和《STM32 DMA详解》文章中,详细讲解了...
如果接收的数据长度固定,那就好办,直接设置DMA的接收数据个数就行了。但是如果长度不固定了,那应该怎么办了? 这个时候,就要用到STM32在串口中提供的另一个好用的东西了,就是串口空闲中断。在STM32的串口控制器中,设置了有串口空闲中断,即如果串口空闲,又开启了串口空闲中断的话,就触发串口空闲中断,然后程序就会...
STM32CubeIDE STM32F103RB WIN10 HAL库V1.8 首先配置串口: 开启串口中断: 开启DMA接收: 配置中断分组: 取消自动生成串口1的中断服务程序,我们自己写: 然后生成代码就可以了。 进入代码,添加串口1中断服务程序: #define UART_RX_LEN 1024 // 一次最大接收的数据量 ...