Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Includes */
- #include "stm32f4xx.h"
- #include "system_stm32f4xx.h"
- #include "stm32f4_discovery.h"
- #include "main.h"
- #include "stm32f4xx_spi.h"
- #include "stm32f4xx_rcc.h"
- #include "stm32f4xx_can.h"
- #include "stm32f4xx_pwr.h"
- #include "stm32f4xx_wwdg.h"
- #include "stm32f4xx_it.h"
- #include "mcp2515.h"
- #include "led.h"
- CANMSG can3tx1;
- CANMSG can3tx2;
- CANMSG can3tx;
- CANMSG can3rx;
- CANMSG buf0b0, buf0b2, buf0b4, buf1c4, buf1c7, buf1c8, buf2c8,
- buf223, buf224, buf260, buf2c1, buf2c4, buf380, buf38a,
- buf398, buf3b3, buf3b4, buf610, buf611, buf620, buf621, buf622,
- buf630, buf631, buf638, buf640, obdbuf1, obdbuf2;
- int sleeptimeout=0;
- static int time=0;
- CAN_InitTypeDef CAN_InitStructure;
- CAN_FilterInitTypeDef CAN_FilterInitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- CanTxMsg TxMessage;
- CanRxMsg RxMessage;
- CanTxMsg TxMessage2;
- CanRxMsg RxMessage2;
- CanTxMsg TxMessage3;
- /* Private function prototypes */
- void CAN_Config(void);
- void NVIC_Config(void);
- void delay_ms(uint16_t);
- void delay_us(uint32_t);
- void LDoff(void);
- __IO uint32_t TimingDelay = 0;
- //void SPIinit(void);
- //extern void SPI_Init(SPI_TypeDef* , SPI_InitTypeDef* );
- /* Private functions */
- //Pin definitions
- #define CAN_RX_PIN GPIO_Pin_8
- #define CAN_TX_PIN GPIO_Pin_9
- #define CAN_RX_SOURCE GPIO_PinSource8
- #define CAN_TX_SOURCE GPIO_PinSource9
- //Port definitions
- #define CAN_COM_PORT GPIOB
- //Clock definitions
- #define CAN_GPIO_CLK RCC_AHB1Periph_GPIOB
- #define CAN_CLK RCC_APB1Periph_CAN1
- #define CAN2_RX_PIN GPIO_Pin_5
- #define CAN2_TX_PIN GPIO_Pin_6
- #define CAN2_RX_SOURCE GPIO_PinSource5
- #define CAN2_TX_SOURCE GPIO_PinSource6
- //Port definitions
- #define CAN2_COM_PORT GPIOB
- //Clock definitions
- #define CAN2_GPIO_CLK RCC_AHB1Periph_GPIOB
- #define CAN2_CLK RCC_APB1Periph_CAN2
- int AC;
- int LGHT;
- int LGHT2;
- int DFCO;
- int LD70;
- int RUN;
- int RPM;
- int IGN;
- int DCTY;
- int KEY;
- int rfunlock;
- void stbyinit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBase_InitStructure.TIM_Period = 1999;
- TIM_TimeBase_InitStructure.TIM_Prescaler = 17999;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBase_InitStructure);
- TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x04;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
- NVIC_Init(&NVIC_InitStructure);
- TIM_Cmd(TIM2, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBase_InitStructure.TIM_Period = 1999;
- TIM_TimeBase_InitStructure.TIM_Prescaler = 179;
- TIM_TimeBaseInit(TIM3, &TIM_TimeBase_InitStructure);
- TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
- NVIC_Init(&NVIC_InitStructure);
- TIM_Cmd(TIM3, ENABLE);
- }
- void stby(int a)
- {
- if (a==0)
- {
- GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_RESET);
- }
- else
- {
- GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET);
- }
- }
- void CAN_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /* CAN GPIOs configuration **************************************************/
- /* Enable GPIO clock */
- RCC_AHB1PeriphClockCmd(CAN_GPIO_CLK, ENABLE);
- /* Connect CAN pins to AF9 */
- GPIO_PinAFConfig(CAN_COM_PORT, CAN_RX_SOURCE, GPIO_AF_CAN1);
- GPIO_PinAFConfig(CAN_COM_PORT, CAN_TX_SOURCE, GPIO_AF_CAN1);
- /* Configure CAN RX and TX pins */
- GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN | CAN_TX_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(CAN_COM_PORT, &GPIO_InitStructure);
- /* CAN configuration ********************************************************/
- /* Enable CAN clock */
- RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE);
- //CAN1
- /* CAN register init */
- CAN_DeInit(CAN1);
- /* CAN cell init */
- CAN_DBGFreeze(CAN1, DISABLE);
- CAN_InitStructure.CAN_TTCM = DISABLE;
- CAN_InitStructure.CAN_ABOM = DISABLE;
- CAN_InitStructure.CAN_AWUM = ENABLE;
- CAN_InitStructure.CAN_NART = ENABLE;
- CAN_InitStructure.CAN_RFLM = DISABLE;
- CAN_InitStructure.CAN_TXFP = ENABLE;
- CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
- CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;
- /* CAN Baudrate = 500 kBps (CAN clocked at 42MHz) */
- CAN_InitStructure.CAN_BS1 = CAN_BS1_13tq;
- CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
- CAN_InitStructure.CAN_Prescaler = 4;
- CAN_Init(CAN1, &CAN_InitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber = 0;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber = 1;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0b0 << 5;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x0b2 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0b4 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x223 << 5;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber = 2;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x224 << 5;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x260 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x380 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x38a << 5;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber = 3;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x398 << 5;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x3b3 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x3b4 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x610 << 5;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber = 4;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x611 << 5;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x620 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x622 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x630 << 5;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber = 5;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x631 << 5;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x638 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x640 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- CAN_FilterInitStructure.CAN_FilterNumber = 6;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x700 << 5;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x000 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xF00 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFF << 5;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* Transmit Structure preparation */
- TxMessage.StdId = 0x321;
- TxMessage.ExtId = 0x01;
- TxMessage.RTR = CAN_RTR_DATA;
- TxMessage.IDE = CAN_ID_STD;
- TxMessage.DLC = 8;
- /* Enable FIFO 0 message pending Interrupt */
- CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
- CAN_ITConfig(CAN1, CAN_IT_FF0, ENABLE);
- }
- void CAN2_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /* CAN GPIOs configuration **************************************************/
- // RCC_APB1ENR= RCC_APB1ENR | RCC_APB1ENR_CAN2;
- RCC_AHB1PeriphClockCmd(CAN_GPIO_CLK, ENABLE);
- /* Enable GPIO clock */
- //RCC_AHB1PeriphClockCmd(CAN2_GPIO_CLK, ENABLE);
- /* Connect CAN pins to AF9 */
- GPIO_PinAFConfig(CAN2_COM_PORT, CAN2_RX_SOURCE, GPIO_AF_CAN2);
- GPIO_PinAFConfig(CAN2_COM_PORT, CAN2_TX_SOURCE, GPIO_AF_CAN2);
- /* Configure CAN RX and TX pins */
- GPIO_InitStructure.GPIO_Pin = CAN2_RX_PIN | CAN2_TX_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(CAN_COM_PORT, &GPIO_InitStructure);
- /* CAN configuration ********************************************************/
- /* Enable CAN clock */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
- //CAN1
- /* CAN register init */
- CAN_DeInit(CAN2);
- /* CAN cell init */
- CAN_DBGFreeze(CAN2, DISABLE);
- CAN_InitStructure.CAN_TTCM = DISABLE;
- CAN_InitStructure.CAN_ABOM = DISABLE;
- CAN_InitStructure.CAN_AWUM = ENABLE;
- CAN_InitStructure.CAN_NART = ENABLE;
- CAN_InitStructure.CAN_RFLM = DISABLE;
- CAN_InitStructure.CAN_TXFP = ENABLE;
- CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
- CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;
- /* CAN Baudrate = 500 kBps (CAN clocked at 42MHz) */
- CAN_InitStructure.CAN_BS1 = CAN_BS1_13tq;
- CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
- CAN_InitStructure.CAN_Prescaler = 4;
- CAN_Init(CAN2, &CAN_InitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber = 14;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x1c4 << 5;
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x1c7 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x1c8 << 5;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x2c8<< 5;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 1;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* Transmit Structure preparation */
- TxMessage2.StdId = 0x7ff;
- TxMessage2.ExtId = 0x00;
- TxMessage2.RTR = CAN_RTR_DATA;
- TxMessage2.IDE = CAN_ID_STD;
- TxMessage2.DLC = 8;
- /* Enable FIFO 0 message pending Interrupt */
- //CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);
- CAN_ITConfig(CAN2, CAN_IT_FF1, ENABLE);
- }
- void WWDG_init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- u32 *temp=((u32 * )0xE0042004); //WWDG-Debug Mode Stop DBGMCU_CR register
- *temp|= 0x00000200; //WWDG-Debug Mode Stop
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
- NVIC_InitStructure.NVIC_IRQChannel =WWDG_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- /* On Value line devices, WWDG clock counter = (PCLK1 (24MHz)/4096)/8 = 732 Hz (~1366 æs) */
- /* On other devices, WWDG clock counter = (PCLK1(36MHz)/4096)/8 = 1099 Hz (~910 æs) */
- WWDG_SetPrescaler(WWDG_Prescaler_8);
- /* Set Window value to 65 */
- WWDG_SetWindowValue(65);
- /* On Value line devices, Enable WWDG and set counter value to 127, WWDG timeout = ~1366 æs * 64 = 87.42 ms */
- /* On other devices, Enable WWDG and set counter value to 127, WWDG timeout = ~910 æs * 64 = 58.25 ms */
- WWDG_Enable(127);
- /* Clear EWI flag */
- WWDG_ClearFlag();
- /* Enable EW interrupt */
- WWDG_EnableIT();
- }
- void NVIC_Config(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitTypeDef NVIC2_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- NVIC2_InitStructure.NVIC_IRQChannel = CAN2_RX1_IRQn;
- NVIC2_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
- NVIC2_InitStructure.NVIC_IRQChannelSubPriority = 0x2;
- NVIC2_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC2_InitStructure);
- }
- void NVIC_Disable(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitTypeDef NVIC2_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
- NVIC_Init(&NVIC_InitStructure);
- NVIC2_InitStructure.NVIC_IRQChannel = CAN2_RX1_IRQn;
- NVIC2_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
- NVIC2_InitStructure.NVIC_IRQChannelSubPriority = 0x2;
- NVIC2_InitStructure.NVIC_IRQChannelCmd = DISABLE;
- NVIC_Init(&NVIC2_InitStructure);
- }
- void Init_RxMes(CanRxMsg *RxMessage)
- {
- uint8_t i = 0;
- RxMessage->StdId = 0x00;
- RxMessage->ExtId = 0x00;
- RxMessage->IDE = CAN_ID_STD;
- RxMessage->DLC = 0;
- RxMessage->FMI = 0;
- for (i = 0;i < 8;i++)
- {
- RxMessage->Data[i] = 0x00;
- }
- }
- int main(void)
- {
- SystemInit();
- SysTick_Config(SystemCoreClock/ 100);
- stbyinit();
- /* Initialize LEDs */
- LDinit();
- STM_EVAL_LEDInit(LED3);
- STM_EVAL_LEDInit(LED4);
- // WWDG_init();
- STM_EVAL_LEDInit(LED5);
- STM_EVAL_LEDInit(LED6);
- /* Turn on LEDs */
- STM_EVAL_LEDOn(LED3);
- STM_EVAL_LEDOn(LED4);
- SPI2init();
- STM_EVAL_LEDOn(LED5);
- mcp_isrinit();
- STM_EVAL_LEDOn(LED6);
- mcp_rxinit(&can3rx);
- LD1(1);
- LD2(1);
- NVIC_Config();
- stby(0);
- mcpinit();
- mcp_rxinit(&can3rx);
- mcp_write(0x2B,0x41);
- GPIO_ResetBits(GPIOB, GPIO_Pin_12);
- SPI2_send(0x03);
- SPI2_send(0x2B);
- SPI2_send(0x00);
- SPI2_send(0x00);
- GPIO_SetBits(GPIOB, GPIO_Pin_12);
- /*
- can3tx.id=0x380;
- can3tx.len=8;
- can3tx.data[0]=1;
- can3tx.data[1]=2;
- can3tx.data[2]=3;
- can3tx.data[3]=4;
- can3tx.data[4]=5;
- can3tx.data[5]=6;
- can3tx.data[6]=7;
- can3tx.data[7]=8;
- */
- /*
- buf380.id=0x380; //RxMessage.StdId;
- buf380.len=8; //RxMessage.DLC;
- buf380.data[0]=//RxMessage.Data[0];
- buf380.data[1]=//RxMessage.Data[1];
- buf380.data[2]=1;
- buf380.data[3]=3;//RxMessage.Data[3];
- buf380.data[4]=3;//RxMessage.Data[4];
- buf380.data[5]=6;//RxMessage.Data[5];
- buf380.data[6]=9;//RxMessage.Data[6];
- buf380.data[7]=20;//RxMessage.Data[7];
- */
- //mcp_tx(can3tx);
- mcp_read(MCP_CANINTF);
- mcp_write(MCP_CANINTF, 0);
- mcp_read(MCP_CANINTF);
- CAN_Config();
- CAN2_Config();
- Init_RxMes(&RxMessage);
- Init_RxMes(&RxMessage2);
- /*
- TxMessage.Data[0] = 0x09;
- TxMessage.Data[1] = 0x08;
- TxMessage.Data[2] = 0x07;
- TxMessage.Data[3] = 0x06;
- TxMessage.Data[4] = 0x05;
- */
- //CAN_Transmit(CAN2, &TxMessage);
- //CAN_Transmit(CAN1, &TxMessage);
- out1(1);
- PWR_MainRegulatorModeConfig(PWR_Regulator_Voltage_Scale2);
- //PWR_EnterSTANDBYMode();
- // GPIO_ResetBits(GPIOB,GPIO_Pin_14);
- //SPI2_send(0xC0);
- // GPIO_SetBits(GPIOB, GPIO_Pin_14);
- /* GPIO_ResetBits(GPIOB, GPIO_Pin_12);
- SPI2_send(0x02);
- SPI2_send(0x2B);
- SPI2_send(0x55);
- GPIO_SetBits(GPIOB, GPIO_Pin_12);
- */
- //WWDG_ReloadCounter();
- /* Infinite loop */
- while (1)
- {
- }
- }
- void CAN1_RX0_IRQHandler(void)
- {
- LD1(0);
- // int send=0;
- //LD5(1);
- sleeptimeout=0;
- CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
- //STM_EVAL_LEDToggle(RxMessage.Data[0]);
- // val = mcp_read(MCP_CANINTF);
- // if((mcp_bitread(MCP_TX0IF)) == 1)
- // {
- // mcp_tx(can3tx);
- // }
- NVIC_DisableIRQ(CAN1_RX0_IRQn);
- NVIC_DisableIRQ(CAN2_RX0_IRQn);
- /* can3tx1.id=RxMessage.StdId;
- can3tx1.len=RxMessage.DLC;
- can3tx1.data[0]=RxMessage.Data[0];
- can3tx1.data[1]=RxMessage.Data[1];
- can3tx1.data[2]=RxMessage.Data[2];
- can3tx1.data[3]=RxMessage.Data[3];
- can3tx1.data[4]=RxMessage.Data[4];
- can3tx1.data[5]=RxMessage.Data[5];
- can3tx1.data[6]=RxMessage.Data[6];
- can3tx1.data[7]=RxMessage.Data[7];
- */
- //mcp_tx(can3tx1);
- /*
- CANMSG buf0b0, buf0b1, buf0b4, buf223, buf224, buf260, buf2c1,
- buf2c4, buf2c8, buf380, buf3a0, buf3b0, buf3b1, buf3b3, buf3b4,
- buf610, buf611, buf620, buf621, buf622, buf630, buf631, buf638,
- buf640, buf1c8, buf2c8;
- */
- // LD5(0);
- switch (RxMessage.StdId)
- {
- case 0x0b0:
- buf0b0.id=RxMessage.StdId;
- buf0b0.len=RxMessage.DLC;
- buf0b0.data[0]=RxMessage.Data[0];
- buf0b0.data[1]=RxMessage.Data[1];
- buf0b0.data[2]=RxMessage.Data[2];
- buf0b0.data[3]=RxMessage.Data[3];
- buf0b0.data[4]=RxMessage.Data[4];
- buf0b0.data[5]=RxMessage.Data[5];
- buf0b0.data[6]=RxMessage.Data[6];
- buf0b0.data[7]=RxMessage.Data[7];
- break;
- case 0x0b2:
- buf0b2.id=RxMessage.StdId;
- buf0b2.len=RxMessage.DLC;
- buf0b2.data[0]=RxMessage.Data[0];
- buf0b2.data[1]=RxMessage.Data[1];
- buf0b2.data[2]=RxMessage.Data[2];
- buf0b2.data[3]=RxMessage.Data[3];
- buf0b2.data[4]=RxMessage.Data[4];
- buf0b2.data[5]=RxMessage.Data[5];
- buf0b2.data[6]=RxMessage.Data[6];
- buf0b2.data[7]=RxMessage.Data[7];
- break;
- case 0x0b4:
- buf0b4.id=RxMessage.StdId;
- buf0b4.len=RxMessage.DLC;
- buf0b4.data[0]=RxMessage.Data[0];
- buf0b4.data[1]=RxMessage.Data[1];
- buf0b4.data[2]=RxMessage.Data[2];
- buf0b4.data[3]=RxMessage.Data[3];
- buf0b4.data[4]=RxMessage.Data[4];
- buf0b4.data[5]=RxMessage.Data[5];
- buf0b4.data[6]=RxMessage.Data[6];
- buf0b4.data[7]=RxMessage.Data[7];
- break;
- case 0x223:
- buf223.id=RxMessage.StdId;
- buf223.len=RxMessage.DLC;
- buf223.data[0]=RxMessage.Data[0];
- buf223.data[1]=RxMessage.Data[1];
- buf223.data[2]=RxMessage.Data[2];
- buf223.data[3]=RxMessage.Data[3];
- buf223.data[4]=RxMessage.Data[4];
- buf223.data[5]=RxMessage.Data[5];
- buf223.data[6]=RxMessage.Data[6];
- buf223.data[7]=RxMessage.Data[7];
- break;
- case 0x224:
- buf224.id=RxMessage.StdId;
- buf224.len=RxMessage.DLC;
- buf224.data[0]=RxMessage.Data[0];
- buf224.data[1]=RxMessage.Data[1];
- buf224.data[2]=RxMessage.Data[2];
- buf224.data[3]=RxMessage.Data[3];
- buf224.data[4]=RxMessage.Data[4];
- buf224.data[5]=RxMessage.Data[5];
- buf224.data[6]=RxMessage.Data[6];
- buf224.data[7]=RxMessage.Data[7];
- break;
- case 0x260:
- buf260.id=RxMessage.StdId;
- buf260.len=RxMessage.DLC;
- buf260.data[0]=RxMessage.Data[0];
- buf260.data[1]=RxMessage.Data[1];
- buf260.data[2]=RxMessage.Data[2];
- buf260.data[3]=RxMessage.Data[3];
- buf260.data[4]=RxMessage.Data[4];
- buf260.data[5]=RxMessage.Data[5];
- buf260.data[6]=RxMessage.Data[6];
- buf260.data[7]=RxMessage.Data[7];
- break;
- case 0x380:
- buf380.id=RxMessage.StdId;
- buf380.len=RxMessage.DLC;
- buf380.data[0]=RxMessage.Data[0];
- buf380.data[1]=RxMessage.Data[1];
- buf380.data[2]=RxMessage.Data[2];
- buf380.data[3]=RxMessage.Data[3];
- buf380.data[4]=RxMessage.Data[4];
- buf380.data[5]=RxMessage.Data[5];
- buf380.data[6]=RxMessage.Data[6];
- buf380.data[7]=RxMessage.Data[7];
- break;
- case 0x38a:
- buf38a.id=RxMessage.StdId;
- buf38a.len=RxMessage.DLC;
- buf38a.data[0]=RxMessage.Data[0];
- buf38a.data[1]=RxMessage.Data[1];
- buf38a.data[2]=RxMessage.Data[2];
- buf38a.data[3]=RxMessage.Data[3];
- buf38a.data[4]=RxMessage.Data[4];
- buf38a.data[5]=RxMessage.Data[5];
- buf38a.data[6]=RxMessage.Data[6];
- buf38a.data[7]=RxMessage.Data[7];
- break;
- case 0x398:
- buf398.id=RxMessage.StdId;
- buf398.len=RxMessage.DLC;
- buf398.data[0]=RxMessage.Data[0];
- buf398.data[1]=RxMessage.Data[1];
- buf398.data[2]=RxMessage.Data[2];
- buf398.data[3]=RxMessage.Data[3];
- buf398.data[4]=RxMessage.Data[4];
- buf398.data[5]=RxMessage.Data[5];
- buf398.data[6]=RxMessage.Data[6];
- buf398.data[7]=RxMessage.Data[7];
- break;
- case 0x3b3:
- buf3b3.id=RxMessage.StdId;
- buf3b3.len=RxMessage.DLC;
- buf3b3.data[0]=RxMessage.Data[0];
- buf3b3.data[1]=RxMessage.Data[1];
- buf3b3.data[2]=RxMessage.Data[2];
- buf3b3.data[3]=RxMessage.Data[3];
- buf3b3.data[4]=RxMessage.Data[4];
- buf3b3.data[5]=RxMessage.Data[5];
- buf3b3.data[6]=RxMessage.Data[6];
- buf3b3.data[7]=RxMessage.Data[7];
- break;
- case 0x3b4:
- buf3b4.id=RxMessage.StdId;
- buf3b4.len=RxMessage.DLC;
- buf3b4.data[0]=RxMessage.Data[0];
- buf3b4.data[1]=RxMessage.Data[1];
- buf3b4.data[2]=RxMessage.Data[2];
- buf3b4.data[3]=RxMessage.Data[3];
- buf3b4.data[4]=RxMessage.Data[4];
- buf3b4.data[5]=RxMessage.Data[5];
- buf3b4.data[6]=RxMessage.Data[6];
- buf3b4.data[7]=RxMessage.Data[7];
- break;
- case 0x610:
- buf610.id=RxMessage.StdId;
- buf610.len=RxMessage.DLC;
- buf610.data[0]=RxMessage.Data[0];
- buf610.data[1]=RxMessage.Data[1];
- buf610.data[2]=RxMessage.Data[2];
- buf610.data[3]=RxMessage.Data[3];
- buf610.data[4]=RxMessage.Data[4];
- buf610.data[5]=RxMessage.Data[5];
- buf610.data[6]=RxMessage.Data[6];
- buf610.data[7]=RxMessage.Data[7];
- break;
- case 0x611:
- buf611.id=RxMessage.StdId;
- buf611.len=RxMessage.DLC;
- buf611.data[0]=RxMessage.Data[0];
- buf611.data[1]=RxMessage.Data[1];
- buf611.data[2]=RxMessage.Data[2];
- buf611.data[3]=RxMessage.Data[3];
- buf611.data[4]=RxMessage.Data[4];
- buf611.data[5]=RxMessage.Data[5];
- buf611.data[6]=RxMessage.Data[6];
- buf611.data[7]=RxMessage.Data[7];
- break;
- case 0x620:
- buf620.id=RxMessage.StdId;
- buf620.len=RxMessage.DLC;
- buf620.data[0]=RxMessage.Data[0];
- buf620.data[1]=RxMessage.Data[1];
- buf620.data[2]=RxMessage.Data[2];
- buf620.data[3]=RxMessage.Data[3];
- buf620.data[4]=RxMessage.Data[4];
- buf620.data[5]=RxMessage.Data[5];
- buf620.data[6]=RxMessage.Data[6];
- buf620.data[7]=RxMessage.Data[7];
- break;
- case 0x621:
- buf621.id=RxMessage.StdId;
- buf621.len=RxMessage.DLC;
- buf621.data[0]=RxMessage.Data[0];
- buf621.data[1]=RxMessage.Data[1];
- buf621.data[2]=RxMessage.Data[2];
- buf621.data[3]=RxMessage.Data[3];
- buf621.data[4]=RxMessage.Data[4];
- buf621.data[5]=RxMessage.Data[5];
- buf621.data[6]=RxMessage.Data[6];
- buf621.data[7]=RxMessage.Data[7];
- break;
- case 0x622:
- buf622.id=RxMessage.StdId;
- buf622.len=RxMessage.DLC;
- buf622.data[0]=RxMessage.Data[0];
- buf622.data[1]=RxMessage.Data[1];
- buf622.data[2]=RxMessage.Data[2];
- buf622.data[3]=RxMessage.Data[3];
- buf622.data[4]=RxMessage.Data[4];
- buf622.data[5]=RxMessage.Data[5];
- buf622.data[6]=RxMessage.Data[6];
- buf622.data[7]=RxMessage.Data[7];
- break;
- case 0x630:
- buf630.id=RxMessage.StdId;
- buf630.len=RxMessage.DLC;
- buf630.data[0]=RxMessage.Data[0];
- buf630.data[1]=RxMessage.Data[1];
- buf630.data[2]=RxMessage.Data[2];
- buf630.data[3]=RxMessage.Data[3];
- buf630.data[4]=RxMessage.Data[4];
- buf630.data[5]=RxMessage.Data[5];
- buf630.data[6]=RxMessage.Data[6];
- buf630.data[7]=RxMessage.Data[7];
- break;
- case 0x631:
- buf631.id=RxMessage.StdId;
- buf631.len=RxMessage.DLC;
- buf631.data[0]=RxMessage.Data[0];
- buf631.data[1]=RxMessage.Data[1];
- buf631.data[2]=RxMessage.Data[2];
- buf631.data[3]=RxMessage.Data[3];
- buf631.data[4]=RxMessage.Data[4];
- buf631.data[5]=RxMessage.Data[5];
- buf631.data[6]=RxMessage.Data[6];
- buf631.data[7]=RxMessage.Data[7];
- break;
- case 0x638:
- buf638.id=RxMessage.StdId;
- buf638.len=RxMessage.DLC;
- buf638.data[0]=RxMessage.Data[0];
- buf638.data[1]=RxMessage.Data[1];
- buf638.data[2]=RxMessage.Data[2];
- buf638.data[3]=RxMessage.Data[3];
- buf638.data[4]=RxMessage.Data[4];
- buf638.data[5]=RxMessage.Data[5];
- buf638.data[6]=RxMessage.Data[6];
- buf638.data[7]=RxMessage.Data[7];
- break;
- case 0x640:
- buf640.id=RxMessage.StdId;
- buf640.len=RxMessage.DLC;
- buf640.data[0]=RxMessage.Data[0];
- buf640.data[1]=RxMessage.Data[1];
- buf640.data[2]=RxMessage.Data[2];
- buf640.data[3]=RxMessage.Data[3];
- buf640.data[4]=RxMessage.Data[4];
- buf640.data[5]=RxMessage.Data[5];
- buf640.data[6]=RxMessage.Data[6];
- buf640.data[7]=RxMessage.Data[7];
- break;
- default:
- if (RxMessage.StdId>= 0x700)
- {
- obdbuf1.id=RxMessage.StdId;
- obdbuf1.len=RxMessage.DLC;
- obdbuf1.data[0]=RxMessage.Data[0];
- obdbuf1.data[1]=RxMessage.Data[1];
- obdbuf1.data[2]=RxMessage.Data[2];
- obdbuf1.data[3]=RxMessage.Data[3];
- obdbuf1.data[4]=RxMessage.Data[4];
- obdbuf1.data[5]=RxMessage.Data[5];
- obdbuf1.data[6]=RxMessage.Data[6];
- obdbuf1.data[7]=RxMessage.Data[7];
- mcp_tx(obdbuf1);
- }
- break;
- }
- NVIC_EnableIRQ(CAN1_RX0_IRQn);
- NVIC_EnableIRQ(CAN2_RX0_IRQn);
- }
- void CAN2_RX1_IRQHandler(void)
- {
- LD2(0);
- sleeptimeout=0;
- //LD6(1);
- CAN_Receive(CAN2, CAN_FIFO1, &RxMessage2);
- // if((mcp_bitread(MCP_TX0IF)) == 1)
- // {
- // mcp_tx(can3tx);
- // }
- //mcp_tx(can3tx);
- NVIC_DisableIRQ(CAN1_RX0_IRQn);
- NVIC_DisableIRQ(CAN2_RX0_IRQn);
- can3tx2.id=RxMessage2.StdId;
- can3tx2.len=RxMessage2.DLC;
- can3tx2.data[0]=RxMessage2.Data[0];
- can3tx2.data[1]=RxMessage2.Data[1];
- can3tx2.data[2]=RxMessage2.Data[2];
- can3tx2.data[3]=RxMessage2.Data[3];
- can3tx2.data[4]=RxMessage2.Data[4];
- can3tx2.data[5]=RxMessage2.Data[5];
- can3tx2.data[6]=RxMessage2.Data[6];
- can3tx2.data[7]=RxMessage2.Data[7];
- // mcp_tx(can3tx2);
- NVIC_EnableIRQ(CAN1_RX0_IRQn);
- NVIC_EnableIRQ(CAN2_RX0_IRQn);
- // LD6(0);
- switch (RxMessage2.StdId)
- {
- case 0x1c4:
- buf1c4.id=RxMessage2.StdId;
- buf1c4.len=RxMessage2.DLC;
- buf1c4.data[0]=RxMessage2.Data[0];
- buf1c4.data[1]=RxMessage2.Data[1];
- buf1c4.data[2]=RxMessage2.Data[2];
- buf1c4.data[3]=RxMessage2.Data[3];
- buf1c4.data[4]=RxMessage2.Data[4];
- buf1c4.data[5]=RxMessage2.Data[5];
- buf1c4.data[6]=RxMessage2.Data[6];
- buf1c4.data[7]=RxMessage2.Data[7];
- break;
- case 0x1c7:
- buf1c7.id=RxMessage2.StdId;
- buf1c7.len=RxMessage2.DLC;
- buf1c7.data[0]=RxMessage2.Data[0];
- buf1c7.data[1]=RxMessage2.Data[1];
- buf1c7.data[2]=RxMessage2.Data[2];
- buf1c7.data[3]=RxMessage2.Data[3];
- buf1c7.data[4]=RxMessage2.Data[4];
- buf1c7.data[5]=RxMessage2.Data[5];
- buf1c7.data[6]=RxMessage2.Data[6];
- buf1c7.data[7]=RxMessage2.Data[7];
- break;
- case 0x1c8:
- buf1c8.id=RxMessage2.StdId;
- buf1c8.len=RxMessage2.DLC;
- buf1c8.data[0]=RxMessage2.Data[0];
- buf1c8.data[1]=RxMessage2.Data[1];
- buf1c8.data[2]=RxMessage2.Data[2];
- buf1c8.data[3]=RxMessage2.Data[3];
- buf1c8.data[4]=RxMessage2.Data[4];
- buf1c8.data[5]=RxMessage2.Data[5];
- buf1c8.data[6]=RxMessage2.Data[6];
- buf1c8.data[7]=RxMessage2.Data[7];
- break;
- case 0x2c8:
- buf2c8.id=RxMessage2.StdId;
- buf2c8.len=RxMessage2.DLC;
- buf2c8.data[0]=RxMessage2.Data[0];
- buf2c8.data[1]=RxMessage2.Data[1];
- buf2c8.data[2]=RxMessage2.Data[2];
- buf2c8.data[3]=RxMessage2.Data[3];
- buf2c8.data[4]=RxMessage2.Data[4];
- buf2c8.data[5]=RxMessage2.Data[5];
- buf2c8.data[6]=RxMessage2.Data[6];
- buf2c8.data[7]=RxMessage2.Data[7];
- break;
- default:
- return;
- }
- }
- void can3rxhandler(void)
- {
- //
- // CAN_Transmit(CAN1, &can3rx);
- can3rx.id=TxMessage3.StdId;
- can3rx.len=TxMessage3.DLC;
- can3rx.data[0]=TxMessage3.Data[0];
- can3rx.data[1]=TxMessage3.Data[1];
- can3rx.data[2]=TxMessage3.Data[2];
- can3rx.data[3]=TxMessage3.Data[3];
- can3rx.data[4]=TxMessage3.Data[4];
- can3rx.data[5]=TxMessage3.Data[5];
- can3rx.data[6]=TxMessage3.Data[6];
- can3rx.data[7]=TxMessage3.Data[7];
- CAN_Transmit(CAN1, &TxMessage3);
- //mcp_tx(can3rx);
- //mcp_tx(can3rx);
- }
- void deepsleep(void)
- {
- out1(0);
- out2(0);
- mcp_sleep();
- stby(1);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
- PWR_WakeUpPinCmd(ENABLE);
- PWR_EnterSTANDBYMode();
- }
- void TIM2_IRQHandler(void){
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- if (sleeptimeout >= 4)
- {
- STM_EVAL_LEDOff(LED3);
- STM_EVAL_LEDOff(LED4);
- STM_EVAL_LEDOff(LED5);
- STM_EVAL_LEDOff(LED6);
- sleeptimeout=0;
- deepsleep();
- }
- else if (sleeptimeout<4)
- {
- if (sleeptimeout==3)
- {
- STM_EVAL_LEDOff(LED3);
- STM_EVAL_LEDOff(LED4);
- STM_EVAL_LEDOff(LED5);
- STM_EVAL_LEDOn(LED6);
- }
- if (sleeptimeout==2)
- {
- STM_EVAL_LEDOff(LED3);
- STM_EVAL_LEDOff(LED4);
- STM_EVAL_LEDOn(LED5);
- STM_EVAL_LEDOn(LED6);
- }
- if (sleeptimeout==1)
- {
- STM_EVAL_LEDOn(LED3);
- STM_EVAL_LEDOff(LED4);
- STM_EVAL_LEDOn(LED5);
- STM_EVAL_LEDOn(LED6);
- }
- if (sleeptimeout==0)
- {
- STM_EVAL_LEDOn(LED3);
- STM_EVAL_LEDOn(LED4);
- STM_EVAL_LEDOn(LED5);
- STM_EVAL_LEDOn(LED6);
- }
- sleeptimeout++;
- }
- }
- void TIM3_IRQHandler(void){
- /*buf0b0, buf0b2, buf0b4, buf1c4, buf1c7, buf1c8, buf2c8,
- buf223, buf224, buf260, buf2c1, buf2c4, buf380, buf38a,
- buf3b3, buf3b4, buf610, buf611, buf620, buf621, buf622,
- buf630, buf631, buf638, buf640, buf1c8, buf2c8, buf398*/
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
- switch(time)
- {
- case 0:
- mcp_tx(obdbuf1);
- break;
- case 1:
- mcp_tx(buf0b0);
- break;
- case 2:
- mcp_tx(buf0b2);
- break;
- case 3:
- mcp_tx(buf0b4);
- break;
- case 4:
- mcp_tx(buf1c4);
- break;
- case 5:
- mcp_tx(buf1c7);
- break;
- case 6:
- mcp_tx(buf1c8);
- break;
- case 7:
- mcp_tx(buf2c8);
- break;
- case 8:
- mcp_tx(buf223);
- break;
- case 9:
- mcp_tx(buf224);
- break;
- case 10:
- mcp_tx(buf260);
- break;
- case 11:
- mcp_tx(buf2c1);
- break;
- case 12:
- mcp_tx(buf2c4);
- break;
- case 13:
- mcp_tx(buf380);
- break;
- case 14:
- mcp_tx(buf38a);
- break;
- case 15:
- mcp_tx(buf398);
- break;
- case 16:
- mcp_tx(buf3b3);
- break;
- case 17:
- mcp_tx(buf3b4);
- break;
- case 18:
- mcp_tx(buf610);
- break;
- case 19:
- mcp_tx(buf611);
- break;
- case 20:
- mcp_tx(buf620);
- break;
- case 21:
- mcp_tx(buf621);
- break;
- case 22:
- mcp_tx(buf622);
- break;
- case 23:
- mcp_tx(buf630);
- break;
- case 24:
- mcp_tx(buf631);
- break;
- case 25:
- mcp_tx(buf638);
- break;
- case 26:
- mcp_tx(buf640);
- break;
- default:
- break;
- }
- if (time == 26)
- {
- LD4(0);
- LD5(0);
- time=0;
- }
- else if (time < 30)
- {
- if (time==0)
- {
- LD4(1);
- LD5(0);
- }
- if (time==13)
- {
- LD5(1);
- //buf380.data[7]++;
- }
- time++;
- }
- }
- void WWDG_IRQHandler(void)
- {
- /* Update WWDG counter */
- //WWDG_SetCounter(0x7F);
- /* Clear EWI flag */
- WWDG_ClearFlag();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement