- SPI
- 接口列表
- 接口详情
- int32_t hal_spi_init(spi_dev_t *spi)
- int32_t hal_spi_send(spi_dev_t spi, const uint8_t data, uint16_t size, uint32_t timeout)
- int32_t hal_spi_recv(spi_dev_t spi, uint8_t data, uint16_t size, uint32_t timeout)
- int32_t hal_spi_send_recv(spi_dev_t spi, uint8_t tx_data, uint8_t *rx_data, uint16_t size, uint32_t timeout)
- int32_t hal_spi_finalize(spi_dev_t *spi)
- 相关宏定义
- 相关结数据结构
- 使用示例
SPI
更新时间:2019-01-25 14:42:05
接口列表
接口详情
int32_t hal_spi_init(spi_dev_t *spi)
描述 |
初始化指定SPI端口 |
参数 |
spi:SPI设备描述,定义需要初始化的SPI参数 |
返回值 |
返回成功或失败, 返回0表示SPI初始化成功,非0表示失败 |
int32_t hal_spi_send(spi_dev_t spi, const uint8_t data, uint16_t size, uint32_t timeout)
描述 |
从指定的SPI端口发送数据 |
参数 |
spi:SPI设备描述 |
|
data:指向要发送数据的数据指针 |
|
size:要发送的数据字节数 |
|
timeout:超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER |
返回值 |
返回成功或失败, 返回0表示SPI数据发送成功,非0表示失败 |
int32_t hal_spi_recv(spi_dev_t spi, uint8_t data, uint16_t size, uint32_t timeout)
描述 |
从指定的SPI端口接收数据 |
参数 |
spi:SPI设备描述 |
|
data:指向接收缓冲区的数据指针 |
|
size:期望接收的数据字节数 |
|
timeout:超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER |
返回值 |
返回成功或失败, 返回0表示成功接收size个数据,非0表示失败 |
int32_t hal_spi_send_recv(spi_dev_t spi, uint8_t tx_data, uint8_t *rx_data, uint16_t size, uint32_t timeout)
描述 |
从指定的SPI端口发送并接收数据 |
参数 |
spi:SPI设备描述 |
|
tx_data:指向接收缓冲区的数据指针 |
|
rx_data:指向发送缓冲区的数据指针 |
|
size:要发送和接收数据字节数 |
|
timeout:超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER |
返回值 |
返回成功或失败, 返回0表示成功发送和接收size个数据,非0表示失败 |
int32_t hal_spi_finalize(spi_dev_t *spi)
描述 |
关闭指定SPI端口 |
参数 |
spi:SPI设备描述 |
返回值 |
类型:int 返回成功或失败, 返回0表示SPI关闭成功,非0表示失败。 |
相关宏定义
#define HAL_SPI_MODE_MASTER 1
#define HAL_SPI_MODE_SLAVE 2
相关结数据结构
spi_dev_t
typedef struct {
uint8_t port;
spi_config_t config;
void *priv;
} spi_dev_t;
spi_config_t
typedef struct {
uint32_t mode;
uint32_t freq;
} spi_config_t;
使用示例
#include <aos/hal/spi.h>
#define SPI1_PORT_NUM 1
#define SPI_BUF_SIZE 10
#define SPI_TX_TIMEOUT 10
#define SPI_RX_TIMEOUT 10
spi_dev_t spi1;
char spi_data_buf[SPI_BUF_SIZE];
int application_start(int argc, char *argv[])
{
int count = 0;
int ret = -1;
int i = 0;
int rx_size = 0;
spi1.port = SPI1_PORT_NUM;
spi1.config.mode = HAL_SPI_MODE_MASTER;
spi1.config.freq = 30000000;
ret = hal_spi_init(&spi1);
if (ret != 0) {
printf("spi1 init error !\n");
}
for (i = 0; i < SPI_BUF_SIZE; i++) {
spi_data_buf[i] = i + 1;
}
ret = hal_spi_send(&spi1, spi_data_buf, SPI_BUF_SIZE, SPI_TX_TIMEOUT);
if (ret == 0) {
printf("spi1 data send succeed !\n");
}
while(1) {
ret = hal_spi_recv(&spi1, spi_data_buf, SPI_BUF_SIZE, SPI_RX_TIMEOUT);
if (ret == 0) {
printf("spi1 data received succeed !\n");
}
aos_msleep(100);
};
}
注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现
移植说明
新建hal_spi_xxmcu.c和hal_spi_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_spi_xxmcu.c中实现所需要的hal函数,hal_spi_xxmcu.h中放置相关宏定义。<br /> 参考platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal_spi_stm32l4.c