下你所需,载你所想!
汇集开发技术源码资料

外部中断实验(串口)

:1.188MB :1 :2022-08-27 22:17:30

部分简介

外部中断实验(串口)如果开发者对于本文件有需要的可以参考。

//配置中断分组为2组,抢占优先级0~3,响应优先级0~3
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef usart1_nvic_cfg;
usart1_nvic_cfg.NVIC_IRQChannel = USART1_IRQn;
usart1_nvic_cfg.NVIC_IRQChannelPreemptionPriority = 3;
usart1_nvic_cfg.NVIC_IRQChannelSubPriority = 3;
usart1_nvic_cfg.NVIC_IRQChannelCmd = ENABLE; //启用串口中断
NVIC_Init(&usart1_nvic_cfg);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //启用串口1的接收中断

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //启动DMA1控制器的时钟

DMA_InitTypeDef dma1_cfg;
dma1_cfg.DMA_DIR = DMA_DIR_PeripheralDST; //传输方向:从内存到外设(串口1)
dma1_cfg.DMA_MemoryBaseAddr = (uint32_t)str;//起始内存地址
dma1_cfg.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //一次传输的数据量
dma1_cfg.DMA_MemoryInc = DMA_MemoryInc_Enable; //传输一次之后,内存地址是否递增
dma1_cfg.DMA_PeripheralBaseAddr = (uint32_t)&(USART1->DR); //串口数据寄存器地址
dma1_cfg.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //一次传输写入外设的数据大小
dma1_cfg.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设寄存器地址,在传输完一次之后不递增
dma1_cfg.DMA_BufferSize = sizeof str; //传输次数
dma1_cfg.DMA_Mode = DMA_Mode_Circular; //传输模式,循环传输
dma1_cfg.DMA_Priority = DMA_Priority_Low; //通道优先级
dma1_cfg.DMA_M2M = DMA_M2M_Disable; //不是内存到内存的传输
DMA_Init(DMA1_Channel4, &dma1_cfg);

USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE); //启用串口1的DMA发送

热门推荐

相关文章