//配置UBLOX NEO-6的更新速率 //measrate:测量时间间隔,单位为ms,最少不能小于200ms(5Hz) //reftime:参考时间,0=UTC Time;1=GPS Time(一般设置为1) void Ublox_Cfg_Rate(u16 measrate, u8 reftime) { u8 USART_TX_BUF[0xff]; _ublox_cfg_rate *cfg_rate = (_ublox_cfg_rate *)USART_TX_BUF; if (measrate < 200)return; //小于200ms,直接退出 cfg_rate->header = 0X62B5; //cfg header cfg_rate->id = 0X0806; //cfg rate id cfg_rate->dlength = 6; //数据区长度为6个字节. cfg_rate->measrate = measrate; //脉冲间隔,us cfg_rate->navrate = 1; //导航速率(周期),固定为1 cfg_rate->timeref = reftime; //参考时间为GPS时间 Ublox_CheckSum((u8 *)(&cfg_rate->id), sizeof(_ublox_cfg_rate) - 4, &cfg_rate->cka, &cfg_rate->ckb); Sys_sPrintf(GPS_USART, USART_TX_BUF, sizeof(_ublox_cfg_tp)); USART_DMA_Enable(GPS_USART, sizeof(_ublox_cfg_rate)); //通过dma发送出去 }
//配置UBLOX NEO-6的时钟脉冲输出 //interval:脉冲间隔 //length:脉冲宽度 //status:脉冲配置:1,高电平有效;0,关闭;-1,低电平有效. void Ublox_Cfg_Tp(u32 interval, u32 length, signed char status) { u8 USART_TX_BUF[0xff]; _ublox_cfg_tp *cfg_tp = (_ublox_cfg_tp *)USART_TX_BUF; cfg_tp->header = 0X62B5; //cfg header cfg_tp->id = 0X0706; //cfg tp id cfg_tp->dlength = 20; //数据区长度为20个字节. cfg_tp->interval = interval;//脉冲间隔,us cfg_tp->length = length; //脉冲宽度,us cfg_tp->status = status; //时钟脉冲配置 cfg_tp->timeref = 0; //参考UTC 时间 cfg_tp->flags = 0; //flags为0 cfg_tp->reserved = 0; //保留位为0 cfg_tp->antdelay = 820; //天线延时为820ns cfg_tp->rfdelay = 0; //RF延时为0ns cfg_tp->userdelay = 0; //用户延时为0ns Ublox_CheckSum((u8 *)(&cfg_tp->id), sizeof(_ublox_cfg_tp) - 4, &cfg_tp->cka, &cfg_tp->ckb); Sys_sPrintf(GPS_USART, USART_TX_BUF, sizeof(_ublox_cfg_tp)); USART_DMA_Enable(GPS_USART, sizeof(_ublox_cfg_tp)); //通过dma发送出去 }
/** * @brief Main program * @param None * @retval None */ int main(void) { /* System Clocks Configuration */ RCC_Configuration(); /* NVIC configuration */ NVIC_Configuration(); /* LED configuration */ LED_config(); GD_EVAL_LEDOn(LED1); GD_EVAL_LEDOn(LED3); /* USART configuration */ USART_Configuration(); #ifdef GD32F130_150 /* DMA1 channel2 configuration */ DMA_DeInit(DMA1_CHANNEL2); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)0x40013828; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SRC_Const_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALDST; DMA_InitStructure.DMA_BufferSize = BufferSize; DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERALDATASIZE_BYTE; DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORYDATASIZE_BYTE; DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE; DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL; DMA_InitStructure.DMA_Priority = DMA_PRIORITY_VERYHIGH; DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE; DMA_Init(DMA1_CHANNEL2, &DMA_InitStructure); USART_DMA_Enable(USART1, USART_DMAREQ_TX, ENABLE); DMA_INTConfig(DMA1_CHANNEL2, DMA_INT_TC, ENABLE); /* Enable DMA transfer */ DMA_Enable(DMA1_CHANNEL2, ENABLE); #elif defined GD32F170_190 /* DMA1 channel2 configuration */ DMA_DeInit(DMA1_CHANNEL4); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)0x40004428; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SRC_Const_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALDST; DMA_InitStructure.DMA_BufferSize = BufferSize; DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERALDATASIZE_BYTE; DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORYDATASIZE_BYTE; DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE; DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL; DMA_InitStructure.DMA_Priority = DMA_PRIORITY_VERYHIGH; DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE; DMA_Init(DMA1_CHANNEL4, &DMA_InitStructure); USART_DMA_Enable(USART2, USART_DMAREQ_TX, ENABLE); DMA_INTConfig(DMA1_CHANNEL4, DMA_INT_TC, ENABLE); /* Enable DMA transfer */ DMA_Enable(DMA1_CHANNEL4, ENABLE); #endif /* Waiting for the transfer to complete*/ while(count == 0) { } GD_EVAL_LEDOff(LED1); GD_EVAL_LEDOff(LED3); GD_EVAL_LEDOn(LED2); GD_EVAL_LEDOn(LED4); while(1) { } }