uint8_t cnn_conv2D_depthwise(uint32_t input_addr, uint32_t output_addr, uint32_t weight_addr, struct cnn_conv2D_config_bean *config);
时间: 2024-04-02 07:08:46 浏览: 10
这是一个函数声明,它的功能是进行深度卷积操作。其中,输入数据存储在input_addr指向的内存地址中,输出数据存储在output_addr指向的内存地址中,卷积核存储在weight_addr指向的内存地址中,config是卷积层的配置参数,包括卷积核大小、步长、填充方式等。函数返回一个8位无符号整数类型uint8_t,表示操作是否成功。
相关问题
ADS1115 STM32F103C8T6代码
以下是使用STM32F103C8T6控制ADS1115进行模拟转换的基本代码示例:
```c
#include "stm32f10x.h"
#include "delay.h"
#include "i2c.h"
#define ADS1115_ADDR 0x90
#define ADS1115_REG_CONV 0x00
#define ADS1115_REG_CONFIG 0x01
#define ADS1115_REG_LO_THRESH 0x02
#define ADS1115_REG_HI_THRESH 0x03
#define ADS1115_CONFIG_OS_SINGLE 0x8000
#define ADS1115_CONFIG_MUX_DIFF_0_1 0x0000
#define ADS1115_CONFIG_MUX_DIFF_2_3 0x1000
#define ADS1115_CONFIG_MUX_SINGLE_0 0x4000
#define ADS1115_CONFIG_MUX_SINGLE_1 0x5000
#define ADS1115_CONFIG_MUX_SINGLE_2 0x6000
#define ADS1115_CONFIG_MUX_SINGLE_3 0x7000
#define ADS1115_CONFIG_PGA_6_144 0x0000
#define ADS1115_CONFIG_PGA_4_096 0x0200
#define ADS1115_CONFIG_PGA_2_048 0x0400
#define ADS1115_CONFIG_PGA_1_024 0x0600
#define ADS1115_CONFIG_PGA_0_512 0x0800
#define ADS1115_CONFIG_PGA_0_256 0x0A00
#define ADS1115_CONFIG_MODE_SINGLE 0x0100
#define ADS1115_CONFIG_DR_128 0x0000
#define ADS1115_CONFIG_DR_250 0x0020
#define ADS1115_CONFIG_DR_490 0x0040
#define ADS1115_CONFIG_DR_920 0x0060
#define ADS1115_CONFIG_DR_1600 0x0080
#define ADS1115_CONFIG_DR_2400 0x00A0
#define ADS1115_CONFIG_DR_3300 0x00C0
#define ADS1115_CONFIG_CMODE_TRAD 0x0000
#define ADS1115_CONFIG_CPOL_ACTVLOW 0x0000
#define ADS1115_CONFIG_CLAT_NONLAT 0x0000
#define ADS1115_CONFIG_CQUE_NONE 0x0003
void ADS1115_Init(void)
{
I2C_Configuration();
}
void ADS1115_Convert(uint16_t config)
{
uint8_t txBuf[3];
txBuf[0] = ADS1115_REG_CONFIG;
txBuf[1] = config >> 8;
txBuf[2] = config & 0xFF;
I2C_WriteBytes(ADS1115_ADDR, txBuf, 3);
while (1)
{
I2C_ReadByte(ADS1115_ADDR, ADS1115_REG_CONFIG, txBuf);
if ((txBuf[0] & ADS1115_CONFIG_OS_SINGLE) == 0)
break;
}
}
int16_t ADS1115_Read(void)
{
uint8_t txBuf[2], rxBuf[2];
txBuf[0] = ADS1115_REG_CONV;
I2C_WriteBytes(ADS1115_ADDR, txBuf, 1);
I2C_ReadBytes(ADS1115_ADDR, txBuf, 2, rxBuf);
return ((int16_t)(rxBuf[0] << 8 | rxBuf[1]));
}
```
该示例代码需要使用I2C通信,需要先初始化I2C和延时函数。同时,需要先对ADS1115进行配置,然后才能进行模拟转换和读取转换结果。可以根据自己的需求修改配置参数。
基于stm32F103ZET6小系统板实现MS5837温深传感器的代码
以下是基于STM32F103ZET6小系统板实现MS5837温深传感器的代码,仅供参考:
```
#include "stm32f10x.h"
#include "delay.h"
#include "i2c.h"
#define MS5837_ADDR 0xEC // MS5837传感器地址
#define MS5837_CMD_RESET 0x1E // 复位命令
#define MS5837_CMD_CONV_D1_256 0x40 // 深度转换命令(256次采样)
#define MS5837_CMD_CONV_D2_256 0x50 // 温度转换命令(256次采样)
#define MS5837_CMD_PROM_READ 0xA0 // 读取补偿系数命令
#define MS5837_COEF_NUM 8 // 补偿系数数量
uint16_t ms5837_coef[MS5837_COEF_NUM]; // 补偿系数数组
// 初始化MS5837传感器
void MS5837_Init(void)
{
uint8_t cmd = MS5837_CMD_RESET;
I2C_Write(MS5837_ADDR, &cmd, 1);
DelayMs(10);
for(int i = 0; i < MS5837_COEF_NUM; i++)
{
cmd = MS5837_CMD_PROM_READ + i * 2;
I2C_Read(MS5837_ADDR, &cmd, 1, (uint8_t *)&ms5837_coef[i], 2);
}
}
// 读取温度或深度数据
uint32_t MS5837_Read(uint8_t cmd)
{
uint32_t data = 0;
I2C_Write(MS5837_ADDR, &cmd, 1);
switch(cmd)
{
case MS5837_CMD_CONV_D1_256:
DelayMs(20);
break;
case MS5837_CMD_CONV_D2_256:
DelayMs(20);
break;
default:
break;
}
I2C_Read(MS5837_ADDR, &cmd, 1, (uint8_t *)&data, 3);
return data;
}
// 计算温度值
float MS5837_CalculateTemperature(uint32_t D2)
{
int32_t dT = D2 - (ms5837_coef[5] << 8);
int32_t TEMP = 2000 + ((dT * ms5837_coef[6]) >> 23);
return (float)TEMP / 100;
}
// 计算深度值
float MS5837_CalculateDepth(uint32_t D1, uint32_t D2)
{
int64_t dT = D2 - (ms5837_coef[5] << 8);
int64_t SENS = ms5837_coef[1] + ((dT * ms5837_coef[3]) >> 7);
int64_t OFF = ms5837_coef[2] + ((dT * ms5837_coef[4]) >> 8);
int64_t P = ((D1 * SENS) >> 21) - OFF;
return (float)P / 10000;
}
int main(void)
{
float temperature, depth;
I2C_Init();
MS5837_Init();
while(1)
{
uint32_t D1 = MS5837_Read(MS5837_CMD_CONV_D1_256);
uint32_t D2 = MS5837_Read(MS5837_CMD_CONV_D2_256);
temperature = MS5837_CalculateTemperature(D2);
depth = MS5837_CalculateDepth(D1, D2);
// 将温度和深度值输出到串口
printf("Temperature: %.2f C\n", temperature);
printf("Depth: %.2f m\n", depth);
DelayMs(1000);
}
}
```
需要注意的是,以上代码只是一个大致的实现,具体实现还需要根据MS5837传感器的具体规格和STM32F103ZET6小系统板的具体接口来进行调整。