libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
stm32_spi.hpp
1#pragma once
2
3#include <cstring>
4
5#include "main.h"
6
7#ifdef HAL_SPI_MODULE_ENABLED
8
9#ifdef SPI
10#undef SPI
11#endif
12
13#include "libxr_def.hpp"
14#include "libxr_rw.hpp"
15#include "spi.hpp"
16
17typedef enum
18{
19#ifdef SPI1
20 STM32_SPI1,
21#endif
22#ifdef SPI2
23 STM32_SPI2,
24#endif
25#ifdef SPI3
26 STM32_SPI3,
27#endif
28#ifdef SPI4
29 STM32_SPI4,
30#endif
31#ifdef SPI5
32 STM32_SPI5,
33#endif
34#ifdef SPI6
35 STM32_SPI6,
36#endif
37#ifdef SPI7
38 STM32_SPI7,
39#endif
40#ifdef SPI8
41 STM32_SPI8,
42#endif
43 STM32_SPI_NUMBER,
44 STM32_SPI_ID_ERROR
45} stm32_spi_id_t;
46
47stm32_spi_id_t STM32_SPI_GetID(SPI_TypeDef* addr); // NOLINT
48
49namespace LibXR
50{
54class STM32SPI : public SPI
55{
56 public:
60 STM32SPI(SPI_HandleTypeDef* spi_handle, RawData dma_buff_rx, RawData dma_buff_tx,
61 uint32_t dma_enable_min_size = 3);
62
63 ErrorCode ReadAndWrite(RawData read_data, ConstRawData write_data, OperationRW& op,
64 bool in_isr) override;
65
66 ErrorCode SetConfig(SPI::Configuration config) override;
67
68 ErrorCode MemRead(uint16_t reg, RawData read_data, OperationRW& op,
69 bool in_isr) override;
70
71 ErrorCode MemWrite(uint16_t reg, ConstRawData write_data, OperationRW& op,
72 bool in_isr) override;
73
74 uint32_t GetMaxBusSpeed() const override;
75
76 Prescaler GetMaxPrescaler() const override;
77
78 ErrorCode Transfer(size_t size, OperationRW& op, bool in_isr) override;
79
80 SPI_HandleTypeDef* spi_handle_;
81
82 stm32_spi_id_t id_ = STM32_SPI_ID_ERROR;
83
84 uint32_t dma_enable_min_size_ = 3;
85
86 OperationRW rw_op_;
87
88 RawData read_buff_;
89
90 bool mem_read_ = false;
91
92 static STM32SPI* map[STM32_SPI_NUMBER]; // NOLINT
93};
94
95} // namespace LibXR
96
97#endif
常量原始数据封装类。 A class for encapsulating constant raw data.
原始数据封装类。 A class for encapsulating raw data.
串行外设接口(SPI)抽象类。Abstract class for Serial Peripheral Interface (SPI).
Definition spi.hpp:14
STM32 SPI 驱动实现 / STM32 SPI driver implementation.
Definition stm32_spi.hpp:55
ErrorCode MemWrite(uint16_t reg, ConstRawData write_data, OperationRW &op, bool in_isr) override
向 SPI 设备的寄存器写入数据。 Writes data to a specific register of the SPI device.
ErrorCode MemRead(uint16_t reg, RawData read_data, OperationRW &op, bool in_isr) override
从 SPI 设备的寄存器读取数据。 Reads data from a specific register of the SPI device.
STM32SPI(SPI_HandleTypeDef *spi_handle, RawData dma_buff_rx, RawData dma_buff_tx, uint32_t dma_enable_min_size=3)
构造 SPI 对象 / Construct SPI object
Definition stm32_spi.cpp:71
uint32_t GetMaxBusSpeed() const override
获取 SPI 设备的最大时钟速度。Gets the maximum clock speed of the SPI device.
ErrorCode Transfer(size_t size, OperationRW &op, bool in_isr) override
进行一次SPI传输(使用当前缓冲区数据,零拷贝,支持双缓冲)。 Performs a SPI transfer (zero-copy, supports double buffering).
ErrorCode SetConfig(SPI::Configuration config) override
设置 SPI 配置参数。Sets SPI configuration parameters.
Prescaler GetMaxPrescaler() const override
获取 SPI 设备的最大分频系数。Gets the maximum prescaler of the SPI device.
ErrorCode ReadAndWrite(RawData read_data, ConstRawData write_data, OperationRW &op, bool in_isr) override
进行 SPI 读写操作。Performs SPI read and write operations.
Definition stm32_spi.cpp:83
LibXR 命名空间
Definition ch32_can.hpp:14
存储 SPI 配置参数的结构体。Structure for storing SPI configuration parameters.
Definition spi.hpp:85