Adicionados drivers de SPI e GPIO
This commit is contained in:
34
.mxproject
34
.mxproject
File diff suppressed because one or more lines are too long
52
Core/Inc/dma.h
Normal file
52
Core/Inc/dma.h
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file dma.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the dma.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @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 */
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __DMA_H__
|
||||||
|
#define __DMA_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
/* DMA memory to memory transfer handles -------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
|
void MX_DMA_Init(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __DMA_H__ */
|
||||||
|
|
||||||
49
Core/Inc/gpio.h
Normal file
49
Core/Inc/gpio.h
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file gpio.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the gpio.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @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 */
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __GPIO_H__
|
||||||
|
#define __GPIO_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
|
void MX_GPIO_Init(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /*__ GPIO_H__ */
|
||||||
|
|
||||||
52
Core/Inc/i2c.h
Normal file
52
Core/Inc/i2c.h
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file i2c.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the i2c.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @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 */
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __I2C_H__
|
||||||
|
#define __I2C_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
extern I2C_HandleTypeDef hi2c1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
|
void MX_I2C1_Init(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __I2C_H__ */
|
||||||
|
|
||||||
52
Core/Inc/i2s.h
Normal file
52
Core/Inc/i2s.h
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file i2s.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the i2s.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @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 */
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __I2S_H__
|
||||||
|
#define __I2S_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
extern I2S_HandleTypeDef hi2s3;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
|
void MX_I2S3_Init(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __I2S_H__ */
|
||||||
|
|
||||||
55
Core/Inc/spi.h
Normal file
55
Core/Inc/spi.h
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file spi.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the spi.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @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 */
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __SPI_H__
|
||||||
|
#define __SPI_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
extern SPI_HandleTypeDef hspi1;
|
||||||
|
|
||||||
|
extern SPI_HandleTypeDef hspi2;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
|
void MX_SPI1_Init(void);
|
||||||
|
void MX_SPI2_Init(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __SPI_H__ */
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */
|
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */
|
||||||
#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */
|
#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */
|
||||||
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */
|
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */
|
||||||
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */
|
#define USE_HAL_SPI_REGISTER_CALLBACKS 1U /* SPI register callback enabled */
|
||||||
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */
|
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */
|
||||||
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */
|
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */
|
||||||
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */
|
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */
|
||||||
|
|||||||
27
Core/Src/Components/BinLeds.cpp
Normal file
27
Core/Src/Components/BinLeds.cpp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* BinLeds.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "BinLeds.hpp"
|
||||||
|
|
||||||
|
BinLeds::BinLeds(GPIO_Pin* ledArray[], uint32_t numLeds) :
|
||||||
|
ledArray(ledArray), numLeds(numLeds) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BinLeds::~BinLeds() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t BinLeds::init() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BinLeds::set(uint32_t value) {
|
||||||
|
for(uint32_t i = 0; i<numLeds; i++){
|
||||||
|
ledArray[i]->write((value>>i)&1);
|
||||||
|
}
|
||||||
|
}
|
||||||
25
Core/Src/Components/BinLeds.hpp
Normal file
25
Core/Src/Components/BinLeds.hpp
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* BinLeds.hpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_COMPONENTS_BINLEDS_HPP_
|
||||||
|
#define SRC_COMPONENTS_BINLEDS_HPP_
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include "GPIO_Pin.hpp"
|
||||||
|
|
||||||
|
class BinLeds {
|
||||||
|
public:
|
||||||
|
BinLeds(GPIO_Pin* ledArray[], uint32_t numLeds);
|
||||||
|
virtual ~BinLeds();
|
||||||
|
int32_t init();
|
||||||
|
void set(uint32_t value);
|
||||||
|
private:
|
||||||
|
GPIO_Pin** ledArray;
|
||||||
|
uint32_t numLeds;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SRC_COMPONENTS_BINLEDS_HPP_ */
|
||||||
23
Core/Src/Components/GPIO_Pin.hpp
Normal file
23
Core/Src/Components/GPIO_Pin.hpp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* GPIO_Pin.hpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_COMPONENTS_GPIO_PIN_HPP_
|
||||||
|
#define SRC_COMPONENTS_GPIO_PIN_HPP_
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
class GPIO_Pin {
|
||||||
|
public:
|
||||||
|
virtual int32_t init() = 0;
|
||||||
|
virtual int32_t read(uint8_t* state) = 0;
|
||||||
|
virtual int32_t write(uint8_t state) = 0;
|
||||||
|
virtual int32_t set() = 0;
|
||||||
|
virtual int32_t reset() = 0;
|
||||||
|
virtual int32_t toggle() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SRC_COMPONENTS_GPIO_PIN_HPP_ */
|
||||||
45
Core/Src/Components/GPIO_Pin_STM32.cpp
Normal file
45
Core/Src/Components/GPIO_Pin_STM32.cpp
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* GPIO_Pin_STM32.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "GPIO_Pin_STM32.hpp"
|
||||||
|
|
||||||
|
GPIO_Pin_STM32::GPIO_Pin_STM32(GPIO_TypeDef *gpio_port, uint16_t gpio_pin) :
|
||||||
|
gpio_port(gpio_port), gpio_pin(gpio_pin){
|
||||||
|
}
|
||||||
|
|
||||||
|
GPIO_Pin_STM32::~GPIO_Pin_STM32() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t GPIO_Pin_STM32::init() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t GPIO_Pin_STM32::read(uint8_t* state) {
|
||||||
|
*state = (uint8_t)HAL_GPIO_ReadPin(gpio_port, gpio_pin);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t GPIO_Pin_STM32::write(uint8_t state) {
|
||||||
|
HAL_GPIO_WritePin(gpio_port, gpio_pin, (GPIO_PinState)state);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t GPIO_Pin_STM32::set() {
|
||||||
|
HAL_GPIO_WritePin(gpio_port, gpio_pin, GPIO_PIN_SET);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t GPIO_Pin_STM32::reset() {
|
||||||
|
HAL_GPIO_WritePin(gpio_port, gpio_pin, GPIO_PIN_RESET);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t GPIO_Pin_STM32::toggle() {
|
||||||
|
HAL_GPIO_TogglePin(gpio_port, gpio_pin);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
29
Core/Src/Components/GPIO_Pin_STM32.hpp
Normal file
29
Core/Src/Components/GPIO_Pin_STM32.hpp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* GPIO_Pin_STM32.hpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_COMPONENTS_GPIO_PIN_STM32_HPP_
|
||||||
|
#define SRC_COMPONENTS_GPIO_PIN_STM32_HPP_
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
#include "GPIO_Pin.hpp"
|
||||||
|
|
||||||
|
class GPIO_Pin_STM32 : public GPIO_Pin {
|
||||||
|
public:
|
||||||
|
GPIO_Pin_STM32(GPIO_TypeDef* gpio_port, uint16_t gpio_pin);
|
||||||
|
virtual ~GPIO_Pin_STM32();
|
||||||
|
int32_t init();
|
||||||
|
int32_t read(uint8_t* state);
|
||||||
|
int32_t write(uint8_t state);
|
||||||
|
int32_t set();
|
||||||
|
int32_t reset();
|
||||||
|
int32_t toggle();
|
||||||
|
private:
|
||||||
|
GPIO_TypeDef* gpio_port;
|
||||||
|
uint16_t gpio_pin;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SRC_COMPONENTS_GPIO_PIN_STM32_HPP_ */
|
||||||
23
Core/Src/Components/SPI_Peripheral.hpp
Normal file
23
Core/Src/Components/SPI_Peripheral.hpp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* SPI_Peripheral.hpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_COMPONENTS_SPI_PERIPHERAL_HPP_
|
||||||
|
#define SRC_COMPONENTS_SPI_PERIPHERAL_HPP_
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
class SPI_Peripheral {
|
||||||
|
public:
|
||||||
|
virtual int32_t init() = 0;
|
||||||
|
virtual int32_t take(uint32_t timeout) = 0;
|
||||||
|
virtual int32_t give() = 0;
|
||||||
|
virtual int32_t transmit(uint8_t* buffer, uint32_t length) = 0;
|
||||||
|
virtual int32_t receive(uint8_t* buffer, uint32_t length) = 0;
|
||||||
|
virtual int32_t trx(uint8_t* txBuffer, uint8_t* rxBuffer, uint32_t length) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SRC_COMPONENTS_SPI_PERIPHERAL_HPP_ */
|
||||||
250
Core/Src/Components/SPI_Peripheral_STM32.cpp
Normal file
250
Core/Src/Components/SPI_Peripheral_STM32.cpp
Normal file
@@ -0,0 +1,250 @@
|
|||||||
|
/*
|
||||||
|
* SPI_Peripheral_STM32.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SPI_Peripheral_STM32.hpp"
|
||||||
|
|
||||||
|
SPI_Peripheral_STM32* SPI_Peripheral_STM32::objects[];
|
||||||
|
|
||||||
|
SPI_Peripheral_STM32::SPI_Peripheral_STM32(SPI_HandleTypeDef* hspi, uint32_t timeout) :
|
||||||
|
hspi(hspi), timeout(timeout) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SPI_Peripheral_STM32::~SPI_Peripheral_STM32() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
int32_t SPI_Peripheral_STM32::init(){
|
||||||
|
// TODO Implement self test routine
|
||||||
|
hSpiMutex = xSemaphoreCreateMutexStatic(&spiMutexBuffer);
|
||||||
|
vQueueAddToRegistry(hSpiMutex, "spiMutex");
|
||||||
|
hSpiEventGroup = xEventGroupCreateStatic(&spiEventGroupBuffer);
|
||||||
|
HAL_SPI_RegisterCallback(hspi, HAL_SPI_TX_COMPLETE_CB_ID, transmitCallbackStatic);
|
||||||
|
HAL_SPI_RegisterCallback(hspi, HAL_SPI_RX_COMPLETE_CB_ID, receiveCallbackStatic);
|
||||||
|
HAL_SPI_RegisterCallback(hspi, HAL_SPI_TX_RX_COMPLETE_CB_ID, trxCallbackStatic);
|
||||||
|
#ifdef SPI1
|
||||||
|
if(hspi->Instance == SPI1){
|
||||||
|
objects[0] = this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI2
|
||||||
|
if(hspi->Instance == SPI2){
|
||||||
|
objects[1] = this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI3
|
||||||
|
if(hspi->Instance == SPI3){
|
||||||
|
objects[2] = this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI4
|
||||||
|
if(hspi->Instance == SPI4){
|
||||||
|
objects[3] = this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI5
|
||||||
|
if(hspi->Instance == SPI5){
|
||||||
|
objects[4] = this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t SPI_Peripheral_STM32::take(uint32_t timeout) {
|
||||||
|
if(xSemaphoreTake(hSpiMutex, timeout)){
|
||||||
|
// Took
|
||||||
|
taskLocking = xTaskGetCurrentTaskHandle();
|
||||||
|
return 0;
|
||||||
|
}else{
|
||||||
|
// Timeout
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t SPI_Peripheral_STM32::give() {
|
||||||
|
taskLocking = nullptr;
|
||||||
|
xSemaphoreGive(hSpiMutex);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t SPI_Peripheral_STM32::transmit(uint8_t *buffer, uint32_t length) {
|
||||||
|
if (taskLocking != xTaskGetCurrentTaskHandle()){
|
||||||
|
// Not taken
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
HAL_SPI_Transmit_DMA(hspi, buffer, length);
|
||||||
|
EventBits_t bits = xEventGroupWaitBits(hSpiEventGroup, (EventBits_t)Event::TX_CPLT, true, true, timeout);
|
||||||
|
if(!bits){
|
||||||
|
// Timeout
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t SPI_Peripheral_STM32::receive(uint8_t *buffer, uint32_t length) {
|
||||||
|
if (taskLocking != xTaskGetCurrentTaskHandle()){
|
||||||
|
// Not taken
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
HAL_SPI_Receive_DMA(hspi, buffer, length);
|
||||||
|
EventBits_t bits = xEventGroupWaitBits(hSpiEventGroup, (EventBits_t)Event::RX_CPLT, true, true, timeout);
|
||||||
|
if(!bits){
|
||||||
|
// Timeout
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t SPI_Peripheral_STM32::trx(uint8_t *txBuffer, uint8_t *rxBuffer, uint32_t length) {
|
||||||
|
if (taskLocking != xTaskGetCurrentTaskHandle()){
|
||||||
|
// Not taken
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
HAL_SPI_TransmitReceive_DMA(hspi, txBuffer, rxBuffer, length);
|
||||||
|
EventBits_t bits = xEventGroupWaitBits(hSpiEventGroup, (EventBits_t)Event::TRX_CPLT, true, true, timeout);
|
||||||
|
if(!bits){
|
||||||
|
// Timeout
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private methods
|
||||||
|
|
||||||
|
void SPI_Peripheral_STM32::transmitCallbackStatic(SPI_HandleTypeDef *_hspi) {
|
||||||
|
#ifdef SPI1
|
||||||
|
if(_hspi->Instance == SPI1){
|
||||||
|
if(objects[0]){
|
||||||
|
objects[0]->transmitCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI2
|
||||||
|
if(_hspi->Instance == SPI2){
|
||||||
|
if(objects[1]){
|
||||||
|
objects[1]->transmitCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI3
|
||||||
|
if(_hspi->Instance == SPI3){
|
||||||
|
if(objects[2]){
|
||||||
|
objects[2]->transmitCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI4
|
||||||
|
if(_hspi->Instance == SPI4){
|
||||||
|
if(objects[3]){
|
||||||
|
objects[3]->transmitCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI5
|
||||||
|
if(_hspi->Instance == SPI5){
|
||||||
|
if(objects[4]){
|
||||||
|
objects[4]->transmitCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void SPI_Peripheral_STM32::receiveCallbackStatic(SPI_HandleTypeDef *_hspi) {
|
||||||
|
#ifdef SPI1
|
||||||
|
if(_hspi->Instance == SPI1){
|
||||||
|
if(objects[0]){
|
||||||
|
objects[0]->receiveCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI2
|
||||||
|
if(_hspi->Instance == SPI2){
|
||||||
|
if(objects[1]){
|
||||||
|
objects[1]->receiveCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI3
|
||||||
|
if(_hspi->Instance == SPI3){
|
||||||
|
if(objects[2]){
|
||||||
|
objects[2]->receiveCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI4
|
||||||
|
if(_hspi->Instance == SPI4){
|
||||||
|
if(objects[3]){
|
||||||
|
objects[3]->receiveCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI5
|
||||||
|
if(_hspi->Instance == SPI5){
|
||||||
|
if(objects[4]){
|
||||||
|
objects[4]->receiveCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void SPI_Peripheral_STM32::trxCallbackStatic(SPI_HandleTypeDef *_hspi) {
|
||||||
|
#ifdef SPI1
|
||||||
|
if(_hspi->Instance == SPI1){
|
||||||
|
if(objects[0]){
|
||||||
|
objects[0]->trxCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI2
|
||||||
|
if(_hspi->Instance == SPI2){
|
||||||
|
if(objects[1]){
|
||||||
|
objects[1]->trxCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI3
|
||||||
|
if(_hspi->Instance == SPI3){
|
||||||
|
if(objects[2]){
|
||||||
|
objects[2]->trxCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI4
|
||||||
|
if(_hspi->Instance == SPI4){
|
||||||
|
if(objects[3]){
|
||||||
|
objects[3]->trxCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SPI5
|
||||||
|
if(_hspi->Instance == SPI5){
|
||||||
|
if(objects[4]){
|
||||||
|
objects[4]->trxCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void SPI_Peripheral_STM32::transmitCallback() {
|
||||||
|
BaseType_t xHigherPriorityTaskWoken = false;
|
||||||
|
xEventGroupSetBitsFromISR(hSpiEventGroup, (EventBits_t)Event::TX_CPLT, &xHigherPriorityTaskWoken);
|
||||||
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SPI_Peripheral_STM32::receiveCallback() {
|
||||||
|
BaseType_t xHigherPriorityTaskWoken = false;
|
||||||
|
xEventGroupSetBitsFromISR(hSpiEventGroup, (EventBits_t)Event::RX_CPLT, &xHigherPriorityTaskWoken);
|
||||||
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SPI_Peripheral_STM32::trxCallback() {
|
||||||
|
BaseType_t xHigherPriorityTaskWoken = false;
|
||||||
|
xEventGroupSetBitsFromISR(hSpiEventGroup, (EventBits_t)Event::TRX_CPLT, &xHigherPriorityTaskWoken);
|
||||||
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
|
}
|
||||||
50
Core/Src/Components/SPI_Peripheral_STM32.hpp
Normal file
50
Core/Src/Components/SPI_Peripheral_STM32.hpp
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* SPI_Peripheral_STM32.hpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_COMPONENTS_SPI_PERIPHERAL_STM32_HPP_
|
||||||
|
#define SRC_COMPONENTS_SPI_PERIPHERAL_STM32_HPP_
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
#include "SPI_Peripheral.hpp"
|
||||||
|
|
||||||
|
#include <FreeRTOS.h>
|
||||||
|
#include <semphr.h>
|
||||||
|
#include <event_groups.h>
|
||||||
|
|
||||||
|
class SPI_Peripheral_STM32 : public SPI_Peripheral {
|
||||||
|
public:
|
||||||
|
SPI_Peripheral_STM32(SPI_HandleTypeDef* hspi, uint32_t timeout);
|
||||||
|
virtual ~SPI_Peripheral_STM32();
|
||||||
|
int32_t init();
|
||||||
|
int32_t take(uint32_t timeout);
|
||||||
|
int32_t give();
|
||||||
|
int32_t transmit(uint8_t* buffer, uint32_t length);
|
||||||
|
int32_t receive(uint8_t* buffer, uint32_t length);
|
||||||
|
int32_t trx(uint8_t* txBuffer, uint8_t* rxBuffer, uint32_t length);
|
||||||
|
private:
|
||||||
|
enum class Event{
|
||||||
|
TX_CPLT = 1<<0,
|
||||||
|
RX_CPLT = 1<<1,
|
||||||
|
TRX_CPLT = 1<<2,
|
||||||
|
};
|
||||||
|
static void transmitCallbackStatic(SPI_HandleTypeDef* _hspi);
|
||||||
|
static void receiveCallbackStatic(SPI_HandleTypeDef* _hspi);
|
||||||
|
static void trxCallbackStatic(SPI_HandleTypeDef* _hspi);
|
||||||
|
void transmitCallback();
|
||||||
|
void receiveCallback();
|
||||||
|
void trxCallback();
|
||||||
|
static SPI_Peripheral_STM32* objects[5];
|
||||||
|
SPI_HandleTypeDef* hspi;
|
||||||
|
uint32_t timeout;
|
||||||
|
SemaphoreHandle_t hSpiMutex;
|
||||||
|
StaticSemaphore_t spiMutexBuffer;
|
||||||
|
EventGroupHandle_t hSpiEventGroup;
|
||||||
|
StaticEventGroup_t spiEventGroupBuffer;
|
||||||
|
TaskHandle_t taskLocking = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SRC_COMPONENTS_SPI_PERIPHERAL_STM32_HPP_ */
|
||||||
25
Core/Src/Components/start.cpp
Normal file
25
Core/Src/Components/start.cpp
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Start.cpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "start.hpp"
|
||||||
|
#include "GPIO_Pin_STM32.hpp"
|
||||||
|
#include "SPI_Peripheral_STM32.hpp"
|
||||||
|
#include "BinLeds.hpp"
|
||||||
|
|
||||||
|
extern SPI_HandleTypeDef hspi2;
|
||||||
|
|
||||||
|
GPIO_Pin_STM32 ledOrange(LD3_GPIO_Port, LD3_Pin);
|
||||||
|
GPIO_Pin_STM32 ledGreen(LD4_GPIO_Port, LD4_Pin);
|
||||||
|
GPIO_Pin_STM32 ledRed(LD5_GPIO_Port, LD5_Pin);
|
||||||
|
GPIO_Pin_STM32 ledBlue(LD6_GPIO_Port, LD6_Pin);
|
||||||
|
BinLeds discoveryLeds((GPIO_Pin*[]){&ledOrange, &ledGreen, &ledRed, &ledBlue}, 4);
|
||||||
|
|
||||||
|
SPI_Peripheral_STM32 spiRadio(&hspi2, 1000);
|
||||||
|
|
||||||
|
void start(){
|
||||||
|
spiRadio.init();
|
||||||
|
}
|
||||||
23
Core/Src/Components/start.hpp
Normal file
23
Core/Src/Components/start.hpp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* start.hpp
|
||||||
|
*
|
||||||
|
* Created on: Feb 10, 2024
|
||||||
|
* Author: Gabriel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_COMPONENTS_START_HPP_
|
||||||
|
#define SRC_COMPONENTS_START_HPP_
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void start();
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SRC_COMPONENTS_START_HPP_ */
|
||||||
58
Core/Src/dma.c
Normal file
58
Core/Src/dma.c
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file dma.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of all the requested memory to memory DMA transfers.
|
||||||
|
******************************************************************************
|
||||||
|
* @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 "dma.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* Configure DMA */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable DMA controller clock
|
||||||
|
*/
|
||||||
|
void MX_DMA_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* DMA controller clock enable */
|
||||||
|
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||||
|
|
||||||
|
/* DMA interrupt init */
|
||||||
|
/* DMA1_Stream3_IRQn interrupt configuration */
|
||||||
|
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
|
||||||
|
/* DMA1_Stream4_IRQn interrupt configuration */
|
||||||
|
HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 5, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
@@ -21,10 +21,11 @@
|
|||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "cmsis_os.h"
|
||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "Components/start.hpp"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@@ -46,12 +47,82 @@
|
|||||||
/* USER CODE BEGIN Variables */
|
/* USER CODE BEGIN Variables */
|
||||||
|
|
||||||
/* USER CODE END Variables */
|
/* USER CODE END Variables */
|
||||||
|
/* Definitions for defaultTask */
|
||||||
|
osThreadId_t defaultTaskHandle;
|
||||||
|
const osThreadAttr_t defaultTask_attributes = {
|
||||||
|
.name = "defaultTask",
|
||||||
|
.stack_size = 128 * 4,
|
||||||
|
.priority = (osPriority_t) osPriorityNormal,
|
||||||
|
};
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
/* USER CODE BEGIN FunctionPrototypes */
|
/* USER CODE BEGIN FunctionPrototypes */
|
||||||
|
|
||||||
/* USER CODE END FunctionPrototypes */
|
/* USER CODE END FunctionPrototypes */
|
||||||
|
|
||||||
|
void StartDefaultTask(void *argument);
|
||||||
|
|
||||||
|
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief FreeRTOS initialization
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void MX_FREERTOS_Init(void) {
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN RTOS_MUTEX */
|
||||||
|
/* add mutexes, ... */
|
||||||
|
/* USER CODE END RTOS_MUTEX */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
||||||
|
/* add semaphores, ... */
|
||||||
|
/* USER CODE END RTOS_SEMAPHORES */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN RTOS_TIMERS */
|
||||||
|
/* start timers, add new ones, ... */
|
||||||
|
/* USER CODE END RTOS_TIMERS */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN RTOS_QUEUES */
|
||||||
|
/* add queues, ... */
|
||||||
|
/* USER CODE END RTOS_QUEUES */
|
||||||
|
|
||||||
|
/* Create the thread(s) */
|
||||||
|
/* creation of defaultTask */
|
||||||
|
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN RTOS_THREADS */
|
||||||
|
/* add threads, ... */
|
||||||
|
/* USER CODE END RTOS_THREADS */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN RTOS_EVENTS */
|
||||||
|
/* add events, ... */
|
||||||
|
/* USER CODE END RTOS_EVENTS */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Header_StartDefaultTask */
|
||||||
|
/**
|
||||||
|
* @brief Function implementing the defaultTask thread.
|
||||||
|
* @param argument: Not used
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header_StartDefaultTask */
|
||||||
|
void StartDefaultTask(void *argument)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN StartDefaultTask */
|
||||||
|
start();
|
||||||
|
/* Infinite loop */
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
osDelay(1);
|
||||||
|
}
|
||||||
|
/* USER CODE END StartDefaultTask */
|
||||||
|
}
|
||||||
|
|
||||||
/* Private application code --------------------------------------------------*/
|
/* Private application code --------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Application */
|
/* USER CODE BEGIN Application */
|
||||||
|
|
||||||
|
|||||||
168
Core/Src/gpio.c
Normal file
168
Core/Src/gpio.c
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file gpio.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of all used GPIO pins.
|
||||||
|
******************************************************************************
|
||||||
|
* @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 "gpio.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* Configure GPIO */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/** Configure pins as
|
||||||
|
* Analog
|
||||||
|
* Input
|
||||||
|
* Output
|
||||||
|
* EVENT_OUT
|
||||||
|
* EXTI
|
||||||
|
PC3 ------> I2S2_SD
|
||||||
|
PB10 ------> I2S2_CK
|
||||||
|
PA9 ------> USB_OTG_FS_VBUS
|
||||||
|
PA10 ------> USB_OTG_FS_ID
|
||||||
|
PA11 ------> USB_OTG_FS_DM
|
||||||
|
PA12 ------> USB_OTG_FS_DP
|
||||||
|
*/
|
||||||
|
void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOH_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(CS_I2C_SPI_GPIO_Port, CS_I2C_SPI_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, RADIO_TXEN_Pin|RADIO_NSS_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOD, RADIO_RST_Pin|RADIO_RXEN_Pin|LD4_Pin|LD3_Pin
|
||||||
|
|LD5_Pin|LD6_Pin|Audio_RST_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = CS_I2C_SPI_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(CS_I2C_SPI_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(OTG_FS_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = PDM_OUT_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||||
|
HAL_GPIO_Init(PDM_OUT_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = B1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = BOOT1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(BOOT1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = CLK_IN_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||||
|
HAL_GPIO_Init(CLK_IN_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : PBPin PBPin */
|
||||||
|
GPIO_InitStruct.Pin = RADIO_TXEN_Pin|RADIO_NSS_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : PDPin PDPin */
|
||||||
|
GPIO_InitStruct.Pin = RADIO_BUSY_Pin|RADIO_IRQ_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : PDPin PDPin PDPin PDPin
|
||||||
|
PDPin PDPin PDPin */
|
||||||
|
GPIO_InitStruct.Pin = RADIO_RST_Pin|RADIO_RXEN_Pin|LD4_Pin|LD3_Pin
|
||||||
|
|LD5_Pin|LD6_Pin|Audio_RST_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = VBUS_FS_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(VBUS_FS_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : PAPin PAPin PAPin */
|
||||||
|
GPIO_InitStruct.Pin = OTG_FS_ID_Pin|OTG_FS_DM_Pin|OTG_FS_DP_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = OTG_FS_OverCurrent_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(OTG_FS_OverCurrent_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = MEMS_INT2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(MEMS_INT2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
|
/* USER CODE END 2 */
|
||||||
116
Core/Src/i2c.c
Normal file
116
Core/Src/i2c.c
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file i2c.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the I2C 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 "i2c.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
I2C_HandleTypeDef hi2c1;
|
||||||
|
|
||||||
|
/* I2C1 init function */
|
||||||
|
void MX_I2C1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN I2C1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END I2C1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN I2C1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END I2C1_Init 1 */
|
||||||
|
hi2c1.Instance = I2C1;
|
||||||
|
hi2c1.Init.ClockSpeed = 100000;
|
||||||
|
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
||||||
|
hi2c1.Init.OwnAddress1 = 0;
|
||||||
|
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
||||||
|
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
||||||
|
hi2c1.Init.OwnAddress2 = 0;
|
||||||
|
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
||||||
|
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
||||||
|
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN I2C1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END I2C1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
|
||||||
|
{
|
||||||
|
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
if(i2cHandle->Instance==I2C1)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN I2C1_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END I2C1_MspInit 0 */
|
||||||
|
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
/**I2C1 GPIO Configuration
|
||||||
|
PB6 ------> I2C1_SCL
|
||||||
|
PB9 ------> I2C1_SDA
|
||||||
|
*/
|
||||||
|
GPIO_InitStruct.Pin = Audio_SCL_Pin|Audio_SDA_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* I2C1 clock enable */
|
||||||
|
__HAL_RCC_I2C1_CLK_ENABLE();
|
||||||
|
/* USER CODE BEGIN I2C1_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END I2C1_MspInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(i2cHandle->Instance==I2C1)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN I2C1_MspDeInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END I2C1_MspDeInit 0 */
|
||||||
|
/* Peripheral clock disable */
|
||||||
|
__HAL_RCC_I2C1_CLK_DISABLE();
|
||||||
|
|
||||||
|
/**I2C1 GPIO Configuration
|
||||||
|
PB6 ------> I2C1_SCL
|
||||||
|
PB9 ------> I2C1_SDA
|
||||||
|
*/
|
||||||
|
HAL_GPIO_DeInit(Audio_SCL_GPIO_Port, Audio_SCL_Pin);
|
||||||
|
|
||||||
|
HAL_GPIO_DeInit(Audio_SDA_GPIO_Port, Audio_SDA_Pin);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN I2C1_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END I2C1_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
140
Core/Src/i2s.c
Normal file
140
Core/Src/i2s.c
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file i2s.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the I2S 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 "i2s.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
I2S_HandleTypeDef hi2s3;
|
||||||
|
|
||||||
|
/* I2S3 init function */
|
||||||
|
void MX_I2S3_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN I2S3_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END I2S3_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN I2S3_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END I2S3_Init 1 */
|
||||||
|
hi2s3.Instance = SPI3;
|
||||||
|
hi2s3.Init.Mode = I2S_MODE_MASTER_TX;
|
||||||
|
hi2s3.Init.Standard = I2S_STANDARD_PHILIPS;
|
||||||
|
hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B;
|
||||||
|
hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE;
|
||||||
|
hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_96K;
|
||||||
|
hi2s3.Init.CPOL = I2S_CPOL_LOW;
|
||||||
|
hi2s3.Init.ClockSource = I2S_CLOCK_PLL;
|
||||||
|
hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE;
|
||||||
|
if (HAL_I2S_Init(&hi2s3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN I2S3_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END I2S3_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void HAL_I2S_MspInit(I2S_HandleTypeDef* i2sHandle)
|
||||||
|
{
|
||||||
|
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
|
||||||
|
if(i2sHandle->Instance==SPI3)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN SPI3_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI3_MspInit 0 */
|
||||||
|
|
||||||
|
/** Initializes the peripherals clock
|
||||||
|
*/
|
||||||
|
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S;
|
||||||
|
PeriphClkInitStruct.PLLI2S.PLLI2SN = 192;
|
||||||
|
PeriphClkInitStruct.PLLI2S.PLLI2SR = 2;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* I2S3 clock enable */
|
||||||
|
__HAL_RCC_SPI3_CLK_ENABLE();
|
||||||
|
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
/**I2S3 GPIO Configuration
|
||||||
|
PA4 ------> I2S3_WS
|
||||||
|
PC7 ------> I2S3_MCK
|
||||||
|
PC10 ------> I2S3_CK
|
||||||
|
PC12 ------> I2S3_SD
|
||||||
|
*/
|
||||||
|
GPIO_InitStruct.Pin = I2S3_WS_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
|
||||||
|
HAL_GPIO_Init(I2S3_WS_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
GPIO_InitStruct.Pin = I2S3_MCK_Pin|I2S3_SCK_Pin|I2S3_SD_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SPI3_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI3_MspInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HAL_I2S_MspDeInit(I2S_HandleTypeDef* i2sHandle)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(i2sHandle->Instance==SPI3)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN SPI3_MspDeInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI3_MspDeInit 0 */
|
||||||
|
/* Peripheral clock disable */
|
||||||
|
__HAL_RCC_SPI3_CLK_DISABLE();
|
||||||
|
|
||||||
|
/**I2S3 GPIO Configuration
|
||||||
|
PA4 ------> I2S3_WS
|
||||||
|
PC7 ------> I2S3_MCK
|
||||||
|
PC10 ------> I2S3_CK
|
||||||
|
PC12 ------> I2S3_SD
|
||||||
|
*/
|
||||||
|
HAL_GPIO_DeInit(I2S3_WS_GPIO_Port, I2S3_WS_Pin);
|
||||||
|
|
||||||
|
HAL_GPIO_DeInit(GPIOC, I2S3_MCK_Pin|I2S3_SCK_Pin|I2S3_SD_Pin);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SPI3_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI3_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
365
Core/Src/main.c
365
Core/Src/main.c
@@ -19,6 +19,11 @@
|
|||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "cmsis_os.h"
|
#include "cmsis_os.h"
|
||||||
|
#include "dma.h"
|
||||||
|
#include "i2c.h"
|
||||||
|
#include "i2s.h"
|
||||||
|
#include "spi.h"
|
||||||
|
#include "gpio.h"
|
||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
@@ -41,36 +46,14 @@
|
|||||||
/* USER CODE END PM */
|
/* USER CODE END PM */
|
||||||
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
I2C_HandleTypeDef hi2c1;
|
|
||||||
|
|
||||||
I2S_HandleTypeDef hi2s3;
|
|
||||||
|
|
||||||
SPI_HandleTypeDef hspi1;
|
|
||||||
SPI_HandleTypeDef hspi2;
|
|
||||||
DMA_HandleTypeDef hdma_spi2_rx;
|
|
||||||
DMA_HandleTypeDef hdma_spi2_tx;
|
|
||||||
|
|
||||||
/* Definitions for defaultTask */
|
|
||||||
osThreadId_t defaultTaskHandle;
|
|
||||||
const osThreadAttr_t defaultTask_attributes = {
|
|
||||||
.name = "defaultTask",
|
|
||||||
.stack_size = 128 * 4,
|
|
||||||
.priority = (osPriority_t) osPriorityNormal,
|
|
||||||
};
|
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
void SystemClock_Config(void);
|
void SystemClock_Config(void);
|
||||||
static void MX_GPIO_Init(void);
|
void MX_FREERTOS_Init(void);
|
||||||
static void MX_DMA_Init(void);
|
|
||||||
static void MX_I2C1_Init(void);
|
|
||||||
static void MX_I2S3_Init(void);
|
|
||||||
static void MX_SPI1_Init(void);
|
|
||||||
static void MX_SPI2_Init(void);
|
|
||||||
void StartDefaultTask(void *argument);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN PFP */
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
/* USER CODE END PFP */
|
/* USER CODE END PFP */
|
||||||
@@ -120,33 +103,8 @@ int main(void)
|
|||||||
/* Init scheduler */
|
/* Init scheduler */
|
||||||
osKernelInitialize();
|
osKernelInitialize();
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_MUTEX */
|
/* Call init function for freertos objects (in freertos.c) */
|
||||||
/* add mutexes, ... */
|
MX_FREERTOS_Init();
|
||||||
/* USER CODE END RTOS_MUTEX */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
|
||||||
/* add semaphores, ... */
|
|
||||||
/* USER CODE END RTOS_SEMAPHORES */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_TIMERS */
|
|
||||||
/* start timers, add new ones, ... */
|
|
||||||
/* USER CODE END RTOS_TIMERS */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_QUEUES */
|
|
||||||
/* add queues, ... */
|
|
||||||
/* USER CODE END RTOS_QUEUES */
|
|
||||||
|
|
||||||
/* Create the thread(s) */
|
|
||||||
/* creation of defaultTask */
|
|
||||||
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_THREADS */
|
|
||||||
/* add threads, ... */
|
|
||||||
/* USER CODE END RTOS_THREADS */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_EVENTS */
|
|
||||||
/* add events, ... */
|
|
||||||
/* USER CODE END RTOS_EVENTS */
|
|
||||||
|
|
||||||
/* Start scheduler */
|
/* Start scheduler */
|
||||||
osKernelStart();
|
osKernelStart();
|
||||||
@@ -208,317 +166,10 @@ void SystemClock_Config(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief I2C1 Initialization Function
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
static void MX_I2C1_Init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* USER CODE BEGIN I2C1_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE END I2C1_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN I2C1_Init 1 */
|
|
||||||
|
|
||||||
/* USER CODE END I2C1_Init 1 */
|
|
||||||
hi2c1.Instance = I2C1;
|
|
||||||
hi2c1.Init.ClockSpeed = 100000;
|
|
||||||
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
|
||||||
hi2c1.Init.OwnAddress1 = 0;
|
|
||||||
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
|
||||||
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
|
||||||
hi2c1.Init.OwnAddress2 = 0;
|
|
||||||
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
|
||||||
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
|
||||||
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
/* USER CODE BEGIN I2C1_Init 2 */
|
|
||||||
|
|
||||||
/* USER CODE END I2C1_Init 2 */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief I2S3 Initialization Function
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
static void MX_I2S3_Init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* USER CODE BEGIN I2S3_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE END I2S3_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN I2S3_Init 1 */
|
|
||||||
|
|
||||||
/* USER CODE END I2S3_Init 1 */
|
|
||||||
hi2s3.Instance = SPI3;
|
|
||||||
hi2s3.Init.Mode = I2S_MODE_MASTER_TX;
|
|
||||||
hi2s3.Init.Standard = I2S_STANDARD_PHILIPS;
|
|
||||||
hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B;
|
|
||||||
hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE;
|
|
||||||
hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_96K;
|
|
||||||
hi2s3.Init.CPOL = I2S_CPOL_LOW;
|
|
||||||
hi2s3.Init.ClockSource = I2S_CLOCK_PLL;
|
|
||||||
hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE;
|
|
||||||
if (HAL_I2S_Init(&hi2s3) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
/* USER CODE BEGIN I2S3_Init 2 */
|
|
||||||
|
|
||||||
/* USER CODE END I2S3_Init 2 */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief SPI1 Initialization Function
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
static 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 */
|
|
||||||
/* SPI1 parameter configuration*/
|
|
||||||
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_LOW;
|
|
||||||
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
|
||||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
|
||||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
|
|
||||||
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 */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief SPI2 Initialization Function
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
static void MX_SPI2_Init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI2_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI2_Init 1 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_Init 1 */
|
|
||||||
/* SPI2 parameter configuration*/
|
|
||||||
hspi2.Instance = SPI2;
|
|
||||||
hspi2.Init.Mode = SPI_MODE_MASTER;
|
|
||||||
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
|
||||||
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
|
||||||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
|
||||||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
|
||||||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
|
||||||
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
|
||||||
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
|
||||||
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
|
||||||
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
|
||||||
hspi2.Init.CRCPolynomial = 10;
|
|
||||||
if (HAL_SPI_Init(&hspi2) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
/* USER CODE BEGIN SPI2_Init 2 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_Init 2 */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable DMA controller clock
|
|
||||||
*/
|
|
||||||
static void MX_DMA_Init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* DMA controller clock enable */
|
|
||||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
|
||||||
|
|
||||||
/* DMA interrupt init */
|
|
||||||
/* DMA1_Stream3_IRQn interrupt configuration */
|
|
||||||
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
|
|
||||||
/* DMA1_Stream4_IRQn interrupt configuration */
|
|
||||||
HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 5, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief GPIO Initialization Function
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
static void MX_GPIO_Init(void)
|
|
||||||
{
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
|
||||||
/* USER CODE END MX_GPIO_Init_1 */
|
|
||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
|
||||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOH_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
|
||||||
HAL_GPIO_WritePin(CS_I2C_SPI_GPIO_Port, CS_I2C_SPI_Pin, GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
|
||||||
HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET);
|
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
|
||||||
HAL_GPIO_WritePin(GPIOB, RADIO_TXEN_Pin|RADIO_NSS_Pin, GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
|
||||||
HAL_GPIO_WritePin(GPIOD, RADIO_RST_Pin|RADIO_RXEN_Pin|LD4_Pin|LD3_Pin
|
|
||||||
|LD5_Pin|LD6_Pin|Audio_RST_Pin, GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : CS_I2C_SPI_Pin */
|
|
||||||
GPIO_InitStruct.Pin = CS_I2C_SPI_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
HAL_GPIO_Init(CS_I2C_SPI_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : OTG_FS_PowerSwitchOn_Pin */
|
|
||||||
GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
HAL_GPIO_Init(OTG_FS_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : PDM_OUT_Pin */
|
|
||||||
GPIO_InitStruct.Pin = PDM_OUT_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
|
||||||
HAL_GPIO_Init(PDM_OUT_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : B1_Pin */
|
|
||||||
GPIO_InitStruct.Pin = B1_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : BOOT1_Pin */
|
|
||||||
GPIO_InitStruct.Pin = BOOT1_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(BOOT1_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : CLK_IN_Pin */
|
|
||||||
GPIO_InitStruct.Pin = CLK_IN_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
|
||||||
HAL_GPIO_Init(CLK_IN_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pins : RADIO_TXEN_Pin RADIO_NSS_Pin */
|
|
||||||
GPIO_InitStruct.Pin = RADIO_TXEN_Pin|RADIO_NSS_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pins : RADIO_BUSY_Pin RADIO_IRQ_Pin */
|
|
||||||
GPIO_InitStruct.Pin = RADIO_BUSY_Pin|RADIO_IRQ_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pins : RADIO_RST_Pin RADIO_RXEN_Pin LD4_Pin LD3_Pin
|
|
||||||
LD5_Pin LD6_Pin Audio_RST_Pin */
|
|
||||||
GPIO_InitStruct.Pin = RADIO_RST_Pin|RADIO_RXEN_Pin|LD4_Pin|LD3_Pin
|
|
||||||
|LD5_Pin|LD6_Pin|Audio_RST_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : VBUS_FS_Pin */
|
|
||||||
GPIO_InitStruct.Pin = VBUS_FS_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(VBUS_FS_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pins : OTG_FS_ID_Pin OTG_FS_DM_Pin OTG_FS_DP_Pin */
|
|
||||||
GPIO_InitStruct.Pin = OTG_FS_ID_Pin|OTG_FS_DM_Pin|OTG_FS_DP_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
|
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : OTG_FS_OverCurrent_Pin */
|
|
||||||
GPIO_InitStruct.Pin = OTG_FS_OverCurrent_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(OTG_FS_OverCurrent_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pin : MEMS_INT2_Pin */
|
|
||||||
GPIO_InitStruct.Pin = MEMS_INT2_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(MEMS_INT2_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
|
||||||
/* USER CODE END MX_GPIO_Init_2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
/* USER CODE END 4 */
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
/* USER CODE BEGIN Header_StartDefaultTask */
|
|
||||||
/**
|
|
||||||
* @brief Function implementing the defaultTask thread.
|
|
||||||
* @param argument: Not used
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
/* USER CODE END Header_StartDefaultTask */
|
|
||||||
void StartDefaultTask(void *argument)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN 5 */
|
|
||||||
/* Infinite loop */
|
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
osDelay(1);
|
|
||||||
}
|
|
||||||
/* USER CODE END 5 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Period elapsed callback in non blocking mode
|
* @brief Period elapsed callback in non blocking mode
|
||||||
* @note This function is called when TIM7 interrupt took place, inside
|
* @note This function is called when TIM7 interrupt took place, inside
|
||||||
|
|||||||
238
Core/Src/spi.c
Normal file
238
Core/Src/spi.c
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
/* 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;
|
||||||
|
SPI_HandleTypeDef hspi2;
|
||||||
|
DMA_HandleTypeDef hdma_spi2_rx;
|
||||||
|
DMA_HandleTypeDef hdma_spi2_tx;
|
||||||
|
|
||||||
|
/* 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_LOW;
|
||||||
|
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
|
hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||||
|
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
|
||||||
|
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 */
|
||||||
|
|
||||||
|
}
|
||||||
|
/* SPI2 init function */
|
||||||
|
void MX_SPI2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SPI2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SPI2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_Init 1 */
|
||||||
|
hspi2.Instance = SPI2;
|
||||||
|
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||||||
|
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
||||||
|
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||||
|
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
|
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
|
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||||
|
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
||||||
|
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||||
|
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||||
|
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||||
|
hspi2.Init.CRCPolynomial = 10;
|
||||||
|
if (HAL_SPI_Init(&hspi2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN SPI2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_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 = SPI1_SCK_Pin|SPI1_MISO_Pin|SPI1_MOSI_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SPI1_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI1_MspInit 1 */
|
||||||
|
}
|
||||||
|
else if(spiHandle->Instance==SPI2)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN SPI2_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_MspInit 0 */
|
||||||
|
/* SPI2 clock enable */
|
||||||
|
__HAL_RCC_SPI2_CLK_ENABLE();
|
||||||
|
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
/**SPI2 GPIO Configuration
|
||||||
|
PB13 ------> SPI2_SCK
|
||||||
|
PB14 ------> SPI2_MISO
|
||||||
|
PB15 ------> SPI2_MOSI
|
||||||
|
*/
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* SPI2 DMA Init */
|
||||||
|
/* SPI2_RX Init */
|
||||||
|
hdma_spi2_rx.Instance = DMA1_Stream3;
|
||||||
|
hdma_spi2_rx.Init.Channel = DMA_CHANNEL_0;
|
||||||
|
hdma_spi2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||||
|
hdma_spi2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||||
|
hdma_spi2_rx.Init.MemInc = DMA_MINC_ENABLE;
|
||||||
|
hdma_spi2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||||
|
hdma_spi2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||||
|
hdma_spi2_rx.Init.Mode = DMA_NORMAL;
|
||||||
|
hdma_spi2_rx.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
|
hdma_spi2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
||||||
|
if (HAL_DMA_Init(&hdma_spi2_rx) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_LINKDMA(spiHandle,hdmarx,hdma_spi2_rx);
|
||||||
|
|
||||||
|
/* SPI2_TX Init */
|
||||||
|
hdma_spi2_tx.Instance = DMA1_Stream4;
|
||||||
|
hdma_spi2_tx.Init.Channel = DMA_CHANNEL_0;
|
||||||
|
hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
||||||
|
hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||||
|
hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE;
|
||||||
|
hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||||
|
hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||||
|
hdma_spi2_tx.Init.Mode = DMA_NORMAL;
|
||||||
|
hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
|
hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
||||||
|
if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_LINKDMA(spiHandle,hdmatx,hdma_spi2_tx);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SPI2_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_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, SPI1_SCK_Pin|SPI1_MISO_Pin|SPI1_MOSI_Pin);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SPI1_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI1_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
else if(spiHandle->Instance==SPI2)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN SPI2_MspDeInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_MspDeInit 0 */
|
||||||
|
/* Peripheral clock disable */
|
||||||
|
__HAL_RCC_SPI2_CLK_DISABLE();
|
||||||
|
|
||||||
|
/**SPI2 GPIO Configuration
|
||||||
|
PB13 ------> SPI2_SCK
|
||||||
|
PB14 ------> SPI2_MISO
|
||||||
|
PB15 ------> SPI2_MOSI
|
||||||
|
*/
|
||||||
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
|
||||||
|
|
||||||
|
/* SPI2 DMA DeInit */
|
||||||
|
HAL_DMA_DeInit(spiHandle->hdmarx);
|
||||||
|
HAL_DMA_DeInit(spiHandle->hdmatx);
|
||||||
|
/* USER CODE BEGIN SPI2_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
@@ -24,9 +24,6 @@
|
|||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
extern DMA_HandleTypeDef hdma_spi2_rx;
|
|
||||||
|
|
||||||
extern DMA_HandleTypeDef hdma_spi2_tx;
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN TD */
|
/* USER CODE BEGIN TD */
|
||||||
@@ -82,315 +79,6 @@ void HAL_MspInit(void)
|
|||||||
/* USER CODE END MspInit 1 */
|
/* USER CODE END MspInit 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief I2C MSP Initialization
|
|
||||||
* This function configures the hardware resources used in this example
|
|
||||||
* @param hi2c: I2C handle pointer
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
|
|
||||||
{
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
if(hi2c->Instance==I2C1)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN I2C1_MspInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END I2C1_MspInit 0 */
|
|
||||||
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
||||||
/**I2C1 GPIO Configuration
|
|
||||||
PB6 ------> I2C1_SCL
|
|
||||||
PB9 ------> I2C1_SDA
|
|
||||||
*/
|
|
||||||
GPIO_InitStruct.Pin = Audio_SCL_Pin|Audio_SDA_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
|
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* Peripheral clock enable */
|
|
||||||
__HAL_RCC_I2C1_CLK_ENABLE();
|
|
||||||
/* USER CODE BEGIN I2C1_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END I2C1_MspInit 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief I2C MSP De-Initialization
|
|
||||||
* This function freeze the hardware resources used in this example
|
|
||||||
* @param hi2c: I2C handle pointer
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c)
|
|
||||||
{
|
|
||||||
if(hi2c->Instance==I2C1)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN I2C1_MspDeInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END I2C1_MspDeInit 0 */
|
|
||||||
/* Peripheral clock disable */
|
|
||||||
__HAL_RCC_I2C1_CLK_DISABLE();
|
|
||||||
|
|
||||||
/**I2C1 GPIO Configuration
|
|
||||||
PB6 ------> I2C1_SCL
|
|
||||||
PB9 ------> I2C1_SDA
|
|
||||||
*/
|
|
||||||
HAL_GPIO_DeInit(Audio_SCL_GPIO_Port, Audio_SCL_Pin);
|
|
||||||
|
|
||||||
HAL_GPIO_DeInit(Audio_SDA_GPIO_Port, Audio_SDA_Pin);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN I2C1_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END I2C1_MspDeInit 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief I2S MSP Initialization
|
|
||||||
* This function configures the hardware resources used in this example
|
|
||||||
* @param hi2s: I2S handle pointer
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void HAL_I2S_MspInit(I2S_HandleTypeDef* hi2s)
|
|
||||||
{
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
|
|
||||||
if(hi2s->Instance==SPI3)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN SPI3_MspInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI3_MspInit 0 */
|
|
||||||
|
|
||||||
/** Initializes the peripherals clock
|
|
||||||
*/
|
|
||||||
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S;
|
|
||||||
PeriphClkInitStruct.PLLI2S.PLLI2SN = 192;
|
|
||||||
PeriphClkInitStruct.PLLI2S.PLLI2SR = 2;
|
|
||||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Peripheral clock enable */
|
|
||||||
__HAL_RCC_SPI3_CLK_ENABLE();
|
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
||||||
/**I2S3 GPIO Configuration
|
|
||||||
PA4 ------> I2S3_WS
|
|
||||||
PC7 ------> I2S3_MCK
|
|
||||||
PC10 ------> I2S3_CK
|
|
||||||
PC12 ------> I2S3_SD
|
|
||||||
*/
|
|
||||||
GPIO_InitStruct.Pin = I2S3_WS_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
|
|
||||||
HAL_GPIO_Init(I2S3_WS_GPIO_Port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = I2S3_MCK_Pin|I2S3_SCK_Pin|I2S3_SD_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
|
|
||||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI3_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI3_MspInit 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief I2S MSP De-Initialization
|
|
||||||
* This function freeze the hardware resources used in this example
|
|
||||||
* @param hi2s: I2S handle pointer
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void HAL_I2S_MspDeInit(I2S_HandleTypeDef* hi2s)
|
|
||||||
{
|
|
||||||
if(hi2s->Instance==SPI3)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN SPI3_MspDeInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI3_MspDeInit 0 */
|
|
||||||
/* Peripheral clock disable */
|
|
||||||
__HAL_RCC_SPI3_CLK_DISABLE();
|
|
||||||
|
|
||||||
/**I2S3 GPIO Configuration
|
|
||||||
PA4 ------> I2S3_WS
|
|
||||||
PC7 ------> I2S3_MCK
|
|
||||||
PC10 ------> I2S3_CK
|
|
||||||
PC12 ------> I2S3_SD
|
|
||||||
*/
|
|
||||||
HAL_GPIO_DeInit(I2S3_WS_GPIO_Port, I2S3_WS_Pin);
|
|
||||||
|
|
||||||
HAL_GPIO_DeInit(GPIOC, I2S3_MCK_Pin|I2S3_SCK_Pin|I2S3_SD_Pin);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI3_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI3_MspDeInit 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief SPI MSP Initialization
|
|
||||||
* This function configures the hardware resources used in this example
|
|
||||||
* @param hspi: SPI handle pointer
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
|
|
||||||
{
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
if(hspi->Instance==SPI1)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN SPI1_MspInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 0 */
|
|
||||||
/* Peripheral 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 = SPI1_SCK_Pin|SPI1_MISO_Pin|SPI1_MOSI_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 1 */
|
|
||||||
}
|
|
||||||
else if(hspi->Instance==SPI2)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN SPI2_MspInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_MspInit 0 */
|
|
||||||
/* Peripheral clock enable */
|
|
||||||
__HAL_RCC_SPI2_CLK_ENABLE();
|
|
||||||
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
||||||
/**SPI2 GPIO Configuration
|
|
||||||
PB13 ------> SPI2_SCK
|
|
||||||
PB14 ------> SPI2_MISO
|
|
||||||
PB15 ------> SPI2_MOSI
|
|
||||||
*/
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* SPI2 DMA Init */
|
|
||||||
/* SPI2_RX Init */
|
|
||||||
hdma_spi2_rx.Instance = DMA1_Stream3;
|
|
||||||
hdma_spi2_rx.Init.Channel = DMA_CHANNEL_0;
|
|
||||||
hdma_spi2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
|
||||||
hdma_spi2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
||||||
hdma_spi2_rx.Init.MemInc = DMA_MINC_ENABLE;
|
|
||||||
hdma_spi2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
||||||
hdma_spi2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
||||||
hdma_spi2_rx.Init.Mode = DMA_NORMAL;
|
|
||||||
hdma_spi2_rx.Init.Priority = DMA_PRIORITY_LOW;
|
|
||||||
hdma_spi2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
||||||
if (HAL_DMA_Init(&hdma_spi2_rx) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_LINKDMA(hspi,hdmarx,hdma_spi2_rx);
|
|
||||||
|
|
||||||
/* SPI2_TX Init */
|
|
||||||
hdma_spi2_tx.Instance = DMA1_Stream4;
|
|
||||||
hdma_spi2_tx.Init.Channel = DMA_CHANNEL_0;
|
|
||||||
hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
|
||||||
hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
||||||
hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE;
|
|
||||||
hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
||||||
hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
||||||
hdma_spi2_tx.Init.Mode = DMA_NORMAL;
|
|
||||||
hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW;
|
|
||||||
hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
||||||
if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_LINKDMA(hspi,hdmatx,hdma_spi2_tx);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI2_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_MspInit 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief SPI MSP De-Initialization
|
|
||||||
* This function freeze the hardware resources used in this example
|
|
||||||
* @param hspi: SPI handle pointer
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
|
|
||||||
{
|
|
||||||
if(hspi->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, SPI1_SCK_Pin|SPI1_MISO_Pin|SPI1_MOSI_Pin);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspDeInit 1 */
|
|
||||||
}
|
|
||||||
else if(hspi->Instance==SPI2)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN SPI2_MspDeInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_MspDeInit 0 */
|
|
||||||
/* Peripheral clock disable */
|
|
||||||
__HAL_RCC_SPI2_CLK_DISABLE();
|
|
||||||
|
|
||||||
/**SPI2 GPIO Configuration
|
|
||||||
PB13 ------> SPI2_SCK
|
|
||||||
PB14 ------> SPI2_MISO
|
|
||||||
PB15 ------> SPI2_MOSI
|
|
||||||
*/
|
|
||||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
|
|
||||||
|
|
||||||
/* SPI2 DMA DeInit */
|
|
||||||
HAL_DMA_DeInit(hspi->hdmarx);
|
|
||||||
HAL_DMA_DeInit(hspi->hdmatx);
|
|
||||||
/* USER CODE BEGIN SPI2_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END SPI2_MspDeInit 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|||||||
@@ -377,7 +377,7 @@ ProjectManager.AskForMigrate=true
|
|||||||
ProjectManager.BackupPrevious=false
|
ProjectManager.BackupPrevious=false
|
||||||
ProjectManager.CompilerOptimize=6
|
ProjectManager.CompilerOptimize=6
|
||||||
ProjectManager.ComputerToolchain=false
|
ProjectManager.ComputerToolchain=false
|
||||||
ProjectManager.CoupleFile=false
|
ProjectManager.CoupleFile=true
|
||||||
ProjectManager.CustomerFirmwarePackage=
|
ProjectManager.CustomerFirmwarePackage=
|
||||||
ProjectManager.DefaultFWLocation=true
|
ProjectManager.DefaultFWLocation=true
|
||||||
ProjectManager.DeletePrevious=true
|
ProjectManager.DeletePrevious=true
|
||||||
@@ -396,7 +396,7 @@ ProjectManager.ProjectBuild=false
|
|||||||
ProjectManager.ProjectFileName=F407-SX1280-FreeRTOS.ioc
|
ProjectManager.ProjectFileName=F407-SX1280-FreeRTOS.ioc
|
||||||
ProjectManager.ProjectName=F407-SX1280-FreeRTOS
|
ProjectManager.ProjectName=F407-SX1280-FreeRTOS
|
||||||
ProjectManager.ProjectStructure=
|
ProjectManager.ProjectStructure=
|
||||||
ProjectManager.RegisterCallBack=
|
ProjectManager.RegisterCallBack=SPI
|
||||||
ProjectManager.StackSize=0x400
|
ProjectManager.StackSize=0x400
|
||||||
ProjectManager.TargetToolchain=STM32CubeIDE
|
ProjectManager.TargetToolchain=STM32CubeIDE
|
||||||
ProjectManager.ToolChainLocation=
|
ProjectManager.ToolChainLocation=
|
||||||
|
|||||||
Reference in New Issue
Block a user