本节目标:
- 通过DMA,无需中断,接收不定时长的串口数据
描述:
当在串口多数据传输下,CPU会产生多次中断来接收串口数据,这样会大大地降低CPU效率,同时又需要CPU去做其它更重要的事情,我们应该如何来优化?
比如四轴飞行器,当在不停地获取姿态控制方向时,又要去接收串口数据.
答:使用DMA,无需CPU中断便能实现接收串口数据
1.DMA介绍
DMA,全称为: Direct Memory Access,即直接存储器访问, DMA 传输方式无需 CPU 直接
控制传输,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。
2在main()中调用串口配置函数,初始化串口后,然后使能UART1_RX的DMA接收
2.1在main()函数中,使用以下函数来调用配置函数:
uart_init(115200); //串口初始化为115200
2.2 uart_init()函数如下:
void uart_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟 //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //