123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * @file spi.c
- * @brief This file provides code for the configuration
- * of the SPI instances.
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2024 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file
- * in the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- *
- ******************************************************************************
- */
- /* USER CODE END Header */
- /* Includes ------------------------------------------------------------------*/
- #include "spi.h"
- /* USER CODE BEGIN 0 */
- /* USER CODE END 0 */
- SPI_HandleTypeDef hspi1;
- /* SPI1 init function */
- void MX_SPI1_Init(void)
- {
- /* USER CODE BEGIN SPI1_Init 0 */
- /* USER CODE END SPI1_Init 0 */
- /* USER CODE BEGIN SPI1_Init 1 */
- /* USER CODE END SPI1_Init 1 */
- hspi1.Instance = SPI1;
- hspi1.Init.Mode = SPI_MODE_MASTER;
- hspi1.Init.Direction = SPI_DIRECTION_2LINES;
- hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
- hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
- hspi1.Init.NSS = SPI_NSS_SOFT;
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
- hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi1.Init.CRCPolynomial = 10;
- if (HAL_SPI_Init(&hspi1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN SPI1_Init 2 */
- /* USER CODE END SPI1_Init 2 */
- }
- void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(spiHandle->Instance==SPI1)
- {
- /* USER CODE BEGIN SPI1_MspInit 0 */
- /* USER CODE END SPI1_MspInit 0 */
- /* SPI1 clock enable */
- __HAL_RCC_SPI1_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**SPI1 GPIO Configuration
- PA5 ------> SPI1_SCK
- PA6 ------> SPI1_MISO
- PA7 ------> SPI1_MOSI
- */
- GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = GPIO_PIN_6;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- /* USER CODE BEGIN SPI1_MspInit 1 */
- /* USER CODE END SPI1_MspInit 1 */
- }
- }
- void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
- {
- if(spiHandle->Instance==SPI1)
- {
- /* USER CODE BEGIN SPI1_MspDeInit 0 */
- /* USER CODE END SPI1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_SPI1_CLK_DISABLE();
- /**SPI1 GPIO Configuration
- PA5 ------> SPI1_SCK
- PA6 ------> SPI1_MISO
- PA7 ------> SPI1_MOSI
- */
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
- /* USER CODE BEGIN SPI1_MspDeInit 1 */
- /* USER CODE END SPI1_MspDeInit 1 */
- }
- }
- /* USER CODE BEGIN 1 */
- /**
- * @brief SPI速度设置函数
- * @note SPI时钟选择来自APB1,即PCLK1,为36Mhz
- * SPI速度 = PCLK1 / 2^(speed + 1)
- * @param speed:SPI时钟分频系数??μ?μêy
- 取值为:SPI_BAUDRATEPRESCALER_2~SPI_BAUDRATEPRESCALER_2 256
- * @retval ?T
- */
- void spi_set_speed(uint8_t speed)
- {
- assert_param(IS_SPI_BAUDRATE_PRESCALER(speed));
- __HAL_SPI_DISABLE(&hspi1);
- hspi1.Instance->CR1 &= 0XFFC7;
- hspi1.Instance->CR1 |= speed << 3;
- __HAL_SPI_ENABLE(&hspi1);
- }
- /**
- * @brief SPI读写一个字节的数据
- * @param txdata: 要发送的数据1字节
- * @retval 接收到的数据1字节
- */
- uint8_t spi_read_write_byte(uint8_t txdata)
- {
- uint8_t rxdata;
- HAL_SPI_TransmitReceive(&hspi1, &txdata, &rxdata, 1, 1000);
- return rxdata; /* ·μ??ê?μ?μ?êy?Y */
- }
- /* USER CODE END 1 */
|