新手入门
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2015-7-16
- 在线时间
- 1 小时
|
5金钱
项目需要用到两个串口接收两种信息
中断方式已经有SDIO占据了,所以在此不想采用中断方式扰乱SD卡的信息读写,中断处理串口接收排除
同时主函数如果单纯的处理串口函数,资源消耗太大了需要等的时间长,主函数处理串口接收排除
于是想采取DMA串口2和串口3轮流开关的方式获取串口的信息,但是调试过程中始终无法达到两个通道自由开关,采用循环方式
,如下分别为两个DMA初始化函数,中文注释拷贝在网站出现问题,还望各位大神帮我看看有什么办法解决,谢谢O(∩_∩)O~~
void USART3_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
/*????DMA?±??*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//NVIC_Config(); //????DMA????
/*?è??DMA?????®???????????÷???·*/
DMA_InitStructure.DMA_PeripheralBaseAddr = USART3_DR;
/*???????·(????????±?????????)*/
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)USART3_ReceiveBuff;
/*·??ò???????è??????*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
/*?????ó??DMA_BufferSize=SENDBUFF_SIZE*/
DMA_InitStructure.DMA_BufferSize = USART3_ReceiveBuff_Size;
/*???è???·????*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
/*???????·×???*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
/*???è????????*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
/*???????????? 8bit*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
/*DMA????* ????????????*/
//DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
/*??????????*/
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
/*???????????????????? */
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
/*????DMA1??3?¨??*/
DMA_Init(DMA1_Channel3 , &DMA_InitStructure);
/*????DMA*/
//DMA_Cmd (DMA1_Channel3,ENABLE);
//DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE); //????DMA·????ê???ó?ú?ú????
}
void USART2_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
/*????DMA?±??*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//NVIC_Config(); //????DMA????
/*?è??DMA?????®???????????÷???·*/
DMA_InitStructure.DMA_PeripheralBaseAddr = USART2_DR;
/*???????·(????????±?????????)*/
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)USART2_ReceiveBuff;
/*·??ò???????è??????*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
/*?????ó??DMA_BufferSize=SENDBUFF_SIZE*/
DMA_InitStructure.DMA_BufferSize = USART2_ReceiveBuff_Size;
/*???è???·????*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
/*???????·×???*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
/*???è????????*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
/*???????????? 8bit*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
/*DMA?????????????·*/
//DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
/*??????????*/
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
/*???????????????????? */
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
/*????DMA1??6?¨??*/
DMA_Init(DMA1_Channel6 , &DMA_InitStructure);
/*????DMA*/
DMA_Cmd (DMA1_Channel6,ENABLE);
//DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE); //????DMA·????ê???ó?ú?ú????
}
|
|