diff --git a/firmware/build/MDK/project.uvprojx b/firmware/build/MDK/project.uvprojx index 209149c..a9fea35 100644 --- a/firmware/build/MDK/project.uvprojx +++ b/firmware/build/MDK/project.uvprojx @@ -403,16 +403,6 @@ Driver - - GPIO.c - 1 - ..\..\src\Driver\GPIO.c - - - USART.c - 1 - ..\..\src\Driver\USART.c - hall.c 1 @@ -428,6 +418,21 @@ 1 ..\..\src\Driver\motor.c + + adc.c + 1 + ..\..\src\Driver\adc.c + + + can.c + 1 + ..\..\src\Driver\can.c + + + led.c + 1 + ..\..\src\Driver\led.c + diff --git a/firmware/src/Driver/GPIO.c b/firmware/src/Driver/GPIO.c deleted file mode 100644 index fb38040..0000000 --- a/firmware/src/Driver/GPIO.c +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * @file GPIO.c - * @author: MQjehovah mail:MQjehovah@hotmail.com - * @version 1.0.1 - * @date 2017.5.16 - * @brief - ****************************************************************************** - * @attention -*******************************************************************************/ -/* Includes ------------------------------------------------------------------*/ -#include "GPIO.h" -/* Definition ----------------------------------------------------------------*/ -GPIO_DEV PA0 = {GPIOA,GPIO_Pin_0}; -GPIO_DEV PA1 = {GPIOA,GPIO_Pin_1}; -GPIO_DEV PA2 = {GPIOA,GPIO_Pin_2}; -GPIO_DEV PA3 = {GPIOA,GPIO_Pin_3}; -GPIO_DEV PA4 = {GPIOA,GPIO_Pin_4}; -GPIO_DEV PA5 = {GPIOA,GPIO_Pin_5}; -GPIO_DEV PA6 = {GPIOA,GPIO_Pin_6}; -GPIO_DEV PA7 = {GPIOA,GPIO_Pin_7}; -GPIO_DEV PA8 = {GPIOA,GPIO_Pin_8}; -GPIO_DEV PA9 = {GPIOA,GPIO_Pin_9}; -GPIO_DEV PA10 = {GPIOA,GPIO_Pin_10}; -GPIO_DEV PA11 = {GPIOA,GPIO_Pin_11}; -GPIO_DEV PA12 = {GPIOA,GPIO_Pin_12}; -GPIO_DEV PA13 = {GPIOA,GPIO_Pin_13}; -GPIO_DEV PA14 = {GPIOA,GPIO_Pin_14}; -GPIO_DEV PA15 = {GPIOA,GPIO_Pin_15}; - - -GPIO_DEV PB0 = {GPIOB,GPIO_Pin_0}; -GPIO_DEV PB1 = {GPIOB,GPIO_Pin_1}; -GPIO_DEV PB2 = {GPIOB,GPIO_Pin_2}; -GPIO_DEV PB3 = {GPIOB,GPIO_Pin_3}; -GPIO_DEV PB4 = {GPIOB,GPIO_Pin_4}; -GPIO_DEV PB5 = {GPIOB,GPIO_Pin_5}; -GPIO_DEV PB6 = {GPIOB,GPIO_Pin_6}; -GPIO_DEV PB7 = {GPIOB,GPIO_Pin_7}; -GPIO_DEV PB8 = {GPIOB,GPIO_Pin_8}; -GPIO_DEV PB9 = {GPIOB,GPIO_Pin_9}; -GPIO_DEV PB10 = {GPIOB,GPIO_Pin_10}; -GPIO_DEV PB11 = {GPIOB,GPIO_Pin_11}; -GPIO_DEV PB12 = {GPIOB,GPIO_Pin_12}; -GPIO_DEV PB13 = {GPIOB,GPIO_Pin_13}; -GPIO_DEV PB14 = {GPIOB,GPIO_Pin_14}; -GPIO_DEV PB15 = {GPIOB,GPIO_Pin_15}; - -GPIO_DEV PC13 = {GPIOC,GPIO_Pin_13}; -GPIO_DEV PC14 = {GPIOC,GPIO_Pin_14}; - -//GPIO_DEV PIN_MAP[10]; - -/* Functions -----------------------------------------------------------------*/ -/******************************************************************************* - * @brief GPIO端口配置 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void GPIO_Config(GPIO_DEV *dev,GPIOMode_TypeDef mode) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - GPIO_InitStructure.GPIO_Pin = dev->PIN ; - GPIO_InitStructure.GPIO_Mode = mode; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(dev->PORT,&GPIO_InitStructure); -} - -/******************************************************************************* - * @brief GPIO端口电平设置 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void GPIO_WritePin(GPIO_DEV *dev,GPIO_STA state) -{ - if(state == HIGH) - GPIO_SetBits(dev->PORT,dev->PIN); - else - GPIO_ResetBits(dev->PORT,dev->PIN); -} - -/******************************************************************************* - * @brief 读取GPIO端口电平 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -GPIO_STA GPIO_ReadPin(GPIO_DEV *dev) -{ - if(GPIO_ReadInputDataBit(dev->PORT,dev->PIN))//读取单个输入端口的数据 - return HIGH; - else - return LOW; -} -/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/USART.c b/firmware/src/Driver/USART.c deleted file mode 100644 index ccefe18..0000000 --- a/firmware/src/Driver/USART.c +++ /dev/null @@ -1,172 +0,0 @@ -/******************************************************************************* - * @file USART.c - * @author: MQjehovah mail:MQjehovah@hotmail.com - * @version 1.0.0 - * @date 2016.3.18 - * @brief - ****************************************************************************** - * @attention -*******************************************************************************/ -/* Includes ------------------------------------------------------------------*/ -#include "USART.h" - -/* Definition ----------------------------------------------------------------*/ -#define Debug_USART USART1 -#ifdef __GNUC__ -/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf - set to 'Yes') calls __io_putchar() */ -#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) -#else -#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) -#endif /* __GNUC__ */ - - -GPIO_DEV * RS485EN = NULL; -/* Functions -----------------------------------------------------------------*/ -/******************************************************************************* - * @brief USART管脚配置 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void USART_GPIO_Config(USART_TypeDef *USARTx) -{ - if(USARTx == USART1) - { - GPIO_Config(&PA9,GPIO_Mode_AF_PP); - GPIO_Config(&PA10,GPIO_Mode_IN_FLOATING); - } - if(USARTx == USART2) - { - GPIO_Config(&PA2,GPIO_Mode_AF_PP); - GPIO_Config(&PA3,GPIO_Mode_IN_FLOATING); - } - if(USARTx == USART3) - { - GPIO_Config(&PB10,GPIO_Mode_AF_PP); - GPIO_Config(&PB11,GPIO_Mode_IN_FLOATING); - } -// if(USARTx == USART4) -// { -// GPIO_Config(&PA9,GPIO_Mode_AF_PP); -// GPIO_Config(&PA10,GPIO_Mode_IN_FLOATING); -// } -// if(USARTx == USART5) -// { -// GPIO_Config(&PA9,GPIO_Mode_AF_PP); -// GPIO_Config(&PA10,GPIO_Mode_IN_FLOATING); -// } -} -/******************************************************************************* - * @brief USART初始化 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void USART_Config(USART_TypeDef *USARTx,u16 Buand) -{ - USART_InitTypeDef USART_InitStructure; - - USART_GPIO_Config(USARTx); - USART_InitStructure.USART_BaudRate = Buand; - USART_InitStructure.USART_WordLength = USART_WordLength_8b; - USART_InitStructure.USART_StopBits = USART_StopBits_1; - USART_InitStructure.USART_Parity = USART_Parity_No ; - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; - USART_Init(USARTx, &USART_InitStructure); - USART_Cmd(USARTx, ENABLE); -} - -/******************************************************************************* - * @brief 485初始化 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void USART_485_Config(USART_TypeDef *USARTx,u16 Buand,GPIO_DEV *ENPIN) -{ - RS485EN = ENPIN; - GPIO_Config(RS485EN,GPIO_Mode_Out_PP); - GPIO_WritePin(RS485EN,LOW); - USART_Config(USARTx,Buand); -} -/******************************************************************************* - * @brief USART发送一个字符 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void USART_SendChar(USART_TypeDef *USARTx,char Data) -{ - USART_SendData(USARTx,Data); - while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET); -} -/******************************************************************************* - * @brief 485发送一个字符 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void USART_485_SendChar(USART_TypeDef *USARTx,char Data) -{ - GPIO_WritePin(RS485EN,HIGH); - USART_SendChar(USARTx,Data); - GPIO_WritePin(RS485EN,LOW); -} -/******************************************************************************* - * @brief USART发送字符串 - * @param None - * @retval None - * @Note None -*******************************************************************************/ -void USART_SendStr(USART_TypeDef *USARTx,char* senddata) -{ - int lenth=strlen(senddata); - int i; - for (i=0; iSR & ADC_FLAG_JEOC) + { + // LED_GR = !LED_GR; + ADC1->SR &= ~(ADC_FLAG_JEOC); + Cur_ADC = (short int)ADC1->JDR1; + Temp_ADC = (short int)ADC1->JDR2; + TIM1->SR &= 0xFFEF; + } +} + +/******************************************************************************* + * @brief ADC初始化 + * @param None + * @retval None + * @note None +*******************************************************************************/ +void ADCCalibration_BeforStart(void) +{ + ADC_ITConfig(ADC1, ADC_IT_JEOC, DISABLE); + + ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None); + ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE); + while (ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC) != SET) + ; + ADC_ClearFlag(ADC1, ADC_FLAG_JEOC); + ADC1->JOFR1 = ADC1->JOFR1 + ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1); + if ((ADC1->JOFR1 < 1737) || (ADC1->JOFR1 > 2358)) + { + //TODO: 采样异常,元器件损坏 + } + + ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_CC4); + ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE); + ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE); +} + +/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/can.c b/firmware/src/Driver/can.c new file mode 100644 index 0000000..b4701b3 --- /dev/null +++ b/firmware/src/Driver/can.c @@ -0,0 +1,139 @@ +/******************************************************************************* + * @file can.c + * @author: MQjehovah mail:MQjehovah@hotmail.com + * @version 1.0.0 + * @date 2020.10.23 + * @brief + ****************************************************************************** + * @attention +*******************************************************************************/ +/* Includes ------------------------------------------------------------------*/ +#include "adc.h" +/* Definition ----------------------------------------------------------------*/ +extern short int Cur_ADC; +extern short int Temp_ADC; +/* Functions -----------------------------------------------------------------*/ +/******************************************************************************* + * @brief CAN1初始化 + * @param None + * @retval None + * @note None +*******************************************************************************/ +void CAN1_Config(u16 bound) +{ + u8 brp = 3000 / bound; + + GPIO_InitTypeDef GPIO_InitStructure; + CAN_InitTypeDef CAN_InitStructure; + CAN_FilterInitTypeDef CAN_FilterInitStructure; + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_Init(GPIOA, &GPIO_InitStructure); + //CAN单元设置 + CAN_InitStructure.CAN_TTCM = DISABLE; //ENABLE:时间触发通信模式 DISABLE:非时间触发通信模式 + CAN_InitStructure.CAN_ABOM = ENABLE; //软件自动离线管理 + CAN_InitStructure.CAN_AWUM = DISABLE; //ENABLE:监测到can消息退出休眠模式 DISABLE:清除CAN->MCR的SLEEP位退出休眠模式 + CAN_InitStructure.CAN_NART = DISABLE; //ENABLE:无论发送成功与否只法一次 DISABLE:发送不成功一直重发 + CAN_InitStructure.CAN_RFLM = DISABLE; //ENABLE:FIFO溢出后丢弃后面的报文 DISABLE:溢出后新的覆盖旧的 + CAN_InitStructure.CAN_TXFP = ENABLE; //ENABLE:优先级由请求顺序决定 DISABLE:优先级由报文标识符决定 + CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; //模式设置 + CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq + CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; //Tbs1范围CAN_BS1_1tq ~ CAN_BS1_16tq + CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; //Tbs2范围CAN_BS2_1tq ~ CAN_BS2_8tq + CAN_InitStructure.CAN_Prescaler = brp; //分频系数(Fdiv)为brp+1 + CAN_Init(CAN1, &CAN_InitStructure); //初始化CAN1 + + //配置过滤器 + CAN_FilterInitStructure.CAN_FilterNumber = 0; //过滤器0 + CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; //标识符屏蔽位模式 + CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; //过滤器位宽32位 + CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; //32位ID + CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; //32位MASK + CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; + CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0; //过滤器0关联到FIFO0 + CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; //激活过滤器0 + CAN_FilterInit(&CAN_FilterInitStructure); //滤波器初始化 + + // Motor_Cmd(Addr_Left,DISABLE); + // Motor_Cmd(Addr_Right,DISABLE); + // delay_ms(20);//CAN命令包发送完成 + CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE); //FIFO0消息挂号中断允许. +} + +/******************************************************************************* + * @brief CAN1中断 + * @param None + * @retval None + * @note 速度模式s顺时针n逆时针 定位模式S顺时针N逆时针 +*******************************************************************************/ +CanRxMsg BLcanbuf; +FlagStatus BL_Deal_Flag = RESET; +void USB_LP_CAN1_RX0_IRQHandler(void) +{ + CanRxMsg RxMessagebuf; + CAN_Receive(CAN1, CAN_FIFO0, &RxMessagebuf); + // CanRx_TimeOut_Cnt = 3000; //500ms + + if (RxMessagebuf.StdId == 0x7df) + { + // if ((RxMessagebuf.Data[0] == 'S') || (RxMessagebuf.Data[0] == 'P') || (RxMessagebuf.Data[0] == 'X') || (RxMessagebuf.Data[0] == 'D')) + // { + // Com_No_T1 = RxMessagebuf.Data[7]; + // if (Com_No_T1 != Com_No_OLD_T1) + // { + // if (RecDone_T1 == RESET) + // RecDone_T1 = SET; + // else + // return; + // memcpy(&uComRx_T1, RxMessagebuf.Data, 8); + // Com_No_OLD_T1 = Com_No_T1; + // } + // else + // { + // if (Say_Hello_T1 == 0) + // Say_Hello_T1 = 1; + // else + // return; + // uComTx_T1.mode = RxMessagebuf.Data[0]; + // } + // } + } +} + +int CanTx_TimeOut_Cnt = 0; +/********************************************************************** +* Description : None +* Input : None +* Output : None +* Return : None +* Attention : None +**********************************************************************/ +u8 can_send_message(u8 index, u32 id, u8 dlc, u8 *data) +{ + u8 mbox; + CanTxMsg TxMessage; + TxMessage.StdId = id; // 标准标识符 + TxMessage.ExtId = id; // 设置扩展标示符 + TxMessage.IDE = 0; // 标准帧 + TxMessage.RTR = 0; // 数据帧 + TxMessage.DLC = dlc; // 要发送的数据长度 + CanTx_TimeOut_Cnt = 50; //25ms + memcpy(TxMessage.Data, data, 8); + do + { + mbox = CAN_Transmit(CAN1, &TxMessage); + } while ((mbox == CAN_TxStatus_NoMailBox) && (CanTx_TimeOut_Cnt != 0)); + + while ((CAN_TransmitStatus(CAN1, mbox) != CAN_TxStatus_Ok) && (CanTx_TimeOut_Cnt != 0)) + ; + CanTx_TimeOut_Cnt = 0; + return 1; +} +/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/inc/GPIO.h b/firmware/src/Driver/inc/GPIO.h deleted file mode 100644 index 78eb2cd..0000000 --- a/firmware/src/Driver/inc/GPIO.h +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * @file GPIO.h - * @author: MQjehovah mail:MQjehovah@hotmail.com - * @version 1.0.1 - * @date 2017.5.16 - * @brief - ****************************************************************************** - * @attention -*******************************************************************************/ -#ifndef _GPIO_H -#define _GPIO_H - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f10x_conf.h" -/* Definition ----------------------------------------------------------------*/ -typedef enum -{ - LOW, - HIGH, -}GPIO_STA; - - -typedef struct -{ - GPIO_TypeDef * PORT; - uint16_t PIN; -}GPIO_DEV; - -extern GPIO_DEV PA0;//PA0-WKUP/USART2_CTS/ADC_IN0/TIM2_CH1_ETR -extern GPIO_DEV PA1;//PA1/USART2_RTS/ADC_IN1/TIM2_CH2 -extern GPIO_DEV PA2;//PA2/USART2_TX/ADC_IN2/TIM2_CH3 -extern GPIO_DEV PA3;//PA3/USART2_RX/ADC_IN3/TIM2_CH4 -extern GPIO_DEV PA4;//PA4/SPI1_NSS/USART2_CK/ADC_IN4 -extern GPIO_DEV PA5;//PA5/SPI1_SCK/ADC_IN5 -extern GPIO_DEV PA6;//PA6/SPI1_MISO/ADC_IN6/TIM3_CH1 -extern GPIO_DEV PA7;//PA7/SPI1_MOSI/ADC_IN7/TIM3_CH2 -extern GPIO_DEV PA8;//PA8/USART1_CK/TIM1_CH1/MCO -extern GPIO_DEV PA9;//PA9/USART1_TX/TIM1_CH2 -extern GPIO_DEV PA10;//PA10/USART1_RX/TIM1_CH3 -extern GPIO_DEV PA11;//PA11/USART1_CTS/CANRX/USBDM/TIM1_CH4 -extern GPIO_DEV PA12;//PA12/USART1_RTS/CANTX/USBDP/TIM1_ETR -extern GPIO_DEV PA13;//PA13/JTMS/SWDIO -extern GPIO_DEV PA14;//PA14/JTCK/SWCLK -extern GPIO_DEV PA15;//PA15/JTDI - -extern GPIO_DEV PB0;//PB0/ADC_IN8/TIM3_CH3 -extern GPIO_DEV PB1;//PB1/ADC_IN9/TIM3_CH4 -extern GPIO_DEV PB2;//PB2/BOOT1 -extern GPIO_DEV PB3;//PB3/JTDO/TRACESWO -extern GPIO_DEV PB4;//PB4/JNTRST -extern GPIO_DEV PB5;//PB5/I2C1_SMBAl -extern GPIO_DEV PB6;//PB6/I2C1_SCL/ TIM4_CH1 -extern GPIO_DEV PB7;//PB7/I2C1_SDA/ TIM4_CH2 -extern GPIO_DEV PB8;//PB8/TIM4_CH3 -extern GPIO_DEV PB9;//PB9/TIM4_CH4 -extern GPIO_DEV PB10;//PB10/I2C2_SCL/USART3_TX -extern GPIO_DEV PB11;//PB11/I2C2_SDA/USART3_RX -extern GPIO_DEV PB12;//PB12/SPI2_NSS/I2C2_SMBAl/USART3_CK/TIM1_BKIN -extern GPIO_DEV PB13;//PB13/SPI2_SCK/USART3_CTS/TIM1_CH1N -extern GPIO_DEV PB14;//PB14/SPI2_MISO/USART3_RTS/TIM1_CH2N -extern GPIO_DEV PB15;//PB15/SPI2_MOSITIM1_CH3N - -extern GPIO_DEV PC13;// -extern GPIO_DEV PC14;// -/* Exported Functions --------------------------------------------------------*/ -void GPIO_Config(GPIO_DEV *dev,GPIOMode_TypeDef mode); -void GPIO_WritePin(GPIO_DEV *dev,GPIO_STA state); -GPIO_STA GPIO_ReadPin(GPIO_DEV *dev); -#endif -/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/inc/USART.h b/firmware/src/Driver/inc/adc.h similarity index 56% rename from firmware/src/Driver/inc/USART.h rename to firmware/src/Driver/inc/adc.h index 9826c79..cf0dc3c 100644 --- a/firmware/src/Driver/inc/USART.h +++ b/firmware/src/Driver/inc/adc.h @@ -1,28 +1,20 @@ /******************************************************************************* - * @file USART.h + * @file adc.h * @author: MQjehovah mail:MQjehovah@hotmail.com * @version 1.0.0 - * @date 2016.3.18 + * @date 2020.0.23 * @brief ****************************************************************************** * @attention *******************************************************************************/ -#ifndef _USART_DRIVER_H -#define _USART_DRIVER_H +#ifndef __ADC_H +#define __ADC_H /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_conf.h" -#include "GPIO.h" - #include - #include /* Definition ----------------------------------------------------------------*/ /* Exported Functions --------------------------------------------------------*/ -void USART_GPIO_Config(USART_TypeDef *USARTx); -void USART_Config(USART_TypeDef *USARTx,u16 Buand); -void USART_485_Config(USART_TypeDef *USARTx,u16 Buand,GPIO_DEV *ENPIN); -void USART_SendChar(USART_TypeDef *USARTx,char Data); -void USART_485_SendChar(USART_TypeDef *USARTx,char Data); -void USART_SendStr(USART_TypeDef *USARTx,char* senddata); -void USART_485_SendStr(USART_TypeDef *USARTx,char* senddata); -/*********************************END OF FILE**********************************/ +void ADCCalibration_BeforStart(void); + #endif +/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/inc/can.h b/firmware/src/Driver/inc/can.h new file mode 100644 index 0000000..95c0ad5 --- /dev/null +++ b/firmware/src/Driver/inc/can.h @@ -0,0 +1,21 @@ +/******************************************************************************* + * @file can.h + * @author: MQjehovah mail:MQjehovah@hotmail.com + * @version 1.0.0 + * @date 2020.0.23 + * @brief + ****************************************************************************** + * @attention +*******************************************************************************/ +#ifndef __CAN_H +#define __CAN_H +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_conf.h" +/* Definition ----------------------------------------------------------------*/ + +/* Exported Functions --------------------------------------------------------*/ +void CAN1_Config(u16 bound); +u8 can_send_message(u8 index, u32 id, u8 dlc, u8 *data); + +#endif +/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/inc/led.h b/firmware/src/Driver/inc/led.h new file mode 100644 index 0000000..533216b --- /dev/null +++ b/firmware/src/Driver/inc/led.h @@ -0,0 +1,22 @@ +/******************************************************************************* + * @file led.h + * @author: MQjehovah mail:MQjehovah@hotmail.com + * @version 1.0.0 + * @date 2020.0.23 + * @brief + ****************************************************************************** + * @attention +*******************************************************************************/ +#ifndef __LED_H +#define __LED_H +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_conf.h" +/* Definition ----------------------------------------------------------------*/ + +/* Exported Functions --------------------------------------------------------*/ +void LED_Config(); +void LED_ON(uint8_t index); +void LED_OFF(uint8_t index); + +#endif +/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/inc/motor.h b/firmware/src/Driver/inc/motor.h index 47ac929..1520f62 100644 --- a/firmware/src/Driver/inc/motor.h +++ b/firmware/src/Driver/inc/motor.h @@ -12,6 +12,13 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_conf.h" /* Definition ----------------------------------------------------------------*/ +enum motor_mode +{ + MOTOR_MODE_SPEED, //速度模式 + MOTOR_MODE_POSITION, //位置模式 + MOTOR_MODE_TORQUE, //转矩模式 +}; + enum motor_dir { MOTOR_DIR_CW, //正向 @@ -25,6 +32,7 @@ enum motor_state typedef struct _motor { + u8 mode; //电机控制模式 u8 dir; u8 state; //运行状态 u8 hall_position; //霍尔位置 diff --git a/firmware/src/Driver/led.c b/firmware/src/Driver/led.c new file mode 100644 index 0000000..98851fb --- /dev/null +++ b/firmware/src/Driver/led.c @@ -0,0 +1,69 @@ +/******************************************************************************* + * @file led.c + * @author: MQjehovah mail:MQjehovah@hotmail.com + * @version 1.0.0 + * @date 2020.10.23 + * @brief + ****************************************************************************** + * @attention +*******************************************************************************/ +/* Includes ------------------------------------------------------------------*/ +#include "led.h" +/* Definition ----------------------------------------------------------------*/ + +/* Functions -----------------------------------------------------------------*/ +/******************************************************************************* + * @brief LED初始化 + * @param None + * @retval None + * @note None +*******************************************************************************/ +void LED_Config() +{ + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOB, &GPIO_InitStructure); +} + +/******************************************************************************* + * @brief 打开LED + * @param None + * @retval None + * @note None +*******************************************************************************/ +void LED_ON(uint8_t index) +{ + if (index == 0) + { + GPIO_WriteBit(GPIOB, GPIO_Pin_5, SET); + } + + if (index == 1) + { + GPIO_WriteBit(GPIOB, GPIO_Pin_6, SET); + } +} + +/******************************************************************************* + * @brief 关闭LED + * @param None + * @retval None + * @note None +*******************************************************************************/ +void LED_OFF(uint8_t index) +{ + if (index == 0) + { + GPIO_WriteBit(GPIOB, GPIO_Pin_5, RESET); + } + + if (index == 1) + { + GPIO_WriteBit(GPIOB, GPIO_Pin_6, RESET); + } +} +/*********************************END OF FILE**********************************/ diff --git a/firmware/src/Driver/motor.c b/firmware/src/Driver/motor.c index f5fd67c..f247080 100644 --- a/firmware/src/Driver/motor.c +++ b/firmware/src/Driver/motor.c @@ -9,7 +9,6 @@ *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "motor.h" -#include "GPIO.h" /* Definition ----------------------------------------------------------------*/ motor_t motor_info; /* Functions -----------------------------------------------------------------*/ @@ -139,11 +138,8 @@ void motor_step(void) TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); break; - default: - // GPIO_WritePin(&PB5, HIGH); - GPIO_WritePin(&PB5, LOW); - //motor_stop(); + motor_stop(); break; } TIM_GenerateEvent(TIM1, TIM_EventSource_COM); diff --git a/firmware/src/User/inc/main.h b/firmware/src/User/inc/main.h index f9cdc2d..88a0e5a 100644 --- a/firmware/src/User/inc/main.h +++ b/firmware/src/User/inc/main.h @@ -12,8 +12,7 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_conf.h" #include "delay.h" -#include "USART.h" -#include "GPIO.h" +#include "led.h" #include "hall.h" #include "pwm.h" #include "motor.h" diff --git a/firmware/src/User/main.c b/firmware/src/User/main.c index 4a6a6d7..9960bc9 100644 --- a/firmware/src/User/main.c +++ b/firmware/src/User/main.c @@ -25,6 +25,35 @@ void RCC_Config() RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_TIM1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4, ENABLE); } + +/******************************************************************************* + * @brief 加减速测试 + * @param None + * @retval None + * @Note None +*******************************************************************************/ +void test(void) +{ + motor_init(); + motor_start(); + delay_ms(5000); + motor_set_speed(100); + delay_ms(5000); + motor_set_speed(300); + delay_ms(5000); + motor_set_speed(500); + delay_ms(5000); + motor_set_speed(700); + motor_info.dir = MOTOR_DIR_CW; + delay_ms(5000); + motor_set_speed(900); + delay_ms(5000); + motor_set_speed(1200); + delay_ms(5000); + motor_set_speed(1400); + delay_ms(5000); +} + /******************************************************************************* * @brief 中断优先级配置 * @param None @@ -42,6 +71,7 @@ void NVIC_Config(void) //配置中断优先级 // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // NVIC_Init(&NVIC_InitStructure); } + /******************************************************************************* * @brief 主函数 * @param None @@ -54,35 +84,17 @@ int main(void) NVIC_Config(); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //关闭jtag,保留swd。 SysTick_init(); - GPIO_Config(&PB5, GPIO_Mode_Out_PP); - - // USART_Config(USART1, 9600); HALL_Config(); PWM_Config(); - motor_init(); - motor_start(); - delay_ms(5000); - motor_set_speed(100); - delay_ms(5000); - motor_set_speed(300); - delay_ms(5000); - motor_set_speed(500); - delay_ms(5000); - motor_set_speed(700); - motor_info.dir=MOTOR_DIR_CW; - delay_ms(5000); - motor_set_speed(900); - delay_ms(5000); - motor_set_speed(1200); - delay_ms(5000); - motor_set_speed(1400); - delay_ms(5000); + CAN1_Config(); + test(); while (1) { - GPIO_WritePin(&PB5, HIGH); + LED_ON(1); delay_ms(500); - GPIO_WritePin(&PB5, LOW); + LED_OFF(1); delay_ms(500); } } + /*********************************END OF FILE**********************************/