1 | __HAL_RCC_SPI1_CLK_ENABLE();
|
2 | __HAL_RCC_I2C1_CLK_DISABLE();
|
3 |
|
4 | __HAL_RCC_GPIOA_CLK_ENABLE();
|
5 | __HAL_RCC_GPIOB_CLK_ENABLE();
|
6 | __HAL_RCC_GPIOD_CLK_ENABLE();
|
7 |
|
8 | RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
|
9 | PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI1;
|
10 | PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
|
11 | if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
|
12 | std::cout << "[Error] PeriphCLK failed!\r\n";
|
13 | }
|
14 |
|
15 | GPIO_InitTypeDef GPIO_InitStruct = {0};
|
16 |
|
17 | GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
|
18 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
19 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
20 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
21 | GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
22 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
23 |
|
24 | GPIO_InitStruct.Pin = GPIO_PIN_5;
|
25 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
26 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
27 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
28 | GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
29 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
30 |
|
31 | /* Chip Select */
|
32 | GPIO_InitStruct = {0};
|
33 | GPIO_InitStruct.Pin = GPIO_PIN_14;
|
34 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
35 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
36 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
37 | GPIO_InitStruct.Alternate = 0x0;
|
38 | HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
39 |
|
40 | HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
|
41 |
|
42 | spi_handle.Instance = SPI1;
|
43 | spi_handle.Init.Mode = SPI_MODE_MASTER;
|
44 | spi_handle.Init.Direction = SPI_DIRECTION_2LINES;
|
45 | spi_handle.Init.DataSize = SPI_DATASIZE_8BIT;
|
46 | spi_handle.Init.CLKPolarity = SPI_POLARITY_LOW;
|
47 | spi_handle.Init.CLKPhase = SPI_PHASE_2EDGE;
|
48 | spi_handle.Init.NSS = SPI_NSS_SOFT;
|
49 | spi_handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
|
50 | spi_handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
51 | spi_handle.Init.TIMode = SPI_TIMODE_DISABLE;
|
52 | spi_handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
53 | spi_handle.Init.CRCPolynomial = 7;
|
54 | spi_handle.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
|
55 | spi_handle.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
|
56 | spi_handle.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
|
57 | spi_handle.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
|
58 | spi_handle.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
|
59 | spi_handle.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
|
60 | spi_handle.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
|
61 | spi_handle.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
|
62 | spi_handle.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
|
63 | spi_handle.Init.IOSwap = SPI_IO_SWAP_DISABLE;
|
64 |
|
65 | const HAL_StatusTypeDef ret = HAL_SPI_Init(&spi_handle);
|
66 |
|
67 | if(ret != HAL_OK) {
|
68 | std::cout << "[Error] HAL_SPI_Init failed!\r\n";
|
69 | exit(-1);
|
70 | }
|