1 | /* FUNCTION ************************************/
|
2 | void SPI_Init (SPI1_Mode_t mode)
|
3 | /*
|
4 | * SPECIFICATION: Init SPI1 STM32F103
|
5 | ***********************************************/
|
6 | {
|
7 | GPIO_InitTypeDef GPIO_InitStruct;
|
8 | SPI_InitTypeDef SPI_InitStruct;
|
9 |
|
10 | // Initialize SPI
|
11 | RCC_APB2PeriphClockCmd (RCC_APB2Periph_SPI1, ENABLE);
|
12 |
|
13 | RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, ENABLE);
|
14 | RCC_APB2PeriphClockCmd (RCC_APB2Periph_AFIO, ENABLE);
|
15 |
|
16 | SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
17 | SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
|
18 | SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
|
19 | SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
|
20 | SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
|
21 | SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
|
22 | SPI_InitStruct.SPI_CRCPolynomial = 7;
|
23 |
|
24 | if (mode == SPI_MODE_0)
|
25 | {
|
26 | SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
|
27 | SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
|
28 | }
|
29 | else if (mode == SPI_MODE_1)
|
30 | {
|
31 | SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
|
32 | SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
|
33 | }
|
34 | else if (mode == SPI_MODE_2)
|
35 | {
|
36 | SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
|
37 | SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
|
38 | }
|
39 | else if (mode == SPI_MODE_3)
|
40 | {
|
41 | SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
|
42 | SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
|
43 | }
|
44 | else
|
45 | {
|
46 | SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
|
47 | SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
|
48 | }
|
49 |
|
50 | SPI_Init (SPI1, &SPI_InitStruct);
|
51 |
|
52 | /* Configure SPI1 pins: SCK and MOSI with default alternate
|
53 | function (not remapped) push-pull */
|
54 | GPIO_InitStruct.GPIO_Pin = SPI_MOSI_PIN | SPI_SCLK_PIN;
|
55 | GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
|
56 | GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
57 | GPIO_Init (GPIOA, &GPIO_InitStruct);
|
58 |
|
59 | /* Configure MISO as Input with internal pull-up */
|
60 | GPIO_InitStruct.GPIO_Pin = SPI_MISO_PIN;
|
61 | GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
|
62 | GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
63 | GPIO_Init (GPIOA, &GPIO_InitStruct);
|
64 |
|
65 | SPI_Cmd (SPI1, ENABLE);
|
66 |
|
67 | } /* --- SPI_Init --- */
|