STM32F103多个串口配置DMA程序(纯代码版详解)

上传人:仙*** 文档编号:89952204 上传时间:2022-05-13 格式:DOC 页数:18 大小:77.50KB
收藏 版权申诉 举报 下载
STM32F103多个串口配置DMA程序(纯代码版详解)_第1页
第1页 / 共18页
STM32F103多个串口配置DMA程序(纯代码版详解)_第2页
第2页 / 共18页
STM32F103多个串口配置DMA程序(纯代码版详解)_第3页
第3页 / 共18页
资源描述:

《STM32F103多个串口配置DMA程序(纯代码版详解)》由会员分享,可在线阅读,更多相关《STM32F103多个串口配置DMA程序(纯代码版详解)(18页珍藏版)》请在装配图网上搜索。

1、-软件:KeilMDK芯片:STM32F103/STM32F107串口数量:4备注:4个串口均配置为DMA读取/串口1初始化函数void uart1_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

2、时钟USART_DeInit(USART1); /复位串口1/USART1_T* PA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化PA9/USART1_R* PA.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;G

3、PIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化PA10/Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;/抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;/子优先级3NVIC_InitStru

4、cture.NVIC_IRQChannelCmd = ENABLE;/IRQ通道使能NVIC_Init(&NVIC_InitStructure);/根据指定的参数初始化VIC寄存器/*Enable DMA Channel4 Interrupt */NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStru

5、cture.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/*Enable DMA Channel5 Interrupt */NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd

6、= ENABLE;NVIC_Init(&NVIC_InitStructure);/USART 参数初始化设置USART_InitStructure.USART_BaudRate = bound;/一般设置为9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;/一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;/无奇偶校验位USART

7、_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_R* | USART_Mode_T*;/收发模式USART_Init(USART1, &USART_InitStructure); /初始化串口/ USART_ITConfig(USART1, USART_IT_R*NE, ENABLE);/开启中断USART_ITConfig(USART1, USART_IT_IDLE , ENABLE);/

8、开启空闲中断USART_Cmd(USART1, ENABLE); /使能串口 /串口2初始化函数void uart2_init(u32 bound)GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/使能GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

9、/使能USART2时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;/PA2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/复用推挽GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;/PA3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /浮空输入G

10、PIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);/复位串口2RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);/停止复位USART_InitStructure.USART_BaudRate = bound;/一般设置为9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;/8位数据长度USART_InitStructure.USAR

11、T_StopBits = USART_StopBits_1;/一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;/奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_R* | USART_Mode_T*;/收发模式USART_Init(USART2, &USART_InitStructure); ; /初始化串口N

12、VIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; /使能串口2中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; /先占优先级2级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /从优先级2级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /使能外部中断通道NVIC_Init(&NVIC_InitStructure); /根据NVIC_InitStruct中指定的参数初始化外设N

13、VIC寄存器/Enable DMA Channel7 Interrupt /NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/*Enable DMA Channel6

14、 Interrupt */NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/ USART_ITConfig(USART1, USART_IT_R*NE, ENABLE

15、);/开启中断USART_ITConfig(USART2, USART_IT_IDLE , ENABLE);/开启空闲中断USART_Cmd(USART2, ENABLE); /使能串口 /串口3初始化函数void uart3_init(u32 bound) /GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE

16、);/使能GPIOB时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);/使能USART3时钟USART_DeInit(USART3); /复位串口3/USART1_T* PB.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /PB.10GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/复用推挽输出GPIO_Init(GPIOB, &GPIO_InitS

17、tructure); /初始化PB.11/USART1_R* PB.11GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化PB/USART 初始化设置/#ifdef EN_USART3_R* /如果使能了接收USART_InitStructure.USART_Bau

18、dRate = bound;/一般设置为9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;/一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;/无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/无硬件数据流控制

19、USART_InitStructure.USART_Mode = USART_Mode_R* | USART_Mode_T*;/收发模式USART_Init(USART3, &USART_InitStructure); /初始化串口/Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;/抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;/子优先级3NV

