马上注册,玩转Robomaster!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
使用官方给的例程去控制云台电机
下面附上CAN的初始化代码和发送云台电机控制命令的代码:
- /*************************************************************************
- CAN1_Configuration
- ÃèÊö£º³õʼ»¯CAN1ÅäÖÃΪ1M²¨ÌØÂÊ
- *************************************************************************/
- void CAN1_Configuration(void)
- {
- CAN_InitTypeDef can;
- CAN_FilterInitTypeDef can_filter;
- GPIO_InitTypeDef gpio;
- NVIC_InitTypeDef nvic;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_CAN1);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_CAN1);
- gpio.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
- gpio.GPIO_Mode = GPIO_Mode_AF;
- GPIO_Init(GPIOA, &gpio);
-
- nvic.NVIC_IRQChannel = CAN1_RX0_IRQn;
- nvic.NVIC_IRQChannelPreemptionPriority = 0;
- nvic.NVIC_IRQChannelSubPriority = 1;
- nvic.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&nvic);
-
- nvic.NVIC_IRQChannel = CAN1_TX_IRQn;
- nvic.NVIC_IRQChannelPreemptionPriority = 1;
- nvic.NVIC_IRQChannelSubPriority = 1;
- nvic.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&nvic);
-
- CAN_DeInit(CAN1);
- CAN_StructInit(&can);
-
- can.CAN_TTCM = DISABLE;
- can.CAN_ABOM = DISABLE;
- can.CAN_AWUM = DISABLE;
- can.CAN_NART = DISABLE;
- can.CAN_RFLM = DISABLE;
- can.CAN_TXFP = ENABLE;
- can.CAN_Mode = CAN_Mode_Normal;
- can.CAN_SJW = CAN_SJW_1tq;
- can.CAN_BS1 = CAN_BS1_9tq;
- can.CAN_BS2 = CAN_BS2_4tq;
- can.CAN_Prescaler = 3; //CAN BaudRate 42/(1+9+4)/3=1Mbps
- CAN_Init(CAN1, &can);
- can_filter.CAN_FilterNumber=0;
- can_filter.CAN_FilterMode=CAN_FilterMode_IdMask;
- can_filter.CAN_FilterScale=CAN_FilterScale_32bit;
- can_filter.CAN_FilterIdHigh=0x0000;
- can_filter.CAN_FilterIdLow=0x0000;
- can_filter.CAN_FilterMaskIdHigh=0x0000;
- can_filter.CAN_FilterMaskIdLow=0x0000;
- can_filter.CAN_FilterFIFOAssignment=0;//the message which pass the filter save in fifo0
- can_filter.CAN_FilterActivation=ENABLE;
- CAN_FilterInit(&can_filter);
-
- CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
- CAN_ITConfig(CAN1,CAN_IT_TME,ENABLE);
- }
- /********************************************************************************
- ¸øµçµ÷°å·¢ËÍÖ¸ÁIDºÅΪ0x200£¬Ö»ÓÃÁ½¸öµçµ÷°å£¬Êý¾Ý»Ø´«IDΪ0x201ºÍ0x202
- cyq:¸ü¸ÄΪ·¢ËÍÈý¸öµçµ÷µÄÖ¸Áî¡£
- *********************************************************************************/
- void Cmd_ESC(int16_t current_201,int16_t current_202,int16_t current_203)
- {
- CanTxMsg tx_message;
-
- tx_message.StdId = 0x200;
- tx_message.IDE = CAN_Id_Standard;
- tx_message.RTR = CAN_RTR_Data;
- tx_message.DLC = 0x08;
-
- tx_message.Data[0] = (unsigned char)(current_201 >> 8); //¸ß8λ
- tx_message.Data[1] = (unsigned char)current_201; //µÍ8λ
- tx_message.Data[2] = (unsigned char)(current_202 >> 8);
- tx_message.Data[3] = (unsigned char)current_202;
- tx_message.Data[4] = (unsigned char)(current_203 >> 8);
- tx_message.Data[5] = (unsigned char)current_203;
- tx_message.Data[6] = 0x00;
- tx_message.Data[7] = 0x00;
-
- CAN_Transmit(CAN1,&tx_message);
- }
复制代码
|
|