删除多余文件

This commit is contained in:
王绪洁 2025-02-19 11:14:17 +08:00
parent e9a38b4371
commit 669b31141d
10 changed files with 0 additions and 990 deletions

View File

@ -1,8 +0,0 @@
#ifndef _TCPCLIENT_H_
#define _TCPCLIENT_H_
#define TCP_CLIENT_PORT 5001
void TCP_Client_Init(void);
#endif

View File

@ -1,104 +0,0 @@
#include "lwip/netif.h"
#include "lwip/ip.h"
#include "lwip/tcp.h"
#include "lwip/init.h"
#include "netif/etharp.h"
#include "lwip/udp.h"
#include "lwip/pbuf.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
static void client_err(void *arg, err_t err) // 出现错误时调用这个函数,打印错误信息,并尝试重新连接
{
// printf("连接错误!!\n");
// printf("尝试重连!!\n");
// // 连接失败的时候释放TCP控制块的内存
// printf("关闭连接释放TCP控制块内存\n");
// // tcp_close(client_pcb);
// // 重新连接
// printf("重新初始化客户端\n");
TCP_Client_Init();
}
static err_t client_send(void *arg, struct tcp_pcb *tpcb) // 发送函数调用了tcp_write函数
{
// 定义一个用于发送的缓冲区
uint8_t send_buf[] = "be connected successfully\n";
// 发送数据到服务器
tcp_write(tpcb, send_buf, sizeof(send_buf), 1);
// 返回操作成功标志
return ERR_OK;
}
static err_t client_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
if (p != NULL)
{
/* 接收数据*/
tcp_recved(tpcb, p->tot_len);
/* 返回接收到的数据*/
tcp_write(tpcb, p->payload, p->tot_len, 1);
memset(p->payload, 0, p->tot_len);
pbuf_free(p);
}
else if (err == ERR_OK)
{
// 服务器断开连接
tcp_close(tpcb);
// 重新连接
TCP_Client_Init();
}
return ERR_OK;
}
/**
* @brief
*
*
*
* @param arg
* @param pcb TCP连接控制块指针
* @param err
*
* @return ERR_OK表示成功
*/
static err_t client_connected(void *arg, struct tcp_pcb *pcb, err_t err)
{
// 注册一个周期性回调函数
tcp_poll(pcb, client_send, 2);
// 注册一个接收函数
tcp_recv(pcb, client_recv);
return ERR_OK;
}
void TCP_Client_Init(void)
{
struct tcp_pcb *client_pcb = NULL; // 这一句一定要放在里面,否则会没用
ip4_addr_t server_ip; // 因为客户端要主动去连接服务器所以要知道服务器的IP地址
/* 创建一个TCP控制块 */
client_pcb = tcp_new();
IP4_ADDR(&server_ip, DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2, DEST_IP_ADDR3); // 合并IP地址
// printf("IP 地址为: %d.%d.%d.%d\n",
// ip4_addr1(&server_ip),
// ip4_addr2(&server_ip),
// ip4_addr3(&server_ip),
// ip4_addr4(&server_ip));
// printf("客户端开始连接!\n");
// 开始连接
tcp_connect(client_pcb, &server_ip, TCP_CLIENT_PORT, client_connected);
ip_set_option(client_pcb, SOF_KEEPALIVE);
// 注册异常处理
tcp_err(client_pcb, client_err);
}

View File