20、IC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/IRQ通道使能NVIC_Init(&NVIC_InitStructure);/根据指定的参数初始化VIC寄存器/ /*Enable DMA Channel2 Interrupt */ /NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority =

21、1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/*Enable DMA Channel3 Interrupt */NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC

22、_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/ USART_ITConfig(USART3, USART_IT_R*NE, ENABLE);/开启中断USART_ITConfig(USART3, USART_IT_IDLE , ENABLE);/开启空闲中断USART_Cmd(USART3, ENABLE); /使能串口 /串口4初始化函数void uart4_init(u32 bound)GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStruc

23、ture;NVIC_InitTypeDef NVIC_InitStructure;DMA_InitTypeDef DMA_InitStructure; /定义DMA初始化结构体DMA_InitStructure /NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /选择NVIC优先级分组0 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);RCC_APB2PeriphClockCmd(RCC_A

24、PB2Periph_GPIOC,ENABLE);/ 打开串口外设的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);/串口4所使用管脚输出输入定义/定义UART4 T* (PC.10)脚为复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /IO口的第2脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /IO口速度GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /IO口复用推挽输出GPIO_

25、Init(GPIOC, &GPIO_InitStructure); /初始化串口1输出IO口/定义 UART4 R* (PC.11)为悬空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; /IO口的第3脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/IO口悬空输入GPIO_Init(GPIOC, &GPIO_InitStructure); /初始化串口1输入IO口/串口4参数初始化定义部分,串口1参数为9600 , 8 ,1 ,N 接收中断方式 USART_InitStructure.USA

26、RT_BaudRate = bound; /设定传输速率USART_InitStructure.USART_WordLength = USART_WordLength_8b; /设定传输数据位数USART_InitStructure.USART_StopBits = USART_StopBits_1; /设定停止位个数USART_InitStructure.USART_Parity = USART_Parity_No ; /不用校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/不

27、用流量控制USART_InitStructure.USART_Mode = USART_Mode_R* | USART_Mode_T*; /使用接收和发送功能USART_Init(UART4, &USART_InitStructure); /初始化串口4USART_ITConfig(UART4, USART_IT_IDLE,ENABLE); /使能串口4接收中断USART_Cmd(UART4, ENABLE); /使能串口4USART_ClearFlag(UART4, USART_FLAG_TC); / 清标志(后增加)DMA_DeInit(DMA2_Channel3); /重置DMA 2通道

28、配置DMA_InitStructure.DMA_PeripheralBaseAddr = 0*40004C04; /外设地址 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)USART4_RECEIVE_DATA; /内存地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /外设作为数据目的地 DMA_InitStructure.DMA_BufferSize = 512; /DMA缓存大小:BufferSize DMA_InitStructure.DMA_PeripheralInc = DMA_Pe

29、ripheralInc_Disable; /外设地址寄存器不递增 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /内存地址寄存器递增DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; /外设数据宽度为8位 DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte; /内存数据宽度为8位 DMA_InitStructure.DMA_Mode = DMA_Mode_C

30、ircular; /工作在正常缓存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; /设置DMA通道优先级为高 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; /禁止DMA通道设置为内存至内存传输 DMA_Init(DMA2_Channel3, &DMA_InitStructure); /初始化 DMA_ITConfig(DMA2_Channel3, DMA_IT_TC, ENABLE);DMA_ITConfig(DMA2_Channel3, DMA_IT_TE, ENABLE);US

31、ART_DMACmd(UART4, USART_DMAReq_R*, ENABLE);DMA_Cmd(DMA2_Channel3, ENABLE);/使能串口4中断NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_

32、InitStructure);NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);USART_Cmd(UART4, ENABLE);/DMA的配置void DMA

33、_Configuration(void) DMA_InitTypeDef DMA_InitStructure; /* DMA clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/DMA1/串口1 dma配置/ /* DMA1 Channel4 (串口1 T*) Config */ DMA_DeInit(DMA1_Channel4); DMA_InitStructure.DMA_PeripheralBaseAddr = 0*40013804; DMA_InitStructure.DMA_MemoryBaseAddr

