目录
- 前言
- 程序
前言
串口中断接收数据,例如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 =