@ -1,455 +0,0 @@
#include "ad7124.h"
/* Error codes */
#define INVALID_VAL -1 /* Invalid argument */
#define COMM_ERR -2 /* Communication error on receive */
#define AD7124_TIMEOUT -3 /* A timeout has occured */
// 配置ad7124寄存器的值根据实际项目需求配置
static ad7124_st_reg_t ad7124_regs[AD7124_REG_NO] = {
{AD7124_STATUS, 0x00, AD7124_SIZE_1, AD7124_R}, /* AD7124_Status */
{AD7124_ADC_CONTROL, 0x0280, AD7124_SIZE_2, AD7124_RW}, /* AD7124_ADC_Control */
{AD7124_DATA, 0x000000, AD7124_SIZE_3, AD7124_R}, /* AD7124_Data */
{AD7124_IOCON1, 0x000000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_IOCon1 */
{AD7124_IOCON2, 0x0000, AD7124_SIZE_2, AD7124_RW}, /* AD7124_IOCon2 */
{AD7124_ID, 0x02, AD7124_SIZE_1, AD7124_R}, /* AD7124_ID */
{AD7124_ERROR, 0x000000, AD7124_SIZE_3, AD7124_R}, /* AD7124_Error */
{AD7124_ERROR_EN, 0x000040, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Error_En */
{AD7124_MCLK_COUNT, 0x00, AD7124_SIZE_1, AD7124_R}, /* AD7124_Mclk_Count */
{AD7124_CHANNEL_0, 0x0051, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_0 */
{AD7124_CHANNEL_1, 0x0071, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_1 */
{AD7124_CHANNEL_2, 0x0091, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_2 */
{AD7124_CHANNEL_3, 0x00B1, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_3 */
{AD7124_CHANNEL_4, 0x00D1, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_4 */
{AD7124_CHANNEL_5, 0x00F1, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_5 */
{AD7124_CHANNEL_6, 0x0111, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_6 */
{AD7124_CHANNEL_7, 0x0131, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_7 */
{AD7124_CHANNEL_8, 0x0151, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_8 */
{AD7124_CHANNEL_9, 0x0171, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_9 */
{AD7124_CHANNEL_10, 0x0001, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_10 */
{AD7124_CHANNEL_11, 0x0001, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_11 */
{AD7124_CHANNEL_12, 0x0001, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_12 */
{AD7124_CHANNEL_13, 0x0001, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_13 */
{AD7124_CHANNEL_14, 0x0001, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_14 */
{AD7124_CHANNEL_15, 0x0001, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_15 */
{AD7124_CONFIG_0, 0x01E0, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_0 */
{AD7124_CONFIG_1, 0x0040, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_1 */
{AD7124_CONFIG_2, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_2 */
{AD7124_CONFIG_3, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_3 */
{AD7124_CONFIG_4, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_4 */
{AD7124_CONFIG_5, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_5 */
{AD7124_CONFIG_6, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_6 */
{AD7124_CONFIG_7, 0x0860, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Config_7 */
{AD7124_FILTER_0, 0x060080, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_0 */
{AD7124_FILTER_1, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_1 */
{AD7124_FILTER_2, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_2 */
{AD7124_FILTER_3, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_3 */
{AD7124_FILTER_4, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_4 */
{AD7124_FILTER_5, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_5 */
{AD7124_FILTER_6, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_6 */
{AD7124_FILTER_7, 0x060180, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Filter_7 */
{AD7124_OFFSET_0, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_0 */
{AD7124_OFFSET_1, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_1 */
{AD7124_OFFSET_2, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_2 */
{AD7124_OFFSET_3, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_3 */
{AD7124_OFFSET_4, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_4 */
{AD7124_OFFSET_5, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_5 */
{AD7124_OFFSET_6, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_6 */
{AD7124_OFFSET_7, 0x800000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Offset_7 */
{AD7124_GAIN_0, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_0 */
{AD7124_GAIN_1, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_1 */
{AD7124_GAIN_2, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_2 */
{AD7124_GAIN_3, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_3 */
{AD7124_GAIN_4, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_4 */
{AD7124_GAIN_5, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_5 */
{AD7124_GAIN_6, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_6 */
{AD7124_GAIN_7, 0x500000, AD7124_SIZE_3, AD7124_RW}, /* AD7124_Gain_7 */
};
static ad7124_st_reg_t ad7124_channel_regs[AD7124_CHANNEL_EN_MAX] = {
{AD7124_CHANNEL_0, 0x8051, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_0 */
{AD7124_CHANNEL_1, 0x8071, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_1 */
{AD7124_CHANNEL_2, 0x8091, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_2 */
{AD7124_CHANNEL_3, 0x80B1, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_3 */
{AD7124_CHANNEL_4, 0x80D1, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_4 */
{AD7124_CHANNEL_5, 0x80F1, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_5 */
{AD7124_CHANNEL_6, 0x8111, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_6 */
{AD7124_CHANNEL_7, 0x8131, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_7 */
{AD7124_CHANNEL_8, 0x8151, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_8 */
{AD7124_CHANNEL_9, 0x8171, AD7124_SIZE_2, AD7124_RW}, /* AD7124_Channel_9 */
};
ad7124_analog_t ad7124_analog[AD7124_CHANNEL_EN_MAX] = {NULL}; // AD通道采样结构体数组用于存放AD通道采样数据
/**
* @brief AD7124寄存器
*
* AD7124的寄存器值
*
* @param p_reg
*
* @return 0
*/
int32_t ad7124_no_check_read_register(ad7124_st_reg_t *p_reg)
{
int32_t ret = 0;
uint8_t buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint8_t i = 0;
uint8_t add_status_length = 0;
/* Build the Command word */
buffer[0] = AD7124_COMM_REG_WEN | AD7124_COMM_REG_RD |
AD7124_COMM_REG_RA(p_reg->addr);
/*
* If this is an AD7124_DATA register read, and the DATA_STATUS bit is set
* in ADC_CONTROL, need to read 4, not 3 bytes for DATA with STATUS
*/
if ((p_reg->addr == AD7124_DATA) &&
(ad7124_regs[AD7124_ADC_CONTROL].value & AD7124_ADC_CTRL_REG_DATA_STATUS))
{
add_status_length = 1; // 此处是根据寄存器配置而决定,根据AD7124_ADC_CONTROL第10位决定
}
/* Read data from the device */
ret = ad7124_read_write_spi(buffer, p_reg->size + 1 + add_status_length);
if (ret < 0)
return ret;
/*
* if reading Data with 4 bytes, need to copy the status byte to the STATUS
* register struct value member
*/
if (add_status_length)
{
ad7124_regs[AD7124_STATUS].value = buffer[p_reg->size + 1];
}
/* Build the result */
p_reg->value = 0;
for (i = 1; i < p_reg->size + 1; i++)
{
p_reg->value <<= 8;
p_reg->value += buffer[i];
}
return ret;
}
/**
* @brief AD7124寄存器写入数据
*
* AD7124寄存器
*
* @param reg
* @return 0
*/
int32_t ad7124_no_check_write_register(ad7124_st_reg_t *reg)
{
int32_t ret = 0;
int32_t reg_value = 0;
uint8_t wr_buf[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint8_t i = 0;
/* Build the Command word */
wr_buf[0] = AD7124_COMM_REG_WEN | AD7124_COMM_REG_WR |
AD7124_COMM_REG_RA(reg->addr);
/* Fill the write buffer */
reg_value = reg->value;
for (i = 0; i < reg->size; i++)
{
wr_buf[reg->size - i] = reg_value & 0xFF;
reg_value >>= 8;
}
/* Write data to the device */
ret = ad7124_read_write_spi(wr_buf, reg->size + 1);
return ret;
}
/**
* @brief AD7124寄存器读取数据
*
* AD7124的指定寄存器中读取数据
*
* @param p_reg ad7124_st_reg_t类型的指针
*
* @return
*
* ERROR寄存器的SPI_IGNORE_ERR位
*/
int32_t ad7124_read_register(ad7124_st_reg_t *p_reg)
{
int32_t ret;
if (p_reg->addr != AD7124_ERROR && (ad7124_regs[AD7124_ERROR_EN].value & AD7124_ERREN_REG_SPI_IGNORE_ERR_EN))
{
ret = ad7124_wait_for_spi_ready(AD7124_RDY); // 读寄存器之前检查ERROR寄存器的SPI_IGNORE_ERR位
if (ret < 0)
return ret;
}
ret = ad7124_no_check_read_register(p_reg);
return ret;
}
/**
* @brief AD7124寄存器写入数据
*
* AD7124的指定寄存器SPI错误的功能SPI接口准备就绪
*
* @param p_reg
*
* @return 0
*/
int32_t ad7124_write_register(ad7124_st_reg_t *p_reg)
{
int32_t ret;
if ((ad7124_regs[AD7124_ERROR_EN].value & AD7124_ERREN_REG_SPI_IGNORE_ERR_EN))
{
ret = ad7124_wait_for_spi_ready(AD7124_RDY);
if (ret < 0)
return ret;
}
ret = ad7124_no_check_write_register(p_reg);
return ret;
}
/**
* @brief AD7124设备
*
* SPI接口向AD7124发送重置命令
*
* @return 0
*/
int32_t ad7124_reset(void)
{
int32_t ret = 0;
uint8_t wr_buf[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // 发送64个1复位ad7124芯片
ret = ad7124_read_write_spi(wr_buf, 8);
/* Read POR bit to clear */
ret = ad7124_wait_to_power_on(AD7124_RDY);
return ret;
}
/**
* @brief SPI接口准备就绪
*
* AD7124的SPI接口准备就绪
*
* @param timeout
* @return 0AD7124_TIMEOUT
*/
int32_t ad7124_wait_for_spi_ready(uint32_t timeout)
{
int32_t ret;
int8_t ready = 0;
while (!ready && --timeout)
{
/* Read the value of the Error Register */
ret = ad7124_read_register(&ad7124_regs[AD7124_ERROR]);
if (ret < 0)
return ret;
/* Check the SPI IGNORE Error bit in the Error Register */
ready = (ad7124_regs[AD7124_ERROR].value &
AD7124_ERR_REG_SPI_IGNORE_ERR) == 0;
}
return timeout ? 0 : AD7124_TIMEOUT;
}
/**
* @brief AD7124电源开启
*
* AD7124设备电源开启
*
* @param timeout
*
* @return 0AD7124_TIMEOUT表示超时
*/
int32_t ad7124_wait_to_power_on(uint32_t timeout)
{
int32_t ret;
int8_t powered_on = 0;
while (!powered_on && timeout--)
{
ret = ad7124_read_register(&ad7124_regs[AD7124_STATUS]);
if (ret < 0)
return ret;
/* Check the POR_FLAG bit in the Status Register */
powered_on = (ad7124_regs[AD7124_STATUS].value &
AD7124_STATUS_REG_POR_FLAG) == 0;
}
return (timeout || powered_on) ? 0 : AD7124_TIMEOUT;
}
/**
* @brief AD7124转换准备就绪
*
* AD7124完成转换并准备就绪
*
* @param timeout
* @return 0AD7124_TIMEOUT
*/
int32_t ad7124_wait_for_conv_ready(uint32_t timeout)
{
int32_t ret;
int8_t ready = 0;
while (!ready && --timeout)
{
/* Read the value of the Status Register */
ret = ad7124_read_register(&ad7124_regs[AD7124_STATUS]);
if (ret < 0)
return ret;
/* Check the RDY bit in the Status Register */
ready = (ad7124_regs[AD7124_STATUS].value &
AD7124_STATUS_REG_RDY) == 0;
}
return timeout ? 0 : AD7124_TIMEOUT;
}
/**
* @brief AD7124读取数据
*
* AD7124的数据寄存器中读取数据值
*
* @return
*/
int32_t ad7124_read_data(void)
{
int32_t read_data;
/* Read the value of the Status Register */
ad7124_read_register(&ad7124_regs[AD7124_DATA]);
/* Get the read result */
read_data = ad7124_regs[AD7124_DATA].value;
return read_data;
}
/**
* @brief AD7124获取模拟信号数据
*
* SPI接口从AD7124芯片获取模拟信号数据ad7124_analog中
*
* @details
* -
* - AD7124完成转换
* -
* -
* -
*
* @note
* - ad7124_analog中
* - Code = (0xFFFFFF × AIN × Gain)/VREFVREF为参考电压GAIN为增益AD_CODE为AD代码
* - = / * 1000AD7124_RESmA
*/
// void ad7124_get_analog(void)
// {
// int32_t read_data;
// uint8_t i;
// uint8_t channel;
// // for (i = STOP_NC_ADC; i < AD7124_CHANNEL_EN_MAX; i++)
// // {
// // ad7124_regs[AD7124_CHANNEL_0].value = ad7124_channel_regs[i].value;
// // ad7124_write_register(&ad7124_regs[AD7124_CHANNEL_0]);
// // ad7124_read_register(&ad7124_regs[AD7124_STATUS]);
// while (ad7124_wait_for_conv_ready(AD7124_RDY))
// ; // 等待转换完成
// channel = ad7124_regs[AD7124_STATUS].value;
// ad7124_analog[channel].channel = channel;
// read_data = ad7124_read_data();
// ad7124_analog[channel].data = read_data;
// ad7124_analog[channel].voltage = (float)(read_data * VREF / GAIN / AD_CODE); // AD7124单极性计算公式Code = (0xFFFFFF × AIN × Gain)/VREF
// ad7124_analog[channel].current = (float)(ad7124_analog[channel].voltage / AD7124_RES * 1000); // 乘1000是为了将单位转换为mA
// // ad7124_regs[AD7124_CHANNEL_0].value = 0;
// // ad7124_write_register(&ad7124_regs[AD7124_CHANNEL_0]);
// // }
// }
void ad7124_get_analog(uint8_t channel_nr)
{
int32_t read_data;
// for (i = STOP_NC_ADC; i < AD7124_CHANNEL_EN_MAX; i++)
// {
ad7124_regs[AD7124_CHANNEL_0].value = ad7124_channel_regs[channel_nr].value;
ad7124_write_register(&ad7124_regs[AD7124_CHANNEL_0]);
while (ad7124_wait_for_conv_ready(AD7124_RDY))
; // 等待转换完成
ad7124_analog[channel_nr].channel = channel_nr;
read_data = ad7124_read_data();
ad7124_analog[channel_nr].data = read_data;
ad7124_analog[channel_nr].voltage = (float)(read_data * VREF / GAIN / AD_CODE); // AD7124单极性计算公式Code = (0xFFFFFF × AIN × Gain)/VREF
ad7124_analog[channel_nr].current = (float)(ad7124_analog[channel_nr].voltage / AD7124_RES * 1000); // 乘1000是为了将单位转换为mA
ad7124_regs[AD7124_CHANNEL_0].value = 0;
ad7124_write_register(&ad7124_regs[AD7124_CHANNEL_0]);
// }
}
/**
* @brief AD7124设备
*
* AD7124设备
*
* @return 0
*/
int32_t ad7124_setup(void)
{
int32_t ret;
uint8_t reg_nr;
// board_spi_init(AD7124); // 初始化SPI,因为DAC161的SPI要和AD7124共用并且时序不一样所以要先初始化SPI接口。
/* Reset the device interface.*/
ret = ad7124_reset();
if (ret < 0)
return ret;
HAL_Delay(10);
ad7124_read_register(&ad7124_regs[AD7124_ID]);
/* Initialize registers AD7124_ADC_Control through AD7124_Filter_7. */
for (reg_nr = AD7124_STATUS; reg_nr < AD7124_OFFSET_0; reg_nr++) // 对ad7124的可写寄存器进行配置不包括只读寄存器
{
// ret = ad7124_read_register(&ad7124_regs[reg_nr]);
if (ad7124_regs[reg_nr].rw == AD7124_RW)
{
ret = ad7124_write_register(&ad7124_regs[reg_nr]);
ret = ad7124_read_register(&ad7124_regs[reg_nr]);
if (ret < 0)
break;
}
}
HAL_GPIO_WritePin(AD7124_SYNC_GPIO_Port, AD7124_SYNC_Pin, GPIO_PIN_SET); // AD7124同步信号使能
return ret;
}
/**
* @brief SPI接口对AD7124进行读写操作
*
* SPI接口对AD7124进行读写操作
*
* @param buff
* @param length
*
* @return 0
*/
int32_t ad7124_read_write_spi(uint8_t *buff, uint8_t length)
{
int32_t ret;
board_spi_init(AD7124); // 初始化SPI,因为DAC161的SPI要和AD7124共用并且时序不一样所以要先初始化SPI接口。
board_spi_cs_on(AD7124);
ret = spi_transmit_receive(&hspi1, buff, length);
board_spi_cs_off(AD7124);
return ret;
}

View File

@ -1,308 +0,0 @@
#ifndef __AD7124_H
#define __AD7124_H
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
#include "main.h"
#include "user_spi.h"
/******************************************************************************/
/******************* Register map and register definitions ********************/
/******************************************************************************/
/* Communication Register bits */
#define AD7124_COMM_REG_WEN (0 << 7)
#define AD7124_COMM_REG_WR (0 << 6)
#define AD7124_COMM_REG_RD (1 << 6)
#define AD7124_COMM_REG_RA(x) ((x) & 0x3F)
/* Status Register bits */
#define AD7124_STATUS_REG_RDY (1 << 7)
#define AD7124_STATUS_REG_ERROR_FLAG (1 << 6)
#define AD7124_STATUS_REG_POR_FLAG (1 << 4)
#define AD7124_STATUS_REG_CH_ACTIVE(x) ((x) & 0xF)
/* ADC_Control Register bits */
#define AD7124_ADC_CTRL_REG_DOUT_RDY_DEL (1 << 12)
#define AD7124_ADC_CTRL_REG_CONT_READ (1 << 11)
#define AD7124_ADC_CTRL_REG_DATA_STATUS (1 << 10)
#define AD7124_ADC_CTRL_REG_CS_EN (1 << 9)
#define AD7124_ADC_CTRL_REG_REF_EN (1 << 8)
#define AD7124_ADC_CTRL_REG_POWER_MODE(x) (((x) & 0x3) << 6)
#define AD7124_ADC_CTRL_REG_MODE(x) (((x) & 0xF) << 2)
#define AD7124_ADC_CTRL_REG_CLK_SEL(x) (((x) & 0x3) << 0)
/* IO_Control_1 Register bits */
#define AD7124_IO_CTRL1_REG_GPIO_DAT2 (1 << 23)
#define AD7124_IO_CTRL1_REG_GPIO_DAT1 (1 << 22)
#define AD7124_IO_CTRL1_REG_GPIO_CTRL2 (1 << 19)
#define AD7124_IO_CTRL1_REG_GPIO_CTRL1 (1 << 18)
#define AD7124_IO_CTRL1_REG_PDSW (1 << 15)
#define AD7124_IO_CTRL1_REG_IOUT1(x) (((x) & 0x7) << 11)
#define AD7124_IO_CTRL1_REG_IOUT0(x) (((x) & 0x7) << 8)
#define AD7124_IO_CTRL1_REG_IOUT_CH1(x) (((x) & 0xF) << 4)
#define AD7124_IO_CTRL1_REG_IOUT_CH0(x) (((x) & 0xF) << 0)
/* IO_Control_1 AD7124-8 specific bits */
#define AD7124_8_IO_CTRL1_REG_GPIO_DAT4 (1 << 23)
#define AD7124_8_IO_CTRL1_REG_GPIO_DAT3 (1 << 22)
#define AD7124_8_IO_CTRL1_REG_GPIO_DAT2 (1 << 21)
#define AD7124_8_IO_CTRL1_REG_GPIO_DAT1 (1 << 20)
#define AD7124_8_IO_CTRL1_REG_GPIO_CTRL4 (1 << 19)
#define AD7124_8_IO_CTRL1_REG_GPIO_CTRL3 (1 << 18)
#define AD7124_8_IO_CTRL1_REG_GPIO_CTRL2 (1 << 17)
#define AD7124_8_IO_CTRL1_REG_GPIO_CTRL1 (1 << 16)
/* IO_Control_2 Register bits */
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS7 (1 << 15)
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS6 (1 << 14)
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS5 (1 << 11)
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS4 (1 << 10)
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS3 (1 << 5)
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS2 (1 << 4)
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS1 (1 << 1)
#define AD7124_IO_CTRL2_REG_GPIO_VBIAS0 (1 << 0)
/* IO_Control_2 AD7124-8 specific bits */
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS15 (1 << 15)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS14 (1 << 14)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS13 (1 << 13)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS12 (1 << 12)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS11 (1 << 11)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS10 (1 << 10)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS9 (1 << 9)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS8 (1 << 8)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS7 (1 << 7)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS6 (1 << 6)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS5 (1 << 5)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS4 (1 << 4)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS3 (1 << 3)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS2 (1 << 2)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS1 (1 << 1)
#define AD7124_8_IO_CTRL2_REG_GPIO_VBIAS0 (1 << 0)
/* ID Register bits */
#define AD7124_ID_REG_DEVICE_ID(x) (((x) & 0xF) << 4)
#define AD7124_ID_REG_SILICON_REV(x) (((x) & 0xF) << 0)
/* Error Register bits */
#define AD7124_ERR_REG_LDO_CAP_ERR (1 << 19)
#define AD7124_ERR_REG_ADC_CAL_ERR (1 << 18)
#define AD7124_ERR_REG_ADC_CONV_ERR (1 << 17)
#define AD7124_ERR_REG_ADC_SAT_ERR (1 << 16)
#define AD7124_ERR_REG_AINP_OV_ERR (1 << 15)
#define AD7124_ERR_REG_AINP_UV_ERR (1 << 14)
#define AD7124_ERR_REG_AINM_OV_ERR (1 << 13)
#define AD7124_ERR_REG_AINM_UV_ERR (1 << 12)
#define AD7124_ERR_REG_REF_DET_ERR (1 << 11)
#define AD7124_ERR_REG_DLDO_PSM_ERR (1 << 9)
#define AD7124_ERR_REG_ALDO_PSM_ERR (1 << 7)
#define AD7124_ERR_REG_SPI_IGNORE_ERR (1 << 6)
#define AD7124_ERR_REG_SPI_SLCK_CNT_ERR (1 << 5)
#define AD7124_ERR_REG_SPI_READ_ERR (1 << 4)
#define AD7124_ERR_REG_SPI_WRITE_ERR (1 << 3)
#define AD7124_ERR_REG_SPI_CRC_ERR (1 << 2)
#define AD7124_ERR_REG_MM_CRC_ERR (1 << 1)
#define AD7124_ERR_REG_ROM_CRC_ERR (1 << 0)
/* Error_En Register bits */
#define AD7124_ERREN_REG_MCLK_CNT_EN (1 << 22)
#define AD7124_ERREN_REG_LDO_CAP_CHK_TEST_EN (1 << 21)
#define AD7124_ERREN_REG_LDO_CAP_CHK(x) (((x) & 0x3) << 19)
#define AD7124_ERREN_REG_ADC_CAL_ERR_EN (1 << 18)
#define AD7124_ERREN_REG_ADC_CONV_ERR_EN (1 << 17)
#define AD7124_ERREN_REG_ADC_SAT_ERR_EN (1 << 16)
#define AD7124_ERREN_REG_AINP_OV_ERR_EN (1 << 15)
#define AD7124_ERREN_REG_AINP_UV_ERR_EN (1 << 14)
#define AD7124_ERREN_REG_AINM_OV_ERR_EN (1 << 13)
#define AD7124_ERREN_REG_AINM_UV_ERR_EN (1 << 12)
#define AD7124_ERREN_REG_REF_DET_ERR_EN (1 << 11)
#define AD7124_ERREN_REG_DLDO_PSM_TRIP_TEST_EN (1 << 10)
#define AD7124_ERREN_REG_DLDO_PSM_ERR_ERR (1 << 9)
#define AD7124_ERREN_REG_ALDO_PSM_TRIP_TEST_EN (1 << 8)
#define AD7124_ERREN_REG_ALDO_PSM_ERR_EN (1 << 7)
#define AD7124_ERREN_REG_SPI_IGNORE_ERR_EN (1 << 6)
#define AD7124_ERREN_REG_SPI_SCLK_CNT_ERR_EN (1 << 5)
#define AD7124_ERREN_REG_SPI_READ_ERR_EN (1 << 4)
#define AD7124_ERREN_REG_SPI_WRITE_ERR_EN (1 << 3)
#define AD7124_ERREN_REG_SPI_CRC_ERR_EN (1 << 2)
#define AD7124_ERREN_REG_MM_CRC_ERR_EN (1 << 1)
#define AD7124_ERREN_REG_ROM_CRC_ERR_EN (1 << 0)
/* Channel Registers 0-15 bits */
#define AD7124_CH_MAP_REG_CH_ENABLE (1 << 15)
#define AD7124_CH_MAP_REG_SETUP(x) (((x) & 0x7) << 12)
#define AD7124_CH_MAP_REG_AINP(x) (((x) & 0x1F) << 5)
#define AD7124_CH_MAP_REG_AINM(x) (((x) & 0x1F) << 0)
/* Configuration Registers 0-7 bits */
#define AD7124_CFG_REG_BIPOLAR (1 << 11)
#define AD7124_CFG_REG_BURNOUT(x) (((x) & 0x3) << 9)
#define AD7124_CFG_REG_REF_BUFP (1 << 8)
#define AD7124_CFG_REG_REF_BUFM (1 << 7)
#define AD7124_CFG_REG_AIN_BUFP (1 << 6)
#define AD7124_CFG_REG_AINN_BUFM (1 << 5)
#define AD7124_CFG_REG_REF_SEL(x) ((x) & 0x3) << 3
#define AD7124_CFG_REG_PGA(x) (((x) & 0x7) << 0)
/* Filter Register 0-7 bits */
#define AD7124_FILT_REG_FILTER(x) (((x) & 0x7) << 21)
#define AD7124_FILT_REG_REJ60 (1 << 20)
#define AD7124_FILT_REG_POST_FILTER(x) (((x) & 0x7) << 17)
#define AD7124_FILT_REG_SINGLE_CYCLE (1 << 16)
#define AD7124_FILT_REG_FS(x) (((x) & 0x7FF) << 0)
/******************************************************************************/
/*************************** Types Declarations *******************************/
/******************************************************************************/
/*! AD7124 registers list*/
typedef enum
{
AD7124_STATUS = 0X00, // 只读的状态寄存器,读取芯片状态
AD7124_ADC_CONTROL, // 控制寄存器,设置采样速率等
AD7124_DATA, // 数据寄存器,读取采样数据
AD7124_IOCON1, // 设置激励电流等参数用作RTD测试时可用
AD7124_IOCON2, // 使能偏置电压
AD7124_ID, // ID寄存器部分芯片的ID和手册上有所区别可用此寄存器测试SPI通讯
AD7124_ERROR, // 错误寄存器,读取错误信息,读写寄存器之前先读下该寄存器,检测芯片状态是否支持读写
AD7124_ERROR_EN, // 通过使能该寄存器的相应位来使能或者禁用诊断功能
AD7124_MCLK_COUNT, // 监控主时钟频率
AD7124_CHANNEL_0, // 设置AD采样通道和所需要的配置其中的Setup位决定了采用哪种Config、Filter、Offset、Gain寄存器的配置共有八种配置
AD7124_CHANNEL_1, // 通道寄存器的顺序并不是从AI0引脚读到最后一个引脚而是通过自己的设置来决定顺序
AD7124_CHANNEL_2,
AD7124_CHANNEL_3,
AD7124_CHANNEL_4,
AD7124_CHANNEL_5,
AD7124_CHANNEL_6,
AD7124_CHANNEL_7,
AD7124_CHANNEL_8,
AD7124_CHANNEL_9,
AD7124_CHANNEL_10,
AD7124_CHANNEL_11,
AD7124_CHANNEL_12,
AD7124_CHANNEL_13,
AD7124_CHANNEL_14,
AD7124_CHANNEL_15,
AD7124_CONFIG_0, // 配置极性,增益,基准选择等参数
AD7124_CONFIG_1,
AD7124_CONFIG_2,
AD7124_CONFIG_3,
AD7124_CONFIG_4,
AD7124_CONFIG_5,
AD7124_CONFIG_6,
AD7124_CONFIG_7,
AD7124_FILTER_0,
AD7124_FILTER_1, // 配置滤波器
AD7124_FILTER_2,
AD7124_FILTER_3,
AD7124_FILTER_4,
AD7124_FILTER_5,
AD7124_FILTER_6,
AD7124_FILTER_7,
AD7124_OFFSET_0,
AD7124_OFFSET_1,
AD7124_OFFSET_2,
AD7124_OFFSET_3,
AD7124_OFFSET_4,
AD7124_OFFSET_5,
AD7124_OFFSET_6,
AD7124_OFFSET_7,
AD7124_GAIN_0,
AD7124_GAIN_1,
AD7124_GAIN_2,
AD7124_GAIN_3,
AD7124_GAIN_4,
AD7124_GAIN_5,
AD7124_GAIN_6,
AD7124_GAIN_7,
AD7124_REG_NO
} ad7124_registers_addr_e; // 寄存器地址
typedef enum
{
AD7124_SIZE_1 = 1,
AD7124_SIZE_2 = 2,
AD7124_SIZE_3 = 3,
} ad7124_registers_size_e; // 寄存器字节大小
typedef enum
{
AD7124_RW = 1,
AD7124_R = 2,
AD7124_W = 3,
} ad7124_registers_rw_e; // 寄存器读写操作
typedef struct
{
int addr; // 寄存器地址ad7124_registers_e
int value; // 寄存器值
int size; // 寄存器字节大小
int rw; // 寄存器可执行的操作ad7124_registers_rw_e
} ad7124_st_reg_t; // AD7124寄存器结构体
typedef enum
{
STOP_NC_ADC = 0, // AD7124_CHANNEL_EN_2
STOP_NO_ADC, // AD7124_CHANNEL_EN_3
AI_IN1_ADC, // AD7124_CHANNEL_EN_4
AI_IN2_ADC, // AD7124_CHANNEL_EN_5
P1_DI2_ADC, // AD7124_CHANNEL_EN_6
P1_DI1_ADC, // AD7124_CHANNEL_EN_7
P1_AI_ADC, // AD7124_CHANNEL_EN_8
P2_DI2_ADC, // AD7124_CHANNEL_EN_9
P2_DI1_ADC, // AD7124_CHANNEL_EN_10
P2_AI_ADC, // AD7124_CHANNEL_EN_11
AD7124_CHANNEL_EN_MAX,
} ad7124_channel_e; // 该项目所使用的通道
typedef struct
{
uint8_t channel;
int32_t data; // 采样数据
float voltage; // 电压值
float current; // 电流值
} ad7124_analog_t; // 采样数据结构体
#define AD7124_CRC8_POLYNOMIAL_REPRESENTATION 0x07 /* x8 + x2 + x + 1 */
#define AD7124_DISABLE_CRC 0 // 默认关闭校验
#define AD7124_USE_CRC 1
#define AD7124_RDY 10000 // 等待时间
#define AD7124_RES 100 // 采样基准电阻
#define VREF 2.5f // 基准电压
#define GAIN 1 // 增益,该值和配置寄存器有关
#define AD_CODE 0XFFFFFF // 24位ADC
/*! Reads the value of the specified register. */
int32_t ad7124_read_register(ad7124_st_reg_t *p_reg); // 读寄存器
/*! Writes the value of the specified register. */
int32_t ad7124_write_register(ad7124_st_reg_t *reg); // 写寄存器
/*! Reads the value of the specified register without a device state check. */
int32_t ad7124_no_check_read_register(ad7124_st_reg_t *p_reg);
/*! Writes the value of the specified register without a device state check. */
int32_t ad7124_no_check_write_register(ad7124_st_reg_t *reg);
/*! Resets the device. */
int32_t ad7124_reset(void); // 复位ad7124芯片
/*! Waits until the device can accept read and write user actions. */
int32_t ad7124_wait_for_spi_ready(uint32_t timeout); // 读取ad7124芯片状态直到可以执行读写操作
/*! Waits until the device finishes the power-on reset operation. */
int32_t ad7124_wait_to_power_on(uint32_t timeout);
/*! Waits until a new conversion result is available. */
int32_t ad7124_wait_for_conv_ready(uint32_t timeout); // 等待转换完成
/*! Reads the conversion result from the device. */
int32_t ad7124_read_data(void);
void ad7124_get_analog(uint8_t channel_nr);
/*! Initializes the AD7124. */
int32_t ad7124_setup(void);
int32_t ad7124_read_write_spi(uint8_t *buff, uint8_t length);
#endif /* __AD7124_H__ */

View File

@ -1,56 +0,0 @@
#include "dac161s997.h"
/**
* @brief DAC161S997芯片写入寄存器值
*
* SPI接口向DAC161S997芯片写入指定的寄存器值
*
* @param dac_num DAC芯片编号
* @param reg
* @param data 16
*/
void dac161s997_write_reg(chip_type_e dac_num, uint8_t reg, uint16_t data)
{
uint8_t data_buffer[3] = {0, 0, 0};
data_buffer[0] = reg;
data_buffer[1] = data >> 8;
data_buffer[2] = data;
board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同
board_spi_cs_on(dac_num);
spi_transmit_receive(&hspi1, data_buffer, 3);
board_spi_cs_off(dac_num);
}
/**
* @brief DAC161S997 DAC设备
*/
void dac161s997_init(void)
{
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_LOW_REG, 0xFFFF);
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_CONFIG_REG, 0x070E);
dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_LOW_REG, 0xFFFF);
dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_CONFIG_REG, 0x070E);
}
/**
* @brief DAC161S997芯片输出函数
*
* DAC161S997芯片的输出电流
*
* @param dac_num DAC芯片类型
* @param current
*/
void dac161s997_output(chip_type_e dac_num, float current)
{
uint32_t dac_code = (uint32_t)((current * 65535.0f) / 24.0f);
uint8_t data_buffer[3] = {0, 0, 0};
data_buffer[0] = DAC161S997_DACCODE_REG;
data_buffer[1] = dac_code >> 8;
data_buffer[2] = dac_code;
board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同
board_spi_cs_on(dac_num);
spi_transmit_receive(&hspi1, data_buffer, 3);
board_spi_cs_off(dac_num);
}

View File

@ -1,28 +0,0 @@
#ifndef __DAC161S997_H__
#define __DAC161S997_H__
#include "main.h"
#include "user_spi.h"
/* Defines ********************************************************************/
/**
* @defgroup DAC161S997_REGS
* @{
*/
#define DAC161S997_XFR_REG 0x01 /**< Command: transfer data into register (protected write mode) */
#define DAC161S997_NOP_REG 0x02 /**< Command: does nothing except resetting the timeout timer */
#define DAC161S997_PROTECT_REG_WR_REG 0x03 /**< 1 means protected write mode in effect */
#define DAC161S997_DACCODE_REG 0x04 /**< 16 bit DAC code to be written */
#define DAC161S997_ERR_CONFIG_REG 0x05 /**< Configuration of error states */
#define DAC161S997_ERR_LOW_REG 0x06 /**< DAC code for the <4mA alarm level */
#define DAC161S997_ERR_HIGH_REG 0x07 /**< DAC code for the >20mA alarm level */
#define DAC161S997_RESET_REG 0x08 /**< Command: reset the chip */
#define DAC161S997_STATUS_REG 0x09 /**< Status of the chip */
#define DAC161S997_SPI SPI1
void dac161s997_write_reg(uint8_t dac_num, uint8_t reg, uint16_t data);
uint16_t dac161s997_read(uint8_t reg);
extern void dac161s997_init(void);
extern void dac161s997_output(uint8_t dac_num, float current);
#endif

View File

@ -1,12 +0,0 @@
#include "ht1200m.h"
extern void hart_ht1200m_reset(void)
{
HART1_RESET_ON;
HART2_RESET_ON;
HAL_Delay(10);
HART1_RESET_OFF;
HART2_RESET_OFF;
HART1_RTS_RECEIVE;
HART2_RTS_RECEIVE;
}

View File

@ -1,19 +0,0 @@
#ifndef __HT1200M_H__
#define __HT1200M_H__
#include "main.h"
#define HART1_RESET_ON HAL_GPIO_WritePin(HART1_RST_GPIO_Port, HART1_RST_Pin, GPIO_PIN_RESET) // 拉低引脚复位模块
#define HART1_RESET_OFF HAL_GPIO_WritePin(HART1_RST_GPIO_Port, HART1_RST_Pin, GPIO_PIN_SET)
#define HART2_RESET_ON HAL_GPIO_WritePin(HART2_RST_GPIO_Port, HART2_RST_Pin, GPIO_PIN_RESET) // 拉低引脚复位模块
#define HART2_RESET_OFF HAL_GPIO_WritePin(HART2_RST_GPIO_Port, HART2_RST_Pin, GPIO_PIN_SET)
#define HART1_RTS_RECEIVE HAL_GPIO_WritePin(HART1_RTS_GPIO_Port, HART1_RTS_Pin, GPIO_PIN_SET)
#define HART1_RTS_SEND HAL_GPIO_WritePin(HART1_RTS_GPIO_Port, HART1_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART2_RTS_RECEIVE HAL_GPIO_WritePin(HART2_RTS_GPIO_Port, HART2_RTS_Pin, GPIO_PIN_SET)
#define HART2_RTS_SEND HAL_GPIO_WritePin(HART2_RTS_GPIO_Port, HART2_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
extern void hart_ht1200m_reset(void);
#endif