转载请注明出处:http://blog.csdn.net/lxk7280
void DMACNT_Init(DMACNT_InitTypeDef* DMACNT_InitStruct) { uint8_t Dummy = 0; DMA_InitTypeDef DMA_InitStruct1; GPIO_InitTypeDef GPIO_InitStruct1; //配置GPIO GPIO_InitStruct1.GPIO_Pin = DMACNT_InitStruct->GPIO_Pin; GPIO_InitStruct1.GPIO_InitState = Bit_RESET; if(DMACNT_MODE_RISING == DMACNT_InitStruct->DMACNT_Mode) { GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DMA_RISING; } else { GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DMA_FALLING; } GPIO_InitStruct1.GPIOx = DMACNT_InitStruct->GPIOx; GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(&GPIO_InitStruct1); //配置DMA DMA_InitStruct1.Channelx = DMACNT_InitStruct->DMA_Chl; DMA_InitStruct1.DMAAutoClose = DISABLE; DMA_InitStruct1.EnableState = ENABLE; DMA_InitStruct1.MinorLoopLength = 30000; switch((uint32_t)DMACNT_InitStruct->GPIOx) { case PTA_BASE: DMA_InitStruct1.PeripheralDMAReq = PORTA_DMAREQ; break; case PTB_BASE: DMA_InitStruct1.PeripheralDMAReq = PORTB_DMAREQ; break; case PTC_BASE: DMA_InitStruct1.PeripheralDMAReq = PORTC_DMAREQ; break; case PTD_BASE: DMA_InitStruct1.PeripheralDMAReq = PORTD_DMAREQ; break; case PTE_BASE: DMA_InitStruct1.PeripheralDMAReq = PORTE_DMAREQ; break; default : break; } DMA_InitStruct1.TransferBytes = 1; //配置目的地址传输参数 DMA_InitStruct1.DestBaseAddr = (uint32_t)&Dummy; DMA_InitStruct1.DestDataSize = DMA_DST_8BIT; DMA_InitStruct1.DestMajorInc = 0; DMA_InitStruct1.DestMinorInc = 0; //配置源地址传输参数 DMA_InitStruct1.SourceBaseAddr = (uint32_t)&Dummy; DMA_InitStruct1.SourceDataSize = DMA_SRC_8BIT; DMA_InitStruct1.SourceMajorInc = 0; DMA_InitStruct1.SourceMinorInc = 0; DMA_Init(&DMA_InitStruct1); }
//C5 DMACNT_InitStruct1.DMACNT_Mode = DMACNT_MODE_FALLING; DMACNT_InitStruct1.DMA_Chl = DMA_CH0; //使用通道 0 DMACNT_InitStruct1.GPIOx = PTC; //PTC5 DMA1 用来摄像头 DMACNT_InitStruct1.GPIO_Pin = GPIO_Pin_5; DMACNT_Init(&DMACNT_InitStruct1); //A19 DMACNT_InitStruct1.DMACNT_Mode = DMACNT_MODE_FALLING; DMACNT_InitStruct1.DMA_Chl = DMA_CH2; //使用通道 2 DMACNT_InitStruct1.GPIOx = PTA; //PTA17 DMA1 用来摄像头 DMACNT_InitStruct1.GPIO_Pin = GPIO_Pin_17; DMACNT_Init(&DMACNT_InitStruct1);
//DMA脉冲计数 获得计数值 uint16_t DMACNT_GetValue(uint8_t DMA_Chl) { uint16_t DMA_Value = 0; DMA_Value = DMA_GetCurrDataCounter(DMA_Chl); DMA_SetCurrDataCounter(DMA_Chl,30000); return (30000-DMA_Value); }
while(1) { Left_Speed = DMACNT_GetValue(DMA_CH0); Right_Speed = DMACNT_GetValue(DMA_CH2); UART_printf("Left_Speed is:%d\r\n",Left_Speed); UART_printf("Right_Speed is:%d\r\n\r\n",Right_Speed); DelayMs(500); }
飞思卡尔 shut down (三)智能车的测速(K60 欧姆龙500线编码器DMA测速),布布扣,bubuko.com
飞思卡尔 shut down (三)智能车的测速(K60 欧姆龙500线编码器DMA测速)
原文:http://blog.csdn.net/lxk7280/article/details/23480353