初级会员

- 积分
- 109
- 金钱
- 109
- 注册时间
- 2020-8-5
- 在线时间
- 31 小时
|
1金钱
我利用DMA+空闲中断,在调试的时候一直进不了中断,求解答undefined
void RS485_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* Configure USART3 Tx (PB.10) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure USART3 Rx (PB.11) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿Õêäèë
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //íÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //·-×aÆμÂê50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //íÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //·-×aÆμÂê50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);//TX½Å¸′óÃíÆíìêä3ö
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);//RX½Å¸¡¿Õêäèë
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//íÆíìêä3ö
GPIO_Init(GPIOC, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;//2¨ìØÂê
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//êy¾Yλ
USART_InitStructure.USART_StopBits = USART_StopBits_1;//í£Ö1λ
USART_InitStructure.USART_Parity = USART_Parity_No;//ÎTD£Ñé
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ó2¼tá÷¿ØÖÆê§Äü
USART_InitStructure.USART_Mode = USART_Mode_Rx;//·¢Ëí½óêÕê1Äü
USART_Init(USART2, &USART_InitStructure);//′®¿ú23õê¼»ˉ
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//ê1Äü½óêÕÖD¶Ï
USART_Cmd(USART2, ENABLE);//′®¿ú2íaéèê1Äü
USART_InitStructure.USART_BaudRate = 9600 ;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8¸öêy¾Yλ
USART_InitStructure.USART_StopBits = USART_StopBits_1; //1¸öí£Ö1λ
USART_InitStructure.USART_Parity = USART_Parity_No ; //ÎTÆæÅ¼D£Ñé
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//½ûóÃó2¼tá÷¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//ê1Äü·¢Ëí/½óêÕ
USART_Init(USART3, &USART_InitStructure); //′®¿ú33õê¼»ˉ
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); //ê1Äü¿ÕÏDÖD¶Ï
USART_DMACmd(USART3,USART_DMAReq_Rx,ENABLE); //ê1ÄüDMA½óêÕ
USART_Cmd(USART3, ENABLE);
}
/******************************************************************************
£»DMAÅäÖÃ
******************************************************************************/
void UART3_DMA_RX_Configuration()
{
DMA_InitTypeDef DMA_Initstructure;
DMA_Initstructure.DMA_PeripheralBaseAddr = (u32)(&USART3->DR);
DMA_Initstructure.DMA_MemoryBaseAddr = (u32)receive_data;
DMA_Initstructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_Initstructure.DMA_BufferSize = 20;
DMA_Initstructure.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_Initstructure.DMA_Priority = DMA_Priority_High;
DMA_Initstructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel3,&DMA_Initstructure);
DMA_Cmd(DMA1_Channel3,ENABLE);
//DMA_ITConfig(DMA1_Channel3,DMA_IT_TC,ENABLE);
}
/******************************************************************************
£»ÖD¶ÏóÅÏè¼¶ÅäÖÃ
******************************************************************************/
void NVIC_Configuration()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//Ñ¡Ôñ×é2
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//TIME2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//ÏèÕ¼óÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//′óóÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//¿aÆôTIME2ÖD¶Ï
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;//TIME3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//ÏèÕ¼óÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//′óóÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//¿aÆôTIME3ÖD¶Ï
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//UART2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//ÏèÕ¼óÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//′óóÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//¿aÆôUART2ÖD¶Ï
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//UART3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//ÏèÕ¼óÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//′óóÅÏè¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//¿aÆôUART3ÖD¶Ï
NVIC_Init(&NVIC_InitStructure);
}
unsigned char aa;
void USART3_IRQHandler()
{
unsigned char num=0;
unsigned char n=0;
aa++;
if(USART_GetITStatus(USART3,USART_IT_IDLE) !=RESET)
{ num = USART3->SR;
num = USART3->DR;
DMA_Cmd(DMA1_Channel3,DISABLE);
num = 20 - DMA_GetCurrDataCounter(DMA1_Channel3);
DMA1_Channel3->CNDTR=20;
//if(floortemp==2 && switchdowntemp==1){
for(n=0;n<num;n++)
{
receive_buf1[n]=receive_data[n];
} //½óêÕ5¸öì½í·êy¾Y
RX_Counter3++; //½óêÕêy×éλÖÃ+1
DMA_Cmd(DMA1_Channel3,ENABLE);
uart_receive_flag = 1;
}
} |
|
最佳答案
查看完整内容[请看2#楼]
我在https://bbs.21ic.com/icview-359588-1-1.html这个帖子里找到原因了,因为我开着USART3窗口,在读数据的时候把我标志位清0了,所以我才会在==RESET时进入中断
|