1 | #include "stm32f10x_conf.h"
|
2 | #include "stm32f10x_rcc.h"
|
3 | #include "stm32f10x_gpio.h"
|
4 | #include "stm32f10x_spi.h"
|
5 | #include "stm32f10x_can.h"
|
6 | #include "stm32f10x_dma.h"
|
7 | #include "misc.h"
|
8 |
|
9 |
|
10 | int main(void)
|
11 | {
|
12 | GPIO_InitTypeDef GPIO_InitStructure;
|
13 | CAN_InitTypeDef CAN_InitStructure;
|
14 | NVIC_InitTypeDef NVIC_InitStructure;
|
15 |
|
16 |
|
17 | SystemInit();
|
18 |
|
19 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
|
20 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
|
21 |
|
22 |
|
23 | // CAN RX
|
24 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
|
25 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
26 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
27 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
28 |
|
29 | // CAN TX
|
30 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
|
31 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
32 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
33 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
34 |
|
35 | GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
|
36 |
|
37 |
|
38 |
|
39 | // CAN
|
40 | CAN_InitStructure.CAN_Prescaler = 4;
|
41 | CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
|
42 | CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;
|
43 | CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
|
44 | CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
|
45 | CAN_InitStructure.CAN_TTCM = DISABLE;
|
46 | CAN_InitStructure.CAN_ABOM = DISABLE;
|
47 | CAN_InitStructure.CAN_AWUM = DISABLE;
|
48 | CAN_InitStructure.CAN_NART = ENABLE;
|
49 | CAN_InitStructure.CAN_RFLM = DISABLE;
|
50 | CAN_InitStructure.CAN_TXFP = DISABLE;
|
51 | CAN_Init(CAN1, &CAN_InitStructure);
|
52 |
|
53 | while(1)
|
54 | {
|
55 | CanTxMsg canTxMessage;
|
56 |
|
57 | canTxMessage.StdId = 0x12;
|
58 | canTxMessage.ExtId = 0;
|
59 | canTxMessage.RTR = CAN_RTR_DATA;
|
60 | canTxMessage.IDE = CAN_ID_STD;
|
61 | canTxMessage.DLC = 8;
|
62 |
|
63 | canTxMessage.Data[0] = 0x34;
|
64 | canTxMessage.Data[1] = 0x35;
|
65 | canTxMessage.Data[2] = 0x36;
|
66 | canTxMessage.Data[3] = 0x37;
|
67 | canTxMessage.Data[4] = 0x38;
|
68 | canTxMessage.Data[5] = 0x36;
|
69 | canTxMessage.Data[6] = 0x37;
|
70 | canTxMessage.Data[7] = 0x38;
|
71 |
|
72 | while(!(CAN1 -> TSR & CAN_TSR_TME0 || CAN1 -> TSR & CAN_TSR_TME1 || CAN1 -> TSR & CAN_TSR_TME2 ));
|
73 |
|
74 | CAN_Transmit(CAN1, &canTxMessage);
|
75 |
|
76 |
|
77 | }
|
78 | }
|