34、 = (uint32_t)USART1_SEND_DATA; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = 512; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_Peripheral

35、DataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; /DMA工作模式DMA_Mode_Circular DMA_Mode_Normal DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel4, &DMA_InitStr

36、ucture); DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE); DMA_ITConfig(DMA1_Channel4, DMA_IT_TE, ENABLE); /* Enable USART1 DMA T* request */ USART_DMACmd(USART1, USART_DMAReq_T*, ENABLE); DMA_Cmd(DMA1_Channel4, DISABLE); /使能 /* DMA1 Channel5 (串口1 R*) Config */ DMA_DeInit(DMA1_Channel5); DMA_InitStruc

37、ture.DMA_PeripheralBaseAddr = 0*40013804; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)USART1_RECEIVE_DATA; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 512; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc

38、= DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /DMA工作模式DMA_Mode_Circular DMA_Mode_Normal DMA_InitStructure.DMA_Priority = DMA_Priority_High

39、; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel5, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE); DMA_ITConfig(DMA1_Channel5, DMA_IT_TE, ENABLE); /* Enable USART1 DMA R* request */ USART_DMACmd(USART1, USART_DMAReq_R*, ENABLE); DMA_Cmd(DMA1_Channel5, ENABLE)

40、; /使能/串口2 dma配置/ /* DMA1 Channel7 (串口2 T*) Config */ DMA_DeInit(DMA1_Channel7); DMA_InitStructure.DMA_PeripheralBaseAddr = 0*40004404; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)USART2_SEND_DATA; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = 512; DMA_Ini

41、tStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; /DMA

42、工作模式 DMA_Mode_Circular DMA_Mode_Normal DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel7, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel7, DMA_IT_TC, ENABLE); DMA_ITConfig(DMA1_Channel7, DMA_IT_TE, ENABLE); /* Enable USART1 DMA T*

43、 request */ USART_DMACmd(USART2, USART_DMAReq_T*, ENABLE); DMA_Cmd(DMA1_Channel7, DISABLE); /使能 /* DMA1 Channel6 (串口2 R*) Config */ DMA_DeInit(DMA1_Channel6); DMA_InitStructure.DMA_PeripheralBaseAddr = 0*40004404; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)USART2_RECEIVE_DATA; DMA_InitStructur

44、e.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 512; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryData

45、Size = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /DMA工作模式DMA_Mode_Circular DMA_Mode_Normal DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel6, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel6, DMA_IT

46、_TC, ENABLE); DMA_ITConfig(DMA1_Channel6, DMA_IT_TE, ENABLE); /* Enable USART2 DMA R* request */ USART_DMACmd(USART2, USART_DMAReq_R*, ENABLE); DMA_Cmd(DMA1_Channel6, ENABLE); /使能/串口3 dma配置/ /* DMA1 Channel2 (串口3 T*) Config */ DMA_DeInit(DMA1_Channel2); DMA_InitStructure.DMA_PeripheralBaseAddr =0*40

47、004804; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)USART3_SEND_DATA; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = 512; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStruc

48、ture.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; /DMA工作模式 DMA_Mode_Circular DMA_Mode_Normal DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_

49、Disable; DMA_Init(DMA1_Channel2, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel2, DMA_IT_TC, ENABLE); DMA_ITConfig(DMA1_Channel2, DMA_IT_TE, ENABLE); /* Enable USART1 DMA T* request */ USART_DMACmd(USART3, USART_DMAReq_T*, ENABLE); DMA_Cmd(DMA1_Channel2, DISABLE); /使能 /* DMA1 Channel3 (串口3 R*) Confi

50、g */ DMA_DeInit(DMA1_Channel3); DMA_InitStructure.DMA_PeripheralBaseAddr = 0*40004804; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)USART3_RECEIVE_DATA; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 512; DMA_InitStructure.DMA_PeripheralInc = DMA_Peripheral

51、Inc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /DMA工作模式DMA_Mode_Circular DMA_Mode_Normal DMA_I

