灵动微MM32SPIN27xx的I2C从机"/>
基于灵动微MM32SPIN27xx的I2C从机
翻遍了网络,国产MCU的资源还是较少,就贡献一个吧
使用了国产的RT-thread操作系统+M0的单片机,在灵动微MM32SPIN27上实现的硬件I2C从机,有需要的朋友拿去,根据情况改改可用
1.头文件
/******************************************************************************************
* 文件 名: drv_i2c_slave.h
* 文件描述: i2c从机驱动程序头文件
* 文件版本: V1.2
* 日 期: 2021/04/19
* 作 者: 何江
* 版本记录
* 2021/04/19:第一次发布
*
*
******************************************************************************************/
#ifndef __DRV_I2C_SLAVE_H__
#define __DRV_I2C_SLAVE_H__
/******************************************************************************************
头文件包含
*******************************************************************************************/
#include "HAL_device.h"
#include "HAL_conf.h"
#include "config.h"
/******************************************************************************************
宏定义
*******************************************************************************************/
#define USING_I2C1 1
#define USING_I2C2 0
#define I2C_SLAVE_WADDR 0xA0
#define I2C_SLAVE_RADDR 0xA1
#define I2C_SLAVE_TX_BUF_SIZE 36
#define I2C_SLAVE_RX_BUF_SIZE 36
/******************************************************************************************
全局变量
*******************************************************************************************/
//i2c工作状态机
typedef enum{
I2C_IDLE, //I2C空闲
I2C_ADDR_MATCH, //地址匹配
I2C_RECV_DATA, //接收数据
I2C_TRAN_DATA, //发送数据
}i2c_sstatus_t;
//i2c设备从机属性结构
typedef struct{
I2C_TypeDef *device;
i2c_sstatus_t status;
int8u_t recv_buffer[I2C_SLAVE_RX_BUF_SIZE];
int8u_t tran_buffer[I2C_SLAVE_TX_BUF_SIZE];
int8u_t *precv_buf;
int8u_t *ptran_buf;
int16s_t recv_count;
int16s_t tran_count;
}i2c_slave_t;
#if (USING_I2C1)
extern i2c_slave_t i2c1_slave_dev;
#endif
#if (USING_I2C2)
extern i2c_slave_t i2c2_slave_dev;
#endif
/******************************************************************************************
功能函数
*******************************************************************************************/
void i2c_slave_init(i2c_slave_t *pdev,int8u_t numb);
int16s_t i2c_slave_read_recv_data(i2c_slave_t *pdev,int8u_t *pd);
int16s_t i2c_slave_write_txbuffer_nbyte(i2c_slave_t *pdev,int16s_t index,int8u_t *pd,int16s_t count);
int16s_t i2c_slave_read_txbuffer_nbyte(i2c_slave_t *pdev,int16s_t index,int8u_t *pd,int16s_t count);
#endif
/******************************************************************************************
end file
***********************************************************************************
更多推荐
基于灵动微MM32SPIN27xx的I2C从机
发布评论