本文主要是介绍串口的空闲中断与DMA——高级应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 前言
- 程序
前言
串口中断接收数据,例如AT指令发送与接收。检测到数据寄存器有数据后触发串口中断,在中断服务函数中,将数据寄存器值存到内存中,并清理非空标志位
,这种传统做法是传输一个字节产生一次中断。
现在使用DMA,数据寄存器有数据后,DMA自动把数据寄存器值存到指定位置,DMA规定传输n个字节后串口空闲了,然后触发串口中断,在中断服务函数中,清理空闲标志位
,这种做法是串口接收到n个字节后产生一次中断。
程序
- 串口初始化
- DMA初始化
- 串口中断服务函数
static void Usb2ComDmaInit(void)
{/* 使能DMA时钟;*/rcu_periph_clock_enable(g_uartHwInfo.rcuDma);/* 复位DMA通道;*/dma_deinit(g_uartHwInfo.dmaNo, g_uartHwInfo.dmaCh);dma_parameter_struct dmaStruct;/* 配置传输方向;*/ dmaStruct.direction = DMA_PERIPHERAL_TO_MEMORY;/* 配置数据源地址;*/ dmaStruct.periph_addr = USART0_DATA_ADDR;/* 配置源地址是固定的还是增长的;*/ dmaStruct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;/* 配置源数据传输位宽;*/ dmaStruct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;/* 配置数据目的地址;*/dmaStruct.memory_addr =
这篇关于串口的空闲中断与DMA——高级应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!