初级会员

- 积分
- 73
- 金钱
- 73
- 注册时间
- 2014-5-20
- 在线时间
- 2 小时
|
5金钱
串口4 DMA接收 根本就收不到数据啊。看手册上串口控制寄存器CR3说是没有DMAR:DMA使能接收这一位。意思是说不能用DMA接收么? 但又明明说明是在DMA2的3通道上啊!
求大神指教
英文手册说只有UART5没有DMAR这一位。
不知道我的USAR4哪里出问题了。
NVIC_InitTypeDef NVIC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
DMA_DeInit(DMA2_Channel3);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&UART4->DR);
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)(GPSReceiveBuff);//
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 66;
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_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA2_Channel3,&DMA_InitStructure);
DMA_ITConfig(DMA2_Channel3,DMA_IT_TC|DMA_IT_TE,ENABLE);
DMA_Cmd(DMA2_Channel3, ENABLE); //????DMA????
/*************************************************************************************************************************/
问题已经了解决了。问题在中断处理函数上!
void DMA2_Channel3_IRQHandler(void)
{
if(DMA2->ISR&(1<<8))//
{
DMA2->IFCR|=1<<8;//?????¨??3????±ê??
DEBUG("9");
//DMA2_rec_OK = 1;
}
if(DMA2->ISR&(1<<9))//?????¨??3?????ê??
{
DMA2->IFCR|=1<<9;//?????¨??3?????ê??±ê??
DMA2_rec_OK = 1;
DEBUG("0");
}
if(DMA2->ISR&(1<<11))//?????í?ó
{
DMA2->IFCR|=1<<11;//
DMA2_rec_OK = 0;
//memset(GPSReceiveBuff,0,sizeof(GPSReceiveBuff));
MYDMA_Enable(DMA2_Channel3,60);
DEBUG("7");
}
DEBUG("6");
}
应该是清除了全局中断标志后 传输完成标志也一起清楚了。 最终问题:是这样么?
|
-
-
|