52、nitStructure.DMA_Priority = DMA_Priority_Medium; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel3, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel3, DMA_IT_TC, ENABLE); DMA_ITConfig(DMA1_Channel3, DMA_IT_TE, ENABLE); /* Enable USART2 DMA R* request */ USART_DMACmd(USART3, USART_DMA

53、Req_R*, ENABLE); DMA_Cmd(DMA1_Channel3, ENABLE); /使能/使用DMA发数据中断服务程序/void DMA1_Channel4_IRQHandler(void) DMA_ClearITPendingBit(DMA1_IT_TC4); DMA_ClearITPendingBit(DMA1_IT_TE4); DMA_Cmd(DMA1_Channel4, DISABLE);/关闭DMA USART1_T*_Finish=1;/置DMA传输完成/UART_CTL_R;/JIANGYU 新加 发完变为接收 void DMA1_Channel5_IRQHand

54、ler(void) DMA_ClearITPendingBit(DMA1_IT_TC5); DMA_ClearITPendingBit(DMA1_IT_TE5); DMA_Cmd(DMA1_Channel5, DISABLE);/关闭DMA,防止处理其间有数据 DMA1_Channel5-DTR = 580;/重装填 DMA_Cmd(DMA1_Channel5, ENABLE);/处理完,重开DMA/2012-7-13add(e)/2012-7-13add(s)/USART2使用DMA发数据中断服务程序void DMA1_Channel7_IRQHandler(void) DMA_ClearI

55、TPendingBit(DMA1_IT_TC7); DMA_ClearITPendingBit(DMA1_IT_TE7); DMA_Cmd(DMA1_Channel7, DISABLE);/关闭DMA USART2_T*_Finish=1;/置DMA传输完成void DMA1_Channel6_IRQHandler(void) DMA_ClearITPendingBit(DMA1_IT_TC6); DMA_ClearITPendingBit(DMA1_IT_TE6); DMA_Cmd(DMA1_Channel6, DISABLE);/关闭DMA,防止处理其间有数据 DMA1_Channel6-

56、DTR = 580;/重装填 DMA_Cmd(DMA1_Channel6, ENABLE);/处理完,重开DMAvoid DMA2_Channel3_IRQHandler(void) DMA_ClearITPendingBit(DMA2_IT_TC3); DMA_ClearITPendingBit(DMA2_IT_TE3); DMA_Cmd(DMA2_Channel3, DISABLE);/关闭DMA,防止处理其间有数据 DMA2_Channel3-DTR = 580;/重装填 DMA_Cmd(DMA2_Channel3, ENABLE);/处理完,重开DMA/USART3使用DMA发数据中断

57、服务程序void DMA1_Channel2_IRQHandler(void) DMA_ClearITPendingBit(DMA1_IT_TC2); DMA_ClearITPendingBit(DMA1_IT_TE2); DMA_Cmd(DMA1_Channel2, DISABLE);/关闭DMA USART3_T*_Finish=1;/置DMA传输完成void DMA1_Channel3_IRQHandler(void) DMA_ClearITPendingBit(DMA1_IT_TC3); DMA_ClearITPendingBit(DMA1_IT_TE3); DMA_Cmd(DMA1_

58、Channel3, DISABLE);/关闭DMA,防止处理其间有数据 DMA1_Channel3-DTR = 580;/重装填 DMA_Cmd(DMA1_Channel3, ENABLE);/处理完,重开DMA/串口1中断服务函数void USART1_IRQHandler(void) /串口1中断服务程序unsigned char i = 0,Clear = Clear;unsigned int wCrcCal; u16 DATA_LEN;if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)DMA_Cmd(DMA1_Channel5, DISABLE);/关闭DMA,防止处理其间有数据USART_ReceiveData(USART1);/读取数据 注意:这句必须要,否则不能够清除中断标志位。DATA_LEN=512-DMA_GetCurrDataCounter(DMA1_Channel5); if(DATA_LEN 0)while(USART1_T*_Finish=0);if(USART1_RECEIVE_DATA0 = 0*01) switch(USART1_RECEIVE_DATA1)case

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!