Advertisement
dj92

Untitled

Dec 28th, 2014
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 32.25 KB | None | 0 0
  1. /* Includes */
  2. #include "stm32f4xx.h"
  3. #include "system_stm32f4xx.h"
  4. #include "stm32f4_discovery.h"
  5. #include "main.h"
  6. #include "stm32f4xx_spi.h"
  7. #include "stm32f4xx_rcc.h"
  8. #include "stm32f4xx_can.h"
  9. #include "stm32f4xx_pwr.h"
  10. #include "stm32f4xx_wwdg.h"
  11. #include "stm32f4xx_it.h"
  12. #include "mcp2515.h"
  13. #include "led.h"
  14.  
  15. CANMSG can3tx1;
  16. CANMSG can3tx2;
  17. CANMSG can3tx;
  18. CANMSG can3rx;
  19.  
  20. CANMSG buf0b0, buf0b2, buf0b4, buf1c4, buf1c7, buf1c8, buf2c8,
  21.        buf223, buf224, buf260, buf2c1, buf2c4, buf380, buf38a,
  22.              buf398, buf3b3, buf3b4, buf610, buf611, buf620, buf621, buf622,
  23.              buf630, buf631, buf638, buf640, obdbuf1, obdbuf2;
  24.  
  25.  
  26.  
  27. int sleeptimeout=0;
  28. static int time=0;
  29.  
  30. CAN_InitTypeDef        CAN_InitStructure;
  31. CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  32.  
  33. GPIO_InitTypeDef GPIO_InitStructure;
  34.  
  35. CanTxMsg TxMessage;
  36. CanRxMsg RxMessage;
  37. CanTxMsg TxMessage2;
  38. CanRxMsg RxMessage2;
  39. CanTxMsg TxMessage3;
  40.  
  41. /* Private function prototypes */
  42. void CAN_Config(void);
  43. void NVIC_Config(void);
  44. void delay_ms(uint16_t);
  45. void delay_us(uint32_t);
  46. void LDoff(void);
  47.  
  48. __IO uint32_t TimingDelay = 0;
  49. //void SPIinit(void);
  50. //extern void SPI_Init(SPI_TypeDef* , SPI_InitTypeDef* );
  51. /* Private functions */
  52. //Pin definitions
  53.  
  54. #define CAN_RX_PIN      GPIO_Pin_8
  55. #define CAN_TX_PIN      GPIO_Pin_9
  56.  
  57. #define CAN_RX_SOURCE    GPIO_PinSource8
  58. #define CAN_TX_SOURCE    GPIO_PinSource9
  59.  
  60. //Port definitions
  61. #define CAN_COM_PORT    GPIOB
  62.  
  63.  
  64.  
  65.  
  66. //Clock definitions
  67. #define CAN_GPIO_CLK        RCC_AHB1Periph_GPIOB
  68. #define CAN_CLK             RCC_APB1Periph_CAN1
  69.  
  70.  
  71.  
  72. #define CAN2_RX_PIN      GPIO_Pin_5
  73. #define CAN2_TX_PIN      GPIO_Pin_6
  74.  
  75. #define CAN2_RX_SOURCE    GPIO_PinSource5
  76. #define CAN2_TX_SOURCE    GPIO_PinSource6
  77.  
  78. //Port definitions
  79. #define CAN2_COM_PORT    GPIOB
  80.  
  81. //Clock definitions
  82. #define CAN2_GPIO_CLK        RCC_AHB1Periph_GPIOB
  83. #define CAN2_CLK             RCC_APB1Periph_CAN2
  84.  
  85. int AC;
  86. int LGHT;
  87. int LGHT2;
  88. int DFCO;
  89. int LD70;
  90. int RUN;
  91. int RPM;
  92. int IGN;
  93. int DCTY;
  94. int KEY;
  95. int rfunlock;
  96.  
  97.  
  98. void stbyinit(void)
  99. {
  100.       GPIO_InitTypeDef  GPIO_InitStructure;
  101.     TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure;
  102.   NVIC_InitTypeDef NVIC_InitStructure;
  103.  
  104.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  105.  
  106.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  107.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  108.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  109.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  110.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  111.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  112.    
  113.  
  114.  
  115.  
  116.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  117.  
  118.  
  119.   TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  120.   TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  121.   TIM_TimeBase_InitStructure.TIM_Period = 1999;
  122.   TIM_TimeBase_InitStructure.TIM_Prescaler = 17999;
  123.   TIM_TimeBaseInit(TIM2, &TIM_TimeBase_InitStructure);
  124.  
  125.   TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  126.  
  127.   NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  128.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  129.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x04;
  130.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  131.   NVIC_Init(&NVIC_InitStructure);
  132.  
  133.   TIM_Cmd(TIM2, ENABLE);
  134.    
  135.      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  136.  
  137.  
  138.   TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  139.   TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  140.   TIM_TimeBase_InitStructure.TIM_Period = 1999;
  141.   TIM_TimeBase_InitStructure.TIM_Prescaler = 179;
  142.   TIM_TimeBaseInit(TIM3, &TIM_TimeBase_InitStructure);
  143.  
  144.   TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  145.  
  146.   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  147.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  148.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
  149.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  150.   NVIC_Init(&NVIC_InitStructure);
  151.  
  152.   TIM_Cmd(TIM3, ENABLE);
  153.  
  154.  
  155.  
  156.    
  157. }
  158.  
  159. void stby(int a)
  160. {
  161.         if (a==0)
  162.     {
  163.     GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_RESET);
  164.   }
  165. else   
  166. {
  167.         GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET);
  168. }
  169. }
  170.  
  171.  
  172. void CAN_Config(void)
  173. {
  174.   GPIO_InitTypeDef  GPIO_InitStructure;
  175.  
  176.   /* CAN GPIOs configuration **************************************************/
  177.  
  178.   /* Enable GPIO clock */
  179.   RCC_AHB1PeriphClockCmd(CAN_GPIO_CLK, ENABLE);
  180.  
  181.   /* Connect CAN pins to AF9 */
  182.   GPIO_PinAFConfig(CAN_COM_PORT, CAN_RX_SOURCE, GPIO_AF_CAN1);
  183.   GPIO_PinAFConfig(CAN_COM_PORT, CAN_TX_SOURCE, GPIO_AF_CAN1);
  184.  
  185.   /* Configure CAN RX and TX pins */
  186.   GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN | CAN_TX_PIN;
  187.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  188.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  189.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  190.   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  191.   GPIO_Init(CAN_COM_PORT, &GPIO_InitStructure);
  192.  
  193.   /* CAN configuration ********************************************************/
  194.   /* Enable CAN clock */
  195.   RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE);
  196.  
  197.   //CAN1
  198.   /* CAN register init */
  199.   CAN_DeInit(CAN1);
  200.  
  201.   /* CAN cell init */
  202.   CAN_DBGFreeze(CAN1, DISABLE);
  203.   CAN_InitStructure.CAN_TTCM = DISABLE;
  204.   CAN_InitStructure.CAN_ABOM = DISABLE;
  205.   CAN_InitStructure.CAN_AWUM = ENABLE;
  206.   CAN_InitStructure.CAN_NART = ENABLE;
  207.   CAN_InitStructure.CAN_RFLM = DISABLE;
  208.   CAN_InitStructure.CAN_TXFP = ENABLE;
  209.   CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
  210.   CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;
  211.  
  212.   /* CAN Baudrate = 500 kBps (CAN clocked at 42MHz) */
  213.   CAN_InitStructure.CAN_BS1 = CAN_BS1_13tq;
  214.   CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
  215.   CAN_InitStructure.CAN_Prescaler = 4;
  216.   CAN_Init(CAN1, &CAN_InitStructure);
  217.  
  218.   /* CAN filter init */
  219.   CAN_FilterInitStructure.CAN_FilterNumber = 0;
  220.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  221.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  222.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
  223.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
  224.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
  225.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
  226.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  227.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  228.   CAN_FilterInit(&CAN_FilterInitStructure);
  229.  /* CAN filter init */
  230.   CAN_FilterInitStructure.CAN_FilterNumber = 1;
  231.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  232.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  233.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0b0 << 5;
  234.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x0b2 << 5;
  235.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0b4 << 5;
  236.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x223 << 5;
  237.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  238.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  239.   CAN_FilterInit(&CAN_FilterInitStructure);
  240.  /* CAN filter init */
  241.   CAN_FilterInitStructure.CAN_FilterNumber = 2;
  242.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  243.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  244.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x224 << 5;
  245.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x260 << 5;
  246.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x380 << 5;
  247.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x38a << 5;
  248.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  249.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  250.   CAN_FilterInit(&CAN_FilterInitStructure);
  251.  /* CAN filter init */
  252.   CAN_FilterInitStructure.CAN_FilterNumber = 3;
  253.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  254.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  255.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x398 << 5;
  256.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x3b3 << 5;
  257.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x3b4 << 5;
  258.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x610 << 5;
  259.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  260.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  261.   CAN_FilterInit(&CAN_FilterInitStructure);
  262.  /* CAN filter init */
  263.   CAN_FilterInitStructure.CAN_FilterNumber = 4;
  264.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  265.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  266.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x611 << 5;
  267.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x620 << 5;
  268.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x622 << 5;
  269.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x630 << 5;
  270.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  271.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  272.   CAN_FilterInit(&CAN_FilterInitStructure);
  273.  /* CAN filter init */
  274.   CAN_FilterInitStructure.CAN_FilterNumber = 5;
  275.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  276.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  277.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x631 << 5;
  278.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x638 << 5;
  279.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x640 << 5;
  280.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
  281.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  282.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  283.   CAN_FilterInit(&CAN_FilterInitStructure);
  284.  
  285.   CAN_FilterInitStructure.CAN_FilterNumber = 6;
  286.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
  287.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  288.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x700 << 5;
  289.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x000 << 5;
  290.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xF00 << 5;
  291.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFF << 5;
  292.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  293.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  294.   CAN_FilterInit(&CAN_FilterInitStructure);
  295.  
  296.   /* Transmit Structure preparation */
  297.   TxMessage.StdId = 0x321;
  298.   TxMessage.ExtId = 0x01;
  299.   TxMessage.RTR = CAN_RTR_DATA;
  300.   TxMessage.IDE = CAN_ID_STD;
  301.   TxMessage.DLC = 8;
  302.  
  303.   /* Enable FIFO 0 message pending Interrupt */
  304.   CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
  305. CAN_ITConfig(CAN1, CAN_IT_FF0, ENABLE);
  306. }
  307.  
  308.  
  309. void CAN2_Config(void)
  310. {
  311.   GPIO_InitTypeDef  GPIO_InitStructure;
  312.  
  313.   /* CAN GPIOs configuration **************************************************/
  314.   // RCC_APB1ENR= RCC_APB1ENR | RCC_APB1ENR_CAN2;
  315.       RCC_AHB1PeriphClockCmd(CAN_GPIO_CLK, ENABLE);
  316.   /* Enable GPIO clock */
  317.   //RCC_AHB1PeriphClockCmd(CAN2_GPIO_CLK, ENABLE);
  318.  
  319.   /* Connect CAN pins to AF9 */
  320.   GPIO_PinAFConfig(CAN2_COM_PORT, CAN2_RX_SOURCE, GPIO_AF_CAN2);
  321.   GPIO_PinAFConfig(CAN2_COM_PORT, CAN2_TX_SOURCE, GPIO_AF_CAN2);
  322.  
  323.   /* Configure CAN RX and TX pins */
  324.   GPIO_InitStructure.GPIO_Pin = CAN2_RX_PIN | CAN2_TX_PIN;
  325.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  326.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  327.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  328.   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  329.   GPIO_Init(CAN_COM_PORT, &GPIO_InitStructure);
  330.  
  331.   /* CAN configuration ********************************************************/
  332.   /* Enable CAN clock */
  333.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
  334. RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
  335.  
  336.   //CAN1
  337.   /* CAN register init */
  338.   CAN_DeInit(CAN2);
  339.  
  340.   /* CAN cell init */
  341.   CAN_DBGFreeze(CAN2, DISABLE);
  342.   CAN_InitStructure.CAN_TTCM = DISABLE;
  343.   CAN_InitStructure.CAN_ABOM = DISABLE;
  344.   CAN_InitStructure.CAN_AWUM = ENABLE;
  345.   CAN_InitStructure.CAN_NART = ENABLE;
  346.   CAN_InitStructure.CAN_RFLM = DISABLE;
  347.   CAN_InitStructure.CAN_TXFP = ENABLE;
  348.   CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
  349.   CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;
  350.  
  351.   /* CAN Baudrate = 500 kBps (CAN clocked at 42MHz) */
  352.   CAN_InitStructure.CAN_BS1 = CAN_BS1_13tq;
  353.   CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
  354.   CAN_InitStructure.CAN_Prescaler = 4;
  355.   CAN_Init(CAN2, &CAN_InitStructure);
  356.  
  357.   /* CAN filter init */
  358.   CAN_FilterInitStructure.CAN_FilterNumber = 14;
  359.   CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
  360.   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
  361.   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x1c4 << 5;
  362.   CAN_FilterInitStructure.CAN_FilterIdLow = 0x1c7 << 5;
  363.   CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x1c8 << 5;
  364.   CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x2c8<< 5;
  365.   CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 1;
  366.   CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  367.   CAN_FilterInit(&CAN_FilterInitStructure);
  368.  
  369. /* Transmit Structure preparation */
  370.   TxMessage2.StdId = 0x7ff;
  371.   TxMessage2.ExtId = 0x00;
  372.   TxMessage2.RTR = CAN_RTR_DATA;
  373.   TxMessage2.IDE = CAN_ID_STD;
  374.   TxMessage2.DLC = 8;
  375.  
  376.   /* Enable FIFO 0 message pending Interrupt */
  377.   //CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);
  378. CAN_ITConfig(CAN2, CAN_IT_FF1, ENABLE);
  379. }
  380. void WWDG_init(void)
  381. {
  382.  
  383.   NVIC_InitTypeDef NVIC_InitStructure;
  384.   u32 *temp=((u32 * )0xE0042004);  //WWDG-Debug Mode Stop  DBGMCU_CR register
  385.   *temp|= 0x00000200;        //WWDG-Debug Mode Stop
  386.  
  387.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
  388.  
  389.   NVIC_InitStructure.NVIC_IRQChannel =WWDG_IRQn;
  390.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  391.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  392.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  393.   NVIC_Init(&NVIC_InitStructure);  
  394.  
  395.   /* On Value line devices, WWDG clock counter = (PCLK1 (24MHz)/4096)/8 = 732 Hz (~1366 æs)  */
  396.   /* On other devices, WWDG clock counter = (PCLK1(36MHz)/4096)/8 = 1099 Hz (~910 æs)  */
  397.   WWDG_SetPrescaler(WWDG_Prescaler_8);
  398.  
  399.   /* Set Window value to 65 */
  400.   WWDG_SetWindowValue(65);
  401.  
  402.   /* On Value line devices, Enable WWDG and set counter value to 127, WWDG timeout = ~1366 æs * 64 = 87.42 ms */
  403.   /* On other devices, Enable WWDG and set counter value to 127, WWDG timeout = ~910 æs * 64 = 58.25 ms */
  404.   WWDG_Enable(127);
  405.  
  406.   /* Clear EWI flag */
  407.   WWDG_ClearFlag();
  408.  
  409.   /* Enable EW interrupt */
  410.   WWDG_EnableIT();
  411.  }
  412.  
  413. void NVIC_Config(void)
  414. {
  415.   NVIC_InitTypeDef  NVIC_InitStructure;
  416.   NVIC_InitTypeDef  NVIC2_InitStructure;
  417.    
  418.   NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
  419.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
  420.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1;
  421.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  422.   NVIC_Init(&NVIC_InitStructure);
  423.    
  424.  
  425.   NVIC2_InitStructure.NVIC_IRQChannel = CAN2_RX1_IRQn;
  426.   NVIC2_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
  427.   NVIC2_InitStructure.NVIC_IRQChannelSubPriority = 0x2;
  428.   NVIC2_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  429.   NVIC_Init(&NVIC2_InitStructure);
  430.    
  431. }
  432.  
  433. void NVIC_Disable(void)
  434. {
  435.     NVIC_InitTypeDef  NVIC_InitStructure;
  436.   NVIC_InitTypeDef  NVIC2_InitStructure;
  437.    
  438.   NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
  439.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
  440.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1;
  441.   NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
  442.   NVIC_Init(&NVIC_InitStructure);
  443.    
  444.  
  445.   NVIC2_InitStructure.NVIC_IRQChannel = CAN2_RX1_IRQn;
  446.   NVIC2_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
  447.   NVIC2_InitStructure.NVIC_IRQChannelSubPriority = 0x2;
  448.   NVIC2_InitStructure.NVIC_IRQChannelCmd = DISABLE;
  449.   NVIC_Init(&NVIC2_InitStructure);
  450. }
  451.  
  452.  
  453. void Init_RxMes(CanRxMsg *RxMessage)
  454. {
  455.   uint8_t i = 0;
  456.  
  457.   RxMessage->StdId = 0x00;
  458.   RxMessage->ExtId = 0x00;
  459.   RxMessage->IDE = CAN_ID_STD;
  460.   RxMessage->DLC = 0;
  461.   RxMessage->FMI = 0;
  462.   for (i = 0;i < 8;i++)
  463.   {
  464.     RxMessage->Data[i] = 0x00;
  465.   }
  466. }
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477. int main(void)
  478. {
  479.  
  480.   SystemInit();
  481.   SysTick_Config(SystemCoreClock/ 100);
  482.  
  483.     stbyinit();
  484.     /* Initialize LEDs */
  485.  
  486.     LDinit();
  487.     STM_EVAL_LEDInit(LED3);
  488.   STM_EVAL_LEDInit(LED4);
  489.    
  490. //  WWDG_init();
  491.    
  492.  STM_EVAL_LEDInit(LED5);
  493.   STM_EVAL_LEDInit(LED6);
  494.  
  495.   /* Turn on LEDs */
  496.  STM_EVAL_LEDOn(LED3);
  497.   STM_EVAL_LEDOn(LED4);
  498.     SPI2init();
  499.  STM_EVAL_LEDOn(LED5);
  500. mcp_isrinit();
  501.   STM_EVAL_LEDOn(LED6);
  502.     mcp_rxinit(&can3rx);
  503. LD1(1);
  504. LD2(1);
  505.  
  506.  
  507.    NVIC_Config();
  508. stby(0);
  509. mcpinit();
  510. mcp_rxinit(&can3rx);
  511.  
  512. mcp_write(0x2B,0x41);
  513.  
  514. GPIO_ResetBits(GPIOB, GPIO_Pin_12);
  515. SPI2_send(0x03);
  516. SPI2_send(0x2B);
  517. SPI2_send(0x00);
  518. SPI2_send(0x00);
  519. GPIO_SetBits(GPIOB, GPIO_Pin_12);
  520. /*
  521. can3tx.id=0x380;
  522. can3tx.len=8;
  523. can3tx.data[0]=1;
  524. can3tx.data[1]=2;
  525. can3tx.data[2]=3;
  526. can3tx.data[3]=4;
  527. can3tx.data[4]=5;
  528. can3tx.data[5]=6;
  529. can3tx.data[6]=7;
  530. can3tx.data[7]=8;
  531. */
  532. /*
  533.   buf380.id=0x380; //RxMessage.StdId;
  534.   buf380.len=8; //RxMessage.DLC;
  535.     buf380.data[0]=//RxMessage.Data[0];
  536.     buf380.data[1]=//RxMessage.Data[1];
  537.     buf380.data[2]=1;
  538.     buf380.data[3]=3;//RxMessage.Data[3];
  539.     buf380.data[4]=3;//RxMessage.Data[4];
  540.     buf380.data[5]=6;//RxMessage.Data[5];
  541.     buf380.data[6]=9;//RxMessage.Data[6];
  542.     buf380.data[7]=20;//RxMessage.Data[7];
  543. */
  544.  
  545. //mcp_tx(can3tx);
  546.  
  547. mcp_read(MCP_CANINTF);
  548. mcp_write(MCP_CANINTF, 0);
  549.  
  550. mcp_read(MCP_CANINTF);
  551.  
  552.  CAN_Config();
  553.  CAN2_Config();
  554. Init_RxMes(&RxMessage);
  555. Init_RxMes(&RxMessage2);
  556.     /*
  557.     TxMessage.Data[0] = 0x09;
  558.     TxMessage.Data[1] = 0x08;
  559.     TxMessage.Data[2] = 0x07;
  560.         TxMessage.Data[3] = 0x06;
  561.         TxMessage.Data[4] = 0x05;
  562.         */
  563. //CAN_Transmit(CAN2, &TxMessage);
  564. //CAN_Transmit(CAN1, &TxMessage);
  565.  
  566. out1(1);
  567. PWR_MainRegulatorModeConfig(PWR_Regulator_Voltage_Scale2);
  568. //PWR_EnterSTANDBYMode();
  569. // GPIO_ResetBits(GPIOB,GPIO_Pin_14);
  570. //SPI2_send(0xC0);
  571. // GPIO_SetBits(GPIOB, GPIO_Pin_14);
  572.    
  573. /* GPIO_ResetBits(GPIOB, GPIO_Pin_12);
  574. SPI2_send(0x02);
  575. SPI2_send(0x2B);
  576. SPI2_send(0x55);
  577. GPIO_SetBits(GPIOB, GPIO_Pin_12);
  578. */
  579.  
  580. //WWDG_ReloadCounter();
  581.  
  582. /* Infinite loop */
  583.   while (1)
  584.   {
  585.        
  586.        
  587.     }
  588. }
  589.  
  590.  
  591. void CAN1_RX0_IRQHandler(void)
  592. {
  593.     LD1(0);
  594. //  int send=0;
  595.     //LD5(1);
  596.         sleeptimeout=0;
  597.   CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
  598.     //STM_EVAL_LEDToggle(RxMessage.Data[0]);
  599.  
  600.    
  601.       //  val = mcp_read(MCP_CANINTF);
  602. //  if((mcp_bitread(MCP_TX0IF)) == 1)
  603. //  {      
  604. //              mcp_tx(can3tx);
  605. //   }
  606.         NVIC_DisableIRQ(CAN1_RX0_IRQn);
  607.     NVIC_DisableIRQ(CAN2_RX0_IRQn);    
  608. /*  can3tx1.id=RxMessage.StdId;
  609.     can3tx1.len=RxMessage.DLC;
  610.     can3tx1.data[0]=RxMessage.Data[0];
  611.     can3tx1.data[1]=RxMessage.Data[1];
  612.     can3tx1.data[2]=RxMessage.Data[2];
  613.     can3tx1.data[3]=RxMessage.Data[3];
  614.     can3tx1.data[4]=RxMessage.Data[4];
  615.     can3tx1.data[5]=RxMessage.Data[5];
  616.     can3tx1.data[6]=RxMessage.Data[6];
  617.     can3tx1.data[7]=RxMessage.Data[7];
  618. */
  619. //mcp_tx(can3tx1); 
  620.  
  621.  
  622. /*
  623. CANMSG  buf0b0, buf0b1, buf0b4, buf223, buf224, buf260, buf2c1,
  624. buf2c4, buf2c8, buf380, buf3a0, buf3b0, buf3b1, buf3b3, buf3b4,
  625. buf610, buf611, buf620, buf621, buf622, buf630, buf631, buf638,
  626. buf640, buf1c8, buf2c8;
  627. */
  628. //  LD5(0);
  629.     switch (RxMessage.StdId)
  630.     {
  631.         case 0x0b0:
  632.   buf0b0.id=RxMessage.StdId;
  633.   buf0b0.len=RxMessage.DLC;
  634.     buf0b0.data[0]=RxMessage.Data[0];
  635.     buf0b0.data[1]=RxMessage.Data[1];
  636.     buf0b0.data[2]=RxMessage.Data[2];
  637.     buf0b0.data[3]=RxMessage.Data[3];
  638.     buf0b0.data[4]=RxMessage.Data[4];
  639.     buf0b0.data[5]=RxMessage.Data[5];
  640.     buf0b0.data[6]=RxMessage.Data[6];
  641.     buf0b0.data[7]=RxMessage.Data[7];
  642.         break;
  643.        
  644.                 case 0x0b2:
  645.   buf0b2.id=RxMessage.StdId;
  646.   buf0b2.len=RxMessage.DLC;
  647.     buf0b2.data[0]=RxMessage.Data[0];
  648.     buf0b2.data[1]=RxMessage.Data[1];
  649.     buf0b2.data[2]=RxMessage.Data[2];
  650.     buf0b2.data[3]=RxMessage.Data[3];
  651.     buf0b2.data[4]=RxMessage.Data[4];
  652.     buf0b2.data[5]=RxMessage.Data[5];
  653.     buf0b2.data[6]=RxMessage.Data[6];
  654.     buf0b2.data[7]=RxMessage.Data[7];
  655.         break;
  656.                
  657.         case 0x0b4:
  658.   buf0b4.id=RxMessage.StdId;
  659.   buf0b4.len=RxMessage.DLC;
  660.     buf0b4.data[0]=RxMessage.Data[0];
  661.     buf0b4.data[1]=RxMessage.Data[1];
  662.     buf0b4.data[2]=RxMessage.Data[2];
  663.     buf0b4.data[3]=RxMessage.Data[3];
  664.     buf0b4.data[4]=RxMessage.Data[4];
  665.     buf0b4.data[5]=RxMessage.Data[5];
  666.     buf0b4.data[6]=RxMessage.Data[6];
  667.     buf0b4.data[7]=RxMessage.Data[7];
  668.         break;
  669.  
  670.         case 0x223:
  671.   buf223.id=RxMessage.StdId;
  672.   buf223.len=RxMessage.DLC;
  673.     buf223.data[0]=RxMessage.Data[0];
  674.     buf223.data[1]=RxMessage.Data[1];
  675.     buf223.data[2]=RxMessage.Data[2];
  676.     buf223.data[3]=RxMessage.Data[3];
  677.     buf223.data[4]=RxMessage.Data[4];
  678.     buf223.data[5]=RxMessage.Data[5];
  679.     buf223.data[6]=RxMessage.Data[6];
  680.     buf223.data[7]=RxMessage.Data[7];
  681.         break;
  682.        
  683.         case 0x224:
  684.   buf224.id=RxMessage.StdId;
  685.   buf224.len=RxMessage.DLC;
  686.     buf224.data[0]=RxMessage.Data[0];
  687.     buf224.data[1]=RxMessage.Data[1];
  688.     buf224.data[2]=RxMessage.Data[2];
  689.     buf224.data[3]=RxMessage.Data[3];
  690.     buf224.data[4]=RxMessage.Data[4];
  691.     buf224.data[5]=RxMessage.Data[5];
  692.     buf224.data[6]=RxMessage.Data[6];
  693.     buf224.data[7]=RxMessage.Data[7];
  694.         break;
  695.        
  696.         case 0x260:
  697.   buf260.id=RxMessage.StdId;
  698.   buf260.len=RxMessage.DLC;
  699.     buf260.data[0]=RxMessage.Data[0];
  700.     buf260.data[1]=RxMessage.Data[1];
  701.     buf260.data[2]=RxMessage.Data[2];
  702.     buf260.data[3]=RxMessage.Data[3];
  703.     buf260.data[4]=RxMessage.Data[4];
  704.     buf260.data[5]=RxMessage.Data[5];
  705.     buf260.data[6]=RxMessage.Data[6];
  706.     buf260.data[7]=RxMessage.Data[7];
  707.         break;
  708.        
  709.         case 0x380:
  710.   buf380.id=RxMessage.StdId;
  711.   buf380.len=RxMessage.DLC;
  712.     buf380.data[0]=RxMessage.Data[0];
  713.     buf380.data[1]=RxMessage.Data[1];
  714.     buf380.data[2]=RxMessage.Data[2];
  715.     buf380.data[3]=RxMessage.Data[3];
  716.     buf380.data[4]=RxMessage.Data[4];
  717.     buf380.data[5]=RxMessage.Data[5];
  718.     buf380.data[6]=RxMessage.Data[6];
  719.     buf380.data[7]=RxMessage.Data[7];
  720.         break;
  721.        
  722.                 case 0x38a:
  723.   buf38a.id=RxMessage.StdId;
  724.   buf38a.len=RxMessage.DLC;
  725.     buf38a.data[0]=RxMessage.Data[0];
  726.     buf38a.data[1]=RxMessage.Data[1];
  727.     buf38a.data[2]=RxMessage.Data[2];
  728.     buf38a.data[3]=RxMessage.Data[3];
  729.     buf38a.data[4]=RxMessage.Data[4];
  730.     buf38a.data[5]=RxMessage.Data[5];
  731.     buf38a.data[6]=RxMessage.Data[6];
  732.     buf38a.data[7]=RxMessage.Data[7];
  733.         break;
  734.        
  735.        
  736.         case 0x398:
  737.   buf398.id=RxMessage.StdId;
  738.   buf398.len=RxMessage.DLC;
  739.     buf398.data[0]=RxMessage.Data[0];
  740.     buf398.data[1]=RxMessage.Data[1];
  741.     buf398.data[2]=RxMessage.Data[2];
  742.     buf398.data[3]=RxMessage.Data[3];
  743.     buf398.data[4]=RxMessage.Data[4];
  744.     buf398.data[5]=RxMessage.Data[5];
  745.     buf398.data[6]=RxMessage.Data[6];
  746.     buf398.data[7]=RxMessage.Data[7];
  747.         break;
  748.        
  749.         case 0x3b3:
  750.   buf3b3.id=RxMessage.StdId;
  751.   buf3b3.len=RxMessage.DLC;
  752.     buf3b3.data[0]=RxMessage.Data[0];
  753.     buf3b3.data[1]=RxMessage.Data[1];
  754.     buf3b3.data[2]=RxMessage.Data[2];
  755.     buf3b3.data[3]=RxMessage.Data[3];
  756.     buf3b3.data[4]=RxMessage.Data[4];
  757.     buf3b3.data[5]=RxMessage.Data[5];
  758.     buf3b3.data[6]=RxMessage.Data[6];
  759.     buf3b3.data[7]=RxMessage.Data[7];
  760.         break;
  761.        
  762.     case 0x3b4:
  763.   buf3b4.id=RxMessage.StdId;
  764.   buf3b4.len=RxMessage.DLC;
  765.     buf3b4.data[0]=RxMessage.Data[0];
  766.     buf3b4.data[1]=RxMessage.Data[1];
  767.     buf3b4.data[2]=RxMessage.Data[2];
  768.     buf3b4.data[3]=RxMessage.Data[3];
  769.     buf3b4.data[4]=RxMessage.Data[4];
  770.     buf3b4.data[5]=RxMessage.Data[5];
  771.     buf3b4.data[6]=RxMessage.Data[6];
  772.     buf3b4.data[7]=RxMessage.Data[7];
  773.         break;
  774.        
  775.         case 0x610:
  776.   buf610.id=RxMessage.StdId;
  777.   buf610.len=RxMessage.DLC;
  778.     buf610.data[0]=RxMessage.Data[0];
  779.     buf610.data[1]=RxMessage.Data[1];
  780.     buf610.data[2]=RxMessage.Data[2];
  781.     buf610.data[3]=RxMessage.Data[3];
  782.     buf610.data[4]=RxMessage.Data[4];
  783.     buf610.data[5]=RxMessage.Data[5];
  784.     buf610.data[6]=RxMessage.Data[6];
  785.     buf610.data[7]=RxMessage.Data[7];
  786.         break;
  787.    
  788.         case 0x611:
  789.   buf611.id=RxMessage.StdId;
  790.   buf611.len=RxMessage.DLC;
  791.     buf611.data[0]=RxMessage.Data[0];
  792.     buf611.data[1]=RxMessage.Data[1];
  793.     buf611.data[2]=RxMessage.Data[2];
  794.     buf611.data[3]=RxMessage.Data[3];
  795.     buf611.data[4]=RxMessage.Data[4];
  796.     buf611.data[5]=RxMessage.Data[5];
  797.     buf611.data[6]=RxMessage.Data[6];
  798.     buf611.data[7]=RxMessage.Data[7];
  799.         break; 
  800.         case 0x620:
  801.   buf620.id=RxMessage.StdId;
  802.   buf620.len=RxMessage.DLC;
  803.     buf620.data[0]=RxMessage.Data[0];
  804.     buf620.data[1]=RxMessage.Data[1];
  805.     buf620.data[2]=RxMessage.Data[2];
  806.     buf620.data[3]=RxMessage.Data[3];
  807.     buf620.data[4]=RxMessage.Data[4];
  808.     buf620.data[5]=RxMessage.Data[5];
  809.     buf620.data[6]=RxMessage.Data[6];
  810.     buf620.data[7]=RxMessage.Data[7];
  811.         break;
  812.         case 0x621:
  813.   buf621.id=RxMessage.StdId;
  814.   buf621.len=RxMessage.DLC;
  815.     buf621.data[0]=RxMessage.Data[0];
  816.     buf621.data[1]=RxMessage.Data[1];
  817.     buf621.data[2]=RxMessage.Data[2];
  818.     buf621.data[3]=RxMessage.Data[3];
  819.     buf621.data[4]=RxMessage.Data[4];
  820.     buf621.data[5]=RxMessage.Data[5];
  821.     buf621.data[6]=RxMessage.Data[6];
  822.     buf621.data[7]=RxMessage.Data[7];
  823.         break;
  824.        
  825.         case 0x622:
  826.   buf622.id=RxMessage.StdId;
  827.   buf622.len=RxMessage.DLC;
  828.     buf622.data[0]=RxMessage.Data[0];
  829.     buf622.data[1]=RxMessage.Data[1];
  830.     buf622.data[2]=RxMessage.Data[2];
  831.     buf622.data[3]=RxMessage.Data[3];
  832.     buf622.data[4]=RxMessage.Data[4];
  833.     buf622.data[5]=RxMessage.Data[5];
  834.     buf622.data[6]=RxMessage.Data[6];
  835.     buf622.data[7]=RxMessage.Data[7];
  836.         break;
  837.                 case 0x630:
  838.   buf630.id=RxMessage.StdId;
  839.   buf630.len=RxMessage.DLC;
  840.     buf630.data[0]=RxMessage.Data[0];
  841.     buf630.data[1]=RxMessage.Data[1];
  842.     buf630.data[2]=RxMessage.Data[2];
  843.     buf630.data[3]=RxMessage.Data[3];
  844.     buf630.data[4]=RxMessage.Data[4];
  845.     buf630.data[5]=RxMessage.Data[5];
  846.     buf630.data[6]=RxMessage.Data[6];
  847.     buf630.data[7]=RxMessage.Data[7];
  848.         break;
  849.  
  850.         case 0x631:
  851.   buf631.id=RxMessage.StdId;
  852.   buf631.len=RxMessage.DLC;
  853.     buf631.data[0]=RxMessage.Data[0];
  854.     buf631.data[1]=RxMessage.Data[1];
  855.     buf631.data[2]=RxMessage.Data[2];
  856.     buf631.data[3]=RxMessage.Data[3];
  857.     buf631.data[4]=RxMessage.Data[4];
  858.     buf631.data[5]=RxMessage.Data[5];
  859.     buf631.data[6]=RxMessage.Data[6];
  860.     buf631.data[7]=RxMessage.Data[7];
  861.         break;
  862.        
  863.         case 0x638:
  864.   buf638.id=RxMessage.StdId;
  865.   buf638.len=RxMessage.DLC;
  866.     buf638.data[0]=RxMessage.Data[0];
  867.     buf638.data[1]=RxMessage.Data[1];
  868.     buf638.data[2]=RxMessage.Data[2];
  869.     buf638.data[3]=RxMessage.Data[3];
  870.     buf638.data[4]=RxMessage.Data[4];
  871.     buf638.data[5]=RxMessage.Data[5];
  872.     buf638.data[6]=RxMessage.Data[6];
  873.     buf638.data[7]=RxMessage.Data[7];
  874.         break;
  875.         case 0x640:
  876.   buf640.id=RxMessage.StdId;
  877.   buf640.len=RxMessage.DLC;
  878.     buf640.data[0]=RxMessage.Data[0];
  879.     buf640.data[1]=RxMessage.Data[1];
  880.     buf640.data[2]=RxMessage.Data[2];
  881.     buf640.data[3]=RxMessage.Data[3];
  882.     buf640.data[4]=RxMessage.Data[4];
  883.     buf640.data[5]=RxMessage.Data[5];
  884.     buf640.data[6]=RxMessage.Data[6];
  885.     buf640.data[7]=RxMessage.Data[7];
  886.         break;
  887.        
  888.         default:
  889.    
  890.         if (RxMessage.StdId>= 0x700)
  891.            
  892.     {          
  893.   obdbuf1.id=RxMessage.StdId;
  894.   obdbuf1.len=RxMessage.DLC;
  895.     obdbuf1.data[0]=RxMessage.Data[0];
  896.     obdbuf1.data[1]=RxMessage.Data[1];
  897.     obdbuf1.data[2]=RxMessage.Data[2];
  898.     obdbuf1.data[3]=RxMessage.Data[3];
  899.     obdbuf1.data[4]=RxMessage.Data[4];
  900.     obdbuf1.data[5]=RxMessage.Data[5];
  901.     obdbuf1.data[6]=RxMessage.Data[6];
  902.     obdbuf1.data[7]=RxMessage.Data[7];
  903.                 mcp_tx(obdbuf1);   
  904.             }
  905.        
  906.     break;
  907. }
  908.  
  909.     NVIC_EnableIRQ(CAN1_RX0_IRQn); 
  910.     NVIC_EnableIRQ(CAN2_RX0_IRQn);
  911. }
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918. void CAN2_RX1_IRQHandler(void)
  919. {
  920.     LD2(0);
  921.             sleeptimeout=0;
  922. //LD6(1);
  923.  
  924.     CAN_Receive(CAN2, CAN_FIFO1, &RxMessage2);
  925.  
  926.      //   if((mcp_bitread(MCP_TX0IF)) == 1)
  927.    // {
  928.            
  929.     //          mcp_tx(can3tx);
  930.   //  }
  931.     //mcp_tx(can3tx);
  932.  
  933.  
  934.     NVIC_DisableIRQ(CAN1_RX0_IRQn);
  935.     NVIC_DisableIRQ(CAN2_RX0_IRQn);
  936.         can3tx2.id=RxMessage2.StdId;
  937.     can3tx2.len=RxMessage2.DLC;
  938.     can3tx2.data[0]=RxMessage2.Data[0];
  939.     can3tx2.data[1]=RxMessage2.Data[1];
  940.     can3tx2.data[2]=RxMessage2.Data[2];
  941.     can3tx2.data[3]=RxMessage2.Data[3];
  942.     can3tx2.data[4]=RxMessage2.Data[4];
  943.     can3tx2.data[5]=RxMessage2.Data[5];
  944.     can3tx2.data[6]=RxMessage2.Data[6];
  945.     can3tx2.data[7]=RxMessage2.Data[7];
  946.     //  mcp_tx(can3tx2);
  947.    
  948.         NVIC_EnableIRQ(CAN1_RX0_IRQn);     
  949.         NVIC_EnableIRQ(CAN2_RX0_IRQn); 
  950.  
  951. //  LD6(0);
  952.    
  953.    
  954.    
  955.     switch (RxMessage2.StdId)
  956.     {
  957.                 case 0x1c4:
  958.   buf1c4.id=RxMessage2.StdId;
  959.   buf1c4.len=RxMessage2.DLC;
  960.     buf1c4.data[0]=RxMessage2.Data[0];
  961.     buf1c4.data[1]=RxMessage2.Data[1];
  962.     buf1c4.data[2]=RxMessage2.Data[2];
  963.     buf1c4.data[3]=RxMessage2.Data[3];
  964.     buf1c4.data[4]=RxMessage2.Data[4];
  965.     buf1c4.data[5]=RxMessage2.Data[5];
  966.     buf1c4.data[6]=RxMessage2.Data[6];
  967.     buf1c4.data[7]=RxMessage2.Data[7];
  968.         break;
  969.  
  970.                 case 0x1c7:
  971.   buf1c7.id=RxMessage2.StdId;
  972.   buf1c7.len=RxMessage2.DLC;
  973.     buf1c7.data[0]=RxMessage2.Data[0];
  974.     buf1c7.data[1]=RxMessage2.Data[1];
  975.     buf1c7.data[2]=RxMessage2.Data[2];
  976.     buf1c7.data[3]=RxMessage2.Data[3];
  977.     buf1c7.data[4]=RxMessage2.Data[4];
  978.     buf1c7.data[5]=RxMessage2.Data[5];
  979.     buf1c7.data[6]=RxMessage2.Data[6];
  980.     buf1c7.data[7]=RxMessage2.Data[7];
  981.         break;     
  982.  
  983.                
  984.                 case 0x1c8:
  985.   buf1c8.id=RxMessage2.StdId;
  986.   buf1c8.len=RxMessage2.DLC;
  987.     buf1c8.data[0]=RxMessage2.Data[0];
  988.     buf1c8.data[1]=RxMessage2.Data[1];
  989.     buf1c8.data[2]=RxMessage2.Data[2];
  990.     buf1c8.data[3]=RxMessage2.Data[3];
  991.     buf1c8.data[4]=RxMessage2.Data[4];
  992.     buf1c8.data[5]=RxMessage2.Data[5];
  993.     buf1c8.data[6]=RxMessage2.Data[6];
  994.     buf1c8.data[7]=RxMessage2.Data[7];
  995.         break;     
  996.  
  997.                 case 0x2c8:
  998.   buf2c8.id=RxMessage2.StdId;
  999.   buf2c8.len=RxMessage2.DLC;
  1000.     buf2c8.data[0]=RxMessage2.Data[0];
  1001.     buf2c8.data[1]=RxMessage2.Data[1];
  1002.     buf2c8.data[2]=RxMessage2.Data[2];
  1003.     buf2c8.data[3]=RxMessage2.Data[3];
  1004.     buf2c8.data[4]=RxMessage2.Data[4];
  1005.     buf2c8.data[5]=RxMessage2.Data[5];
  1006.     buf2c8.data[6]=RxMessage2.Data[6];
  1007.     buf2c8.data[7]=RxMessage2.Data[7];
  1008.         break;             
  1009.    
  1010.                                                    
  1011.                                                     default:
  1012.                                                         return;
  1013.                                                 }
  1014.                                                
  1015.                                                
  1016.                                            
  1017.                                                        
  1018.                                                
  1019.                                                
  1020.                                                
  1021.                                                
  1022.                                             }
  1023.    
  1024.                                                
  1025.  
  1026.  
  1027.  
  1028.  
  1029. void can3rxhandler(void)
  1030. {
  1031.     //
  1032.    
  1033.    
  1034.     //  CAN_Transmit(CAN1, &can3rx);
  1035.   can3rx.id=TxMessage3.StdId;
  1036.   can3rx.len=TxMessage3.DLC;
  1037.     can3rx.data[0]=TxMessage3.Data[0];
  1038.     can3rx.data[1]=TxMessage3.Data[1];
  1039.     can3rx.data[2]=TxMessage3.Data[2];
  1040.     can3rx.data[3]=TxMessage3.Data[3];
  1041.     can3rx.data[4]=TxMessage3.Data[4];
  1042.     can3rx.data[5]=TxMessage3.Data[5];
  1043.     can3rx.data[6]=TxMessage3.Data[6];
  1044.     can3rx.data[7]=TxMessage3.Data[7];     
  1045.         CAN_Transmit(CAN1, &TxMessage3);
  1046.         //mcp_tx(can3rx);
  1047.    
  1048.     //mcp_tx(can3rx);
  1049. }
  1050.  
  1051. void deepsleep(void)
  1052. {
  1053.     out1(0);
  1054.     out2(0);
  1055.   mcp_sleep();
  1056.     stby(1);
  1057.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
  1058.     PWR_WakeUpPinCmd(ENABLE);
  1059.     PWR_EnterSTANDBYMode();
  1060. }
  1061.  
  1062.  
  1063. void TIM2_IRQHandler(void){
  1064.   TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  1065.   if (sleeptimeout >= 4)
  1066.     {
  1067.     STM_EVAL_LEDOff(LED3);
  1068.   STM_EVAL_LEDOff(LED4);
  1069.   STM_EVAL_LEDOff(LED5);
  1070.   STM_EVAL_LEDOff(LED6);
  1071.         sleeptimeout=0;
  1072.     deepsleep();
  1073.     }
  1074.     else if (sleeptimeout<4)
  1075.     {
  1076.         if (sleeptimeout==3)
  1077. {  
  1078.     STM_EVAL_LEDOff(LED3);
  1079.   STM_EVAL_LEDOff(LED4);
  1080.   STM_EVAL_LEDOff(LED5);
  1081.   STM_EVAL_LEDOn(LED6);
  1082. }
  1083.  
  1084.         if (sleeptimeout==2)
  1085. {
  1086.     STM_EVAL_LEDOff(LED3);
  1087.   STM_EVAL_LEDOff(LED4);
  1088.   STM_EVAL_LEDOn(LED5);
  1089.   STM_EVAL_LEDOn(LED6);
  1090. }
  1091.    
  1092.             if (sleeptimeout==1)
  1093. {
  1094.     STM_EVAL_LEDOn(LED3);
  1095.   STM_EVAL_LEDOff(LED4);
  1096.   STM_EVAL_LEDOn(LED5);
  1097.   STM_EVAL_LEDOn(LED6);
  1098. }
  1099.    
  1100.             if (sleeptimeout==0)
  1101.     {
  1102.     STM_EVAL_LEDOn(LED3);
  1103.   STM_EVAL_LEDOn(LED4);
  1104.   STM_EVAL_LEDOn(LED5);
  1105.   STM_EVAL_LEDOn(LED6);
  1106.     }
  1107.     sleeptimeout++;
  1108.     }
  1109. }
  1110.  
  1111. void TIM3_IRQHandler(void){
  1112.     /*buf0b0, buf0b2, buf0b4, buf1c4, buf1c7, buf1c8, buf2c8,
  1113.        buf223, buf224, buf260, buf2c1, buf2c4, buf380, buf38a,
  1114.              buf3b3, buf3b4, buf610, buf611, buf620, buf621, buf622,
  1115.              buf630, buf631, buf638, buf640, buf1c8, buf2c8, buf398*/
  1116.   TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  1117.  
  1118.     switch(time)
  1119.     {
  1120.         case 0:
  1121.             mcp_tx(obdbuf1);
  1122.         break;
  1123.        
  1124.         case 1:
  1125.             mcp_tx(buf0b0);
  1126.         break;
  1127.        
  1128.        
  1129.         case 2:
  1130.             mcp_tx(buf0b2);
  1131.         break;
  1132.        
  1133.        
  1134.         case 3:
  1135.             mcp_tx(buf0b4);
  1136.         break;
  1137.        
  1138.         case 4:
  1139.             mcp_tx(buf1c4);
  1140.         break;
  1141.        
  1142.         case 5:
  1143.             mcp_tx(buf1c7);
  1144.         break;
  1145.        
  1146.         case 6:
  1147.             mcp_tx(buf1c8);
  1148.         break;     
  1149.        
  1150.         case 7:
  1151.             mcp_tx(buf2c8);
  1152.         break;
  1153.        
  1154.         case 8:
  1155.             mcp_tx(buf223);
  1156.         break;
  1157.  
  1158.         case 9:
  1159.             mcp_tx(buf224);
  1160.         break;
  1161.  
  1162.         case 10:
  1163.             mcp_tx(buf260);
  1164.         break;
  1165.  
  1166.         case 11:
  1167.             mcp_tx(buf2c1);
  1168.         break;
  1169.  
  1170.         case 12:
  1171.             mcp_tx(buf2c4);
  1172.         break;
  1173.  
  1174.         case 13:
  1175.             mcp_tx(buf380);
  1176.         break;
  1177.  
  1178.         case 14:
  1179.             mcp_tx(buf38a);
  1180.         break;
  1181.        
  1182.         case 15:
  1183.             mcp_tx(buf398);
  1184.         break;
  1185.        
  1186.         case 16:
  1187.             mcp_tx(buf3b3);
  1188.         break;
  1189.  
  1190.         case 17:
  1191.             mcp_tx(buf3b4);
  1192.         break;
  1193.  
  1194.         case 18:
  1195.             mcp_tx(buf610);
  1196.         break;
  1197.  
  1198.         case 19:
  1199.             mcp_tx(buf611);
  1200.         break;
  1201.  
  1202.         case 20:
  1203.             mcp_tx(buf620);
  1204.         break;
  1205.        
  1206.         case 21:
  1207.             mcp_tx(buf621);
  1208.         break;
  1209.        
  1210.         case 22:
  1211.             mcp_tx(buf622);
  1212.         break;
  1213.        
  1214.         case 23:
  1215.             mcp_tx(buf630);
  1216.         break;
  1217.        
  1218.         case 24:
  1219.             mcp_tx(buf631);
  1220.         break;
  1221.  
  1222.         case 25:
  1223.             mcp_tx(buf638);
  1224.         break;
  1225.                
  1226.         case 26:
  1227.             mcp_tx(buf640);
  1228.         break;
  1229.                
  1230.  
  1231.        
  1232.                    
  1233.        
  1234.        
  1235.         default:
  1236.             break;
  1237.     }      
  1238.    
  1239.     if (time == 26)
  1240.     {
  1241.     LD4(0);
  1242.     LD5(0);
  1243.         time=0;
  1244.     }
  1245.     else if (time < 30)
  1246.     {
  1247.         if (time==0)
  1248. {  
  1249.     LD4(1);
  1250.     LD5(0);
  1251.    
  1252. }
  1253.  
  1254.         if (time==13)
  1255. {
  1256.     LD5(1);
  1257.   //buf380.data[7]++;
  1258. }
  1259.  
  1260.  
  1261.  
  1262.  
  1263. time++;
  1264.    
  1265.     }
  1266. }
  1267.  
  1268.  
  1269. void WWDG_IRQHandler(void)
  1270. {
  1271.   /* Update WWDG counter */
  1272.   //WWDG_SetCounter(0x7F);
  1273.  
  1274.   /* Clear EWI flag */
  1275.   WWDG_ClearFlag();  
  1276. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement