Merge branch 'main' of https://gitee.com/dufresneisme/new-ptz
# Conflicts: # EWARM/Project.ewp
This commit is contained in:
commit
5238892c2f
|
@ -1,4 +1,3 @@
|
||||||
*tmp*
|
|
||||||
EWARM/Debug/
|
EWARM/Debug/
|
||||||
EWARM/Release/
|
EWARM/Release/
|
||||||
EWARM/settings/
|
EWARM/settings/
|
|
@ -12,6 +12,7 @@
|
||||||
"rtthread.h": "c",
|
"rtthread.h": "c",
|
||||||
"rthw.h": "c",
|
"rthw.h": "c",
|
||||||
"delay_us.h": "c",
|
"delay_us.h": "c",
|
||||||
"core_cm4.h": "c"
|
"core_cm4.h": "c",
|
||||||
|
"gd32f4xx_usart.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -357,6 +357,7 @@
|
||||||
<state>$PROJ_DIR$\..\rtthread</state>
|
<state>$PROJ_DIR$\..\rtthread</state>
|
||||||
<state>$PROJ_DIR$\..\rtthread\include\libc</state>
|
<state>$PROJ_DIR$\..\rtthread\include\libc</state>
|
||||||
<state>$PROJ_DIR$\..\rtthread\include</state>
|
<state>$PROJ_DIR$\..\rtthread\include</state>
|
||||||
|
<<<<<<< HEAD
|
||||||
<<<<<<< HEAD
|
<<<<<<< HEAD
|
||||||
<state>C:\Users\dufresne\Documents\020Study\500Project\git\newPtz\drivers</state>
|
<state>C:\Users\dufresne\Documents\020Study\500Project\git\newPtz\drivers</state>
|
||||||
=======
|
=======
|
||||||
|
@ -364,6 +365,11 @@
|
||||||
<state>D:\git\newPtz\drivers\tmp75</state>
|
<state>D:\git\newPtz\drivers\tmp75</state>
|
||||||
<state>D:\git\newPtz\drivers\mb85rc64</state>
|
<state>D:\git\newPtz\drivers\mb85rc64</state>
|
||||||
>>>>>>> df00792cd493a7d5804a60e319aad67a31dc2ee1
|
>>>>>>> df00792cd493a7d5804a60e319aad67a31dc2ee1
|
||||||
|
=======
|
||||||
|
<state>D:\newPtz\drivers</state>
|
||||||
|
<state>D:\newPtz\drivers\mb85rc64</state>
|
||||||
|
<state>D:\newPtz\drivers\tmp75</state>
|
||||||
|
>>>>>>> fb0726f7e9cf0aac37964e0815ddc0905f163227
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCStdIncCheck</name>
|
<name>CCStdIncCheck</name>
|
||||||
|
@ -2209,12 +2215,18 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\mb85rc64\mb85rc64.c</name>
|
<name>$PROJ_DIR$\..\drivers\mb85rc64\mb85rc64.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\mb85rc64\mb85rc64.h</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>tmp75</name>
|
<name>tmp75</name>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\tmp75\tmp75.c</name>
|
<name>$PROJ_DIR$\..\drivers\tmp75\tmp75.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\tmp75\tmp75.h</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\delay_us.c</name>
|
<name>$PROJ_DIR$\..\drivers\delay_us.c</name>
|
||||||
|
|
|
@ -2876,12 +2876,18 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\mb85rc64\mb85rc64.c</name>
|
<name>$PROJ_DIR$\..\drivers\mb85rc64\mb85rc64.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\mb85rc64\mb85rc64.h</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>tmp75</name>
|
<name>tmp75</name>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\tmp75\tmp75.c</name>
|
<name>$PROJ_DIR$\..\drivers\tmp75\tmp75.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\tmp75\tmp75.h</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\delay_us.c</name>
|
<name>$PROJ_DIR$\..\drivers\delay_us.c</name>
|
||||||
|
|
|
@ -38,6 +38,8 @@ OF SUCH DAMAGE.
|
||||||
#include "rtservice.h"
|
#include "rtservice.h"
|
||||||
#include "drv_adc.h"
|
#include "drv_adc.h"
|
||||||
#include "mb85rc64.h"
|
#include "mb85rc64.h"
|
||||||
|
#include "tmp75.h"
|
||||||
|
#include "drv_usart.h"
|
||||||
|
|
||||||
|
|
||||||
float voltage;
|
float voltage;
|
||||||
|
@ -47,6 +49,13 @@ float adc_value;
|
||||||
float tmp;
|
float tmp;
|
||||||
char tiedian_id[3]={0};
|
char tiedian_id[3]={0};
|
||||||
|
|
||||||
|
uint16_t tmp_value = 0;
|
||||||
|
|
||||||
|
extern uint16_t USER_ADC_DMA_DATA_BUFF;//bsp_adc.c中定义的ADC数据接收数组
|
||||||
|
|
||||||
|
uint8_t g_ADCDataReady=0;//DMA传输完成ADC数据标志位
|
||||||
|
|
||||||
|
|
||||||
typedef struct _MB85TEST_
|
typedef struct _MB85TEST_
|
||||||
{
|
{
|
||||||
char ttt;
|
char ttt;
|
||||||
|
@ -68,29 +77,61 @@ int main(void)
|
||||||
// RT-Thread 内核初始化等操作...
|
// RT-Thread 内核初始化等操作...
|
||||||
|
|
||||||
// 其他应用程序初始化代码...
|
// 其他应用程序初始化代码...
|
||||||
adc_config();
|
|
||||||
|
gd32_usart_init();
|
||||||
|
|
||||||
|
adc_init();
|
||||||
temp75_gpio_init();
|
temp75_gpio_init();
|
||||||
|
|
||||||
//测试mb铁电读写
|
//测试mb铁电读写
|
||||||
memset(&ttest, 0, sizeof(ttest));
|
memset(&ttest, 0, sizeof(ttest));
|
||||||
// mb85rc64_page_write();
|
// mb85rc64_page_write();
|
||||||
mb85rc64_add_read(MB85TEST_ADD, (unsigned char *)&ttest, sizeof(ttest));
|
mb85rc64_add_read(MB85TEST_ADD, (unsigned char *)&ttest, sizeof(ttest));
|
||||||
|
|
||||||
ttest.ttt += 3;
|
ttest.ttt += 3;
|
||||||
ttest.ggg /= 18;
|
if (ttest.ggg >= 1000)
|
||||||
|
{
|
||||||
|
ttest.ggg -= 2;
|
||||||
|
ttest.ggg /= 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ttest.ggg += 2;
|
||||||
|
ttest.ggg *= 3;
|
||||||
|
}
|
||||||
|
|
||||||
mb85rc64_page_write(MB85TEST_ADD, (unsigned char *)&ttest, sizeof(ttest));
|
mb85rc64_page_write(MB85TEST_ADD, (unsigned char *)&ttest, sizeof(ttest));
|
||||||
|
|
||||||
// 进入主循环或启动其他任务
|
// 进入主循环或启动其他任务
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
|
||||||
voltage = ptz_Voltage_collect_adc1_task();
|
if(SET == g_ADCDataReady)
|
||||||
|
{
|
||||||
// current_origin = current*0.132 + 3.3/2;
|
g_ADCDataReady = RESET;
|
||||||
|
for(uint8_t i=0; i<CHANNEL_LENGTH; i++)
|
||||||
|
{
|
||||||
|
tmp_value = BSP_ADCDataAcquire(i);
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
voltage = tmp_value/ 4095.0 * 3.3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current = tmp_value/ 4095.0 * 3.3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
rt_thread_mdelay(500);
|
rt_thread_mdelay(500);
|
||||||
|
|
||||||
current = ptz_Current_collect_adc1_task();
|
|
||||||
|
|
||||||
rt_thread_mdelay(500);
|
// voltage = ptz_Voltage_collect_adc1_task();
|
||||||
|
|
||||||
|
// rt_thread_mdelay(250);
|
||||||
|
|
||||||
|
// current = ptz_Current_collect_adc1_task();
|
||||||
|
|
||||||
|
// rt_thread_mdelay(250);
|
||||||
|
|
||||||
tmp = ptz_temperature_collect_tmp75_task();
|
tmp = ptz_temperature_collect_tmp75_task();
|
||||||
|
|
||||||
|
@ -100,7 +141,25 @@ int main(void)
|
||||||
memset(&ttest, 0, sizeof(ttest));
|
memset(&ttest, 0, sizeof(ttest));
|
||||||
// mb85rc64_page_write();
|
// mb85rc64_page_write();
|
||||||
mb85rc64_add_read(MB85TEST_ADD, (unsigned char *)&ttest, sizeof(ttest));
|
mb85rc64_add_read(MB85TEST_ADD, (unsigned char *)&ttest, sizeof(ttest));
|
||||||
|
// usart_puts(ttest.ttt);
|
||||||
// 主循环代码...
|
// 主循环代码...
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*****************************************************************************
|
||||||
|
* 函数名 : DMA_ADCIRQHandlerCallback
|
||||||
|
* 功能说明: DMA_ADC中断服务回调函数
|
||||||
|
* 形 参 : 无
|
||||||
|
* 返回值 : 无
|
||||||
|
*****************************************************************************
|
||||||
|
*/
|
||||||
|
void DMA_ADCIRQHandlerCallback(void)
|
||||||
|
{
|
||||||
|
if(SET == dma_interrupt_flag_get(DMA1,USER_DMA_ADC_CHANNEL,DMA_INTC_FTFIFC))
|
||||||
|
{
|
||||||
|
dma_interrupt_flag_clear(DMA1,USER_DMA_ADC_CHANNEL,DMA_INTC_FTFIFC);
|
||||||
|
dma_channel_disable(DMA1, USER_DMA_ADC_CHANNEL);
|
||||||
|
g_ADCDataReady = SET;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
/************************************************************
|
/************************************************************
|
||||||
Copyright (C), 2025, cerlink Tech. Co., Ltd.
|
Copyright (C), 2025, cerlink Tech. Co., Ltd.
|
||||||
FileName: test.cpp
|
FileName: drv_adc.c
|
||||||
Author: dufresne Version : 1.0 Date:2025.09.15
|
Author: dufresne Version : 1.0 Date:2025.09.15
|
||||||
Description: // 模块描述
|
Description: // 模块描述
|
||||||
Version: // 版本信息
|
Version: // 版本信息
|
||||||
|
@ -12,75 +12,130 @@
|
||||||
***********************************************************/
|
***********************************************************/
|
||||||
|
|
||||||
#include "drv_adc.h"
|
#include "drv_adc.h"
|
||||||
#include "tmp75.h"
|
|
||||||
#include "stdlib.h"
|
/*全局声明区*/
|
||||||
#include "string.h"
|
uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0};
|
||||||
#include "gd32f4xx.h"
|
|
||||||
#include "gd32f4xx_adc.h"
|
|
||||||
#include "gd32f4xx_dma.h"
|
|
||||||
#include "rtthread.h"
|
|
||||||
|
|
||||||
|
|
||||||
void adc_config(void)
|
void adc_init(void)
|
||||||
{
|
{
|
||||||
/* 启用GPIOA时钟 */
|
adc_rcu_config();
|
||||||
rcu_periph_clock_enable(RCU_GPIOC);
|
adc_gpio_config();
|
||||||
/* 启用ADC0时钟 */
|
adc_dma_config();
|
||||||
|
adc_config();
|
||||||
|
}
|
||||||
|
/* 时钟+GPIO */
|
||||||
|
void adc_rcu_config(void)
|
||||||
|
{
|
||||||
|
/* 启用ADC1时钟 */
|
||||||
rcu_periph_clock_enable(RCU_ADC1);
|
rcu_periph_clock_enable(RCU_ADC1);
|
||||||
|
|
||||||
|
/* peripheral clock enable */
|
||||||
|
rcu_periph_clock_enable(RCU_DMA1);//ADC只能用DMA1
|
||||||
|
|
||||||
// 复位ADC配置(可选,但建议初始化时做一次)
|
/* 启用GPIOC时钟 */
|
||||||
adc_deinit();
|
rcu_periph_clock_enable(RCU_GPIOC);
|
||||||
|
|
||||||
// adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
|
|
||||||
|
|
||||||
// 开启ADC
|
|
||||||
adc_enable(ADCX);
|
|
||||||
|
|
||||||
// 等待ADC稳定
|
|
||||||
rt_thread_mdelay(100);
|
|
||||||
|
|
||||||
// 执行ADC自校准
|
|
||||||
adc_calibration_enable(ADCX);
|
|
||||||
|
|
||||||
adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
|
adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void adc_gpio_config(void)
|
||||||
|
{
|
||||||
/* 配置ADC引脚为模拟输入模式 */
|
/* 配置ADC引脚为模拟输入模式 */
|
||||||
gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, VOLTAGE_ADC_PIN);
|
gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, VOLTAGE_ADC_PIN);
|
||||||
gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, CURRENT_ADC_PIN);
|
gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, CURRENT_ADC_PIN);
|
||||||
|
|
||||||
// 配置数据对齐方式为右对齐
|
|
||||||
adc_data_alignment_config(ADCX, ADC_DATAALIGN_RIGHT);
|
|
||||||
|
|
||||||
// 配置ADC分辨率:12位
|
|
||||||
adc_resolution_config(ADCX, ADC_RESOLUTION_12B);
|
|
||||||
|
|
||||||
// 打开扫描模式
|
|
||||||
adc_special_function_config(ADCX, ADC_SCAN_MODE, ENABLE);
|
|
||||||
|
|
||||||
// 禁止连续模式 -> 单次转换模式
|
|
||||||
adc_special_function_config(ADCX, ADC_CONTINUOUS_MODE, DISABLE);
|
|
||||||
|
|
||||||
/* ########## 设置转换通道序列 ########## */
|
|
||||||
// 配置规则序列的长度:1个通道
|
|
||||||
adc_channel_length_config(ADCX, ADC_ROUTINE_CHANNEL, ADC_CHANNEL_NUM);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* DMA配置 */
|
||||||
|
static void adc_dma_config(void)
|
||||||
|
{
|
||||||
|
/* ADC_DMA_channel configuration */
|
||||||
|
dma_single_data_parameter_struct dma_single_data_parameter; //这里使用单数据模式,每次只传输一个数据单元,因为总数据量不大,且数据个数不固定
|
||||||
|
|
||||||
|
/* ADC DMA_channel configuration */
|
||||||
|
dma_deinit(DMA1, USER_DMA_ADC_CHANNEL);
|
||||||
|
|
||||||
|
/* initialize DMA single data mode */
|
||||||
|
dma_single_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADCX));//配置外设数据源地址,宏决定ADCx
|
||||||
|
dma_single_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;//关闭外设增量,只需要每次对该数据源寄存器访问
|
||||||
|
|
||||||
|
dma_single_data_parameter.memory0_addr = (uint32_t)USER_ADC_DMA_DATA_BUFF;//先写死,然后外部用的话需要extern
|
||||||
|
dma_single_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;//开启内存增量,以存放不同通道的ADC数据
|
||||||
|
|
||||||
|
dma_single_data_parameter.periph_memory_width = DMA_PERIPH_WIDTH_16BIT;//ADC数据为16位的寄存器,数据目的地为16位
|
||||||
|
|
||||||
|
dma_single_data_parameter.circular_mode = DMA_CIRCULAR_MODE_ENABLE;//循环模式,由ADC通知DMA进行
|
||||||
|
/* DMA外设到内存模式不开启 */
|
||||||
|
dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY;//ADC外设到RAM全局变量
|
||||||
|
dma_single_data_parameter.number = CHANNEL_LENGTH;//宏决定传输个数
|
||||||
|
dma_single_data_parameter.priority = DMA_PRIORITY_ULTRA_HIGH;//优先级设为超高,可改用宏
|
||||||
|
dma_single_data_mode_init(DMA1, USER_DMA_ADC_CHANNEL, &dma_single_data_parameter);
|
||||||
|
/* 配置 dma 子连接 */
|
||||||
|
dma_channel_subperipheral_select(DMA1, USER_DMA_ADC_CHANNEL, USER_DMA_ADC_SUBPERI);
|
||||||
|
|
||||||
|
/* enable DMA circulation mode */
|
||||||
|
dma_circulation_enable(DMA1, USER_DMA_ADC_CHANNEL);// 开启循环模式
|
||||||
|
|
||||||
|
/* enable DMA channel */
|
||||||
|
dma_channel_enable(DMA1, USER_DMA_ADC_CHANNEL);
|
||||||
|
|
||||||
|
/* enable DMA it */
|
||||||
|
dma_interrupt_enable(DMA1,USER_DMA_ADC_CHANNEL,DMA_INT_FTF);//DMA传输完成标志位 打开全部完成中断
|
||||||
|
nvic_irq_enable(DMA_ADC_IRQn, DMA_ADC_PRIORITY_PRE, DMA_ADC_PRIORITY_SUB);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void adc_config(void)
|
||||||
|
{
|
||||||
|
adc_deinit();// 复位ADC配置(可选,但建议初始化时做一次)
|
||||||
|
|
||||||
|
adc_special_function_config(ADCX, ADC_SCAN_MODE, SCAN_STATUS);// 打开扫描模式
|
||||||
|
adc_special_function_config(ADCX, ADC_CONTINUOUS_MODE, CONTINUOUS_STATUS);// 禁止连续模式 -> 单次转换模式
|
||||||
|
|
||||||
|
adc_data_alignment_config(ADCX, ADC_DATAALIGN_RIGHT);// 配置数据对齐方式为右对齐
|
||||||
|
adc_resolution_config(ADCX, ADC_RESOLUTION_12B);// 配置ADC分辨率:12位
|
||||||
|
|
||||||
|
/* 设置转换通道序列 */
|
||||||
|
adc_channel_length_config(ADCX, SEQUENCE_CHANNEL, CHANNEL_LENGTH);// 配置规则序列的长度:2个通道
|
||||||
|
|
||||||
|
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
adc_routine_channel_config(ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
|
||||||
|
|
||||||
|
/* 使能外部触发:这里使用软件触发,所以先禁用硬件触发 */
|
||||||
|
adc_external_trigger_source_config(ADCX, SEQUENCE_CHANNEL, ADC_EXTTRIG_ROUTINE_T0_CH0);
|
||||||
|
adc_external_trigger_config(ADCX, SEQUENCE_CHANNEL, DISABLE);
|
||||||
|
|
||||||
|
/* ADC dma config */
|
||||||
|
adc_dma_request_after_last_enable(ADCX);
|
||||||
|
adc_dma_mode_enable(ADCX);
|
||||||
|
|
||||||
|
adc_enable(ADCX);// 开启ADC
|
||||||
|
rt_thread_mdelay(50);// 等待ADC稳定后续接校准
|
||||||
|
adc_calibration_enable(ADCX);// 执行ADC自校准
|
||||||
|
|
||||||
|
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 根据转换序列的序列号,获取转换序列中的ADC测量值
|
||||||
|
* @param 配置ADC通道结构体中的成员序号
|
||||||
|
* @return 测量并转换后的值
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint16_t BSP_ADCDataAcquire(uint8_t _index)
|
||||||
|
{
|
||||||
|
return USER_ADC_DMA_DATA_BUFF[_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
// adc电压采集
|
// adc电压采集
|
||||||
float ptz_Voltage_collect_adc1_task()
|
float ptz_Voltage_collect_adc1_task()
|
||||||
{
|
{
|
||||||
// 配置规则序列:序号0是电压通道,序号1是电流通道
|
|
||||||
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
|
||||||
|
|
||||||
// 使能外部触发:这里使用软件触发,所以先禁用硬件触发
|
|
||||||
adc_external_trigger_config(ADCX, ADC_ROUTINE_CHANNEL, DISABLE);
|
|
||||||
// 软件触发使能
|
|
||||||
adc_software_trigger_enable(ADCX, ADC_ROUTINE_CHANNEL);
|
|
||||||
|
|
||||||
|
|
||||||
static float adc1_v[LB_V_TIMES];
|
static float adc1_v[LB_V_TIMES];
|
||||||
static float curadc1_out_v;
|
static float curadc1_out_v;
|
||||||
static uint8_t adc1_v_num;
|
static uint8_t adc1_v_num;
|
||||||
|
@ -89,11 +144,13 @@ float ptz_Voltage_collect_adc1_task()
|
||||||
float curadc1;
|
float curadc1;
|
||||||
uint16_t value_V = 0;
|
uint16_t value_V = 0;
|
||||||
|
|
||||||
|
/* 配置规则序列:序号0是电压通道,序号1是电流通道 */
|
||||||
|
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
|
||||||
|
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
||||||
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
|
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
|
||||||
value_V = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
value_V = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* 间接测量,11倍分压/放大 */
|
/* 间接测量,11倍分压/放大 */
|
||||||
adc1_v[adc1_v_num] = (float)value_V / 4095.0 * 3.3;
|
adc1_v[adc1_v_num] = (float)value_V / 4095.0 * 3.3;
|
||||||
|
|
||||||
|
@ -101,7 +158,7 @@ float ptz_Voltage_collect_adc1_task()
|
||||||
if(adc1_v_num >= LB_V_TIMES)
|
if(adc1_v_num >= LB_V_TIMES)
|
||||||
{
|
{
|
||||||
adc1_v_num = 0;
|
adc1_v_num = 0;
|
||||||
for(j = 0; j < LB_V_TIMES-1; j++)//采样值由小到大排列
|
for(j = 0; j < LB_V_TIMES-1; j++)// 采样值由小到大排列
|
||||||
{
|
{
|
||||||
for(k = 0; k < LB_V_TIMES-j-1; k++)
|
for(k = 0; k < LB_V_TIMES-j-1; k++)
|
||||||
{
|
{
|
||||||
|
@ -117,9 +174,9 @@ float ptz_Voltage_collect_adc1_task()
|
||||||
{
|
{
|
||||||
curadc1 = curadc1 + adc1_v[i];
|
curadc1 = curadc1 + adc1_v[i];
|
||||||
}
|
}
|
||||||
curadc1 = curadc1 /((float)(LB_V_TIMES - 2));//去掉一个最大值和一个最小值求平均值
|
curadc1 = curadc1 /((float)(LB_V_TIMES - 2));// 去掉一个最大值和一个最小值求平均值
|
||||||
// g_ptz.Voltage = curadc1;
|
// g_ptz.Voltage = curadc1;
|
||||||
memset(adc1_v, 0, sizeof(adc1_v));//adc1_v 快速清零
|
memset(adc1_v, 0, sizeof(adc1_v));// adc1_v 快速清零
|
||||||
curadc1_out_v = curadc1;
|
curadc1_out_v = curadc1;
|
||||||
}
|
}
|
||||||
return curadc1_out_v;
|
return curadc1_out_v;
|
||||||
|
@ -129,15 +186,6 @@ float ptz_Voltage_collect_adc1_task()
|
||||||
// adc电流采集
|
// adc电流采集
|
||||||
float ptz_Current_collect_adc1_task()
|
float ptz_Current_collect_adc1_task()
|
||||||
{
|
{
|
||||||
// 配置规则序列:序号0是电压通道,序号1是电流通道
|
|
||||||
adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
|
||||||
|
|
||||||
// 使能外部触发:这里使用软件触发,所以先禁用硬件触发
|
|
||||||
adc_external_trigger_config(ADCX, ADC_ROUTINE_CHANNEL, DISABLE);
|
|
||||||
// 软件触发使能
|
|
||||||
adc_software_trigger_enable(ADCX, ADC_ROUTINE_CHANNEL);
|
|
||||||
|
|
||||||
|
|
||||||
static float adc1_i[LB_I_TIMES];
|
static float adc1_i[LB_I_TIMES];
|
||||||
static float curadc1_out_i;
|
static float curadc1_out_i;
|
||||||
static uint8_t adc1_i_num;
|
static uint8_t adc1_i_num;
|
||||||
|
@ -146,7 +194,11 @@ float ptz_Current_collect_adc1_task()
|
||||||
float curadc1;
|
float curadc1;
|
||||||
uint16_t value_I = 0;
|
uint16_t value_I = 0;
|
||||||
|
|
||||||
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
|
// 配置规则序列:序号0是电压通道,序号1是电流通道
|
||||||
|
adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
|
||||||
|
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
||||||
|
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束->等到SET
|
||||||
value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
||||||
|
|
||||||
/* 间接测量,11倍分压/放大 */
|
/* 间接测量,11倍分压/放大 */
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
#ifndef __DRV_ADC_H_
|
#ifndef __DRV_ADC_H_
|
||||||
#define __DRV_ADC_H_
|
#define __DRV_ADC_H_
|
||||||
|
|
||||||
|
#include "tmp75.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "gd32f4xx.h"
|
||||||
|
#include "gd32f4xx_adc.h"
|
||||||
|
#include "gd32f4xx_dma.h"
|
||||||
|
#include "rtthread.h"
|
||||||
|
|
||||||
/* 自定义宏,方便修改通道和引脚 */
|
/* 自定义宏,方便修改通道和引脚 */
|
||||||
#define ADCX ADC1
|
#define ADCX ADC1
|
||||||
#define VOLTAGE_ADC_CHANNEL ADC_CHANNEL_12
|
#define VOLTAGE_ADC_CHANNEL ADC_CHANNEL_12
|
||||||
|
@ -8,11 +16,43 @@
|
||||||
#define ADC_GPIO_PORT GPIOC
|
#define ADC_GPIO_PORT GPIOC
|
||||||
#define VOLTAGE_ADC_PIN GPIO_PIN_2
|
#define VOLTAGE_ADC_PIN GPIO_PIN_2
|
||||||
#define CURRENT_ADC_PIN GPIO_PIN_3
|
#define CURRENT_ADC_PIN GPIO_PIN_3
|
||||||
#define ADC_CHANNEL_NUM 1 // 规则组配置规则序列的通道:2个通道
|
#define LB_V_TIMES 7 //电压采样滤波次数
|
||||||
#define LB_V_TIMES 7
|
#define LB_I_TIMES 12 //电流采样滤波次数
|
||||||
#define LB_I_TIMES 12
|
#define LB_T_TIMES 7 //温度采样滤波次数
|
||||||
#define LB_T_TIMES 7
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
adc模式配置参数
|
||||||
|
ENABLE
|
||||||
|
DISABLE
|
||||||
|
*/
|
||||||
|
#define CONTINUOUS_STATUS ENABLE// 是否开启连续转换
|
||||||
|
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL// 注入组还是规则组
|
||||||
|
#define SCAN_STATUS ENABLE// 是否开启扫描模式
|
||||||
|
#define DMA_STATUS ENABLE// 是否开启dma
|
||||||
|
#define CHANNEL_LENGTH 2// 通道数量:1~16
|
||||||
|
|
||||||
|
/* adc dma */
|
||||||
|
#define USER_DMA_ADC_CHANNEL DMA_CH3 //DMA通道:ADC0:DMA_CH0 DMA_CH4
|
||||||
|
// ADC1:DMA_CH2 DMA_CH3
|
||||||
|
// ADC2:DMA_CH0 DMA_CH3
|
||||||
|
|
||||||
|
#define USER_DMA_ADC_SUBPERI DMA_SUBPERI1 //DMA外设源:ADC0:DMA_SUBPERI0
|
||||||
|
// ADC1:DMA_SUBPERI1
|
||||||
|
// ADC2:DMA_SUBPERI2
|
||||||
|
|
||||||
|
#define DMA_ADC_IRQn DMA1_Channel0_IRQn //DMA1_Channel0_IRQn
|
||||||
|
//DMA1_Channel1_IRQn
|
||||||
|
//DMA1_Channel2_IRQn
|
||||||
|
//DMA1_Channel3_IRQn
|
||||||
|
//DMA1_Channel4_IRQn
|
||||||
|
#define DMA_ADC_PRIORITY_PRE 0 //抢占优先级
|
||||||
|
#define DMA_ADC_PRIORITY_SUB 1 //子优先级
|
||||||
|
|
||||||
|
void adc_init(void);
|
||||||
|
void adc_rcu_config(void);
|
||||||
|
void adc_gpio_config(void);
|
||||||
|
void adc_dma_config(void);
|
||||||
void adc_config(void);
|
void adc_config(void);
|
||||||
float ptz_Voltage_collect_adc1_task();
|
float ptz_Voltage_collect_adc1_task();
|
||||||
float ptz_Current_collect_adc1_task();
|
float ptz_Current_collect_adc1_task();
|
||||||
|
|
|
@ -20,7 +20,8 @@ static struct gd32_usart_config usart_config[] = {
|
||||||
// 初始化所有配置的串口
|
// 初始化所有配置的串口
|
||||||
void gd32_usart_init(void)
|
void gd32_usart_init(void)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < sizeof(usart_config) / sizeof(usart_config[0]); i++) {
|
for (int i = 0; i < sizeof(usart_config) / sizeof(usart_config[0]); i++)
|
||||||
|
{
|
||||||
gd32_usart_configure(&usart_config[i]);
|
gd32_usart_configure(&usart_config[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,8 +47,8 @@ void gd32_usart_configure(struct gd32_usart_config *config)
|
||||||
usart_word_length_set(config->usart_periph, USART_WL_8BIT);
|
usart_word_length_set(config->usart_periph, USART_WL_8BIT);
|
||||||
usart_stop_bit_set(config->usart_periph, USART_STB_1BIT);
|
usart_stop_bit_set(config->usart_periph, USART_STB_1BIT);
|
||||||
usart_parity_config(config->usart_periph, USART_PM_NONE);
|
usart_parity_config(config->usart_periph, USART_PM_NONE);
|
||||||
usart_hardware_flow_rts_config(config->usart_periph, USART_RTS_DISABLE);
|
// usart_hardware_flow_rts_config(config->usart_periph, USART_RTS_DISABLE);
|
||||||
usart_hardware_flow_cts_config(config->usart_periph, USART_CTS_DISABLE);
|
// usart_hardware_flow_cts_config(config->usart_periph, USART_CTS_DISABLE);
|
||||||
usart_receive_config(config->usart_periph, USART_RECEIVE_ENABLE);
|
usart_receive_config(config->usart_periph, USART_RECEIVE_ENABLE);
|
||||||
usart_transmit_config(config->usart_periph, USART_TRANSMIT_ENABLE);
|
usart_transmit_config(config->usart_periph, USART_TRANSMIT_ENABLE);
|
||||||
|
|
||||||
|
@ -74,6 +75,12 @@ void gd32_usart_puts(struct gd32_usart_config *config, const char *str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void usart_puts(const char *str)
|
||||||
|
{
|
||||||
|
gd32_usart_puts(&usart_config[0], str);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// 获取串口配置 by name
|
// 获取串口配置 by name
|
||||||
struct gd32_usart_config *gd32_usart_get_config(const char *name)
|
struct gd32_usart_config *gd32_usart_get_config(const char *name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,6 +19,7 @@ struct gd32_usart_config {
|
||||||
uint8_t irq_type;
|
uint8_t irq_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 函数声明
|
// 函数声明
|
||||||
void gd32_usart_init(void);
|
void gd32_usart_init(void);
|
||||||
void gd32_usart_configure(struct gd32_usart_config *config);
|
void gd32_usart_configure(struct gd32_usart_config *config);
|
||||||
|
|
|
@ -0,0 +1,256 @@
|
||||||
|
/*************************************************
|
||||||
|
Copyright (c) 2025, 成都赛联科技有限责任公司
|
||||||
|
All rights reserved.
|
||||||
|
@file tmp75.C
|
||||||
|
@brief tmp75驱动程序
|
||||||
|
|
||||||
|
@details
|
||||||
|
@note
|
||||||
|
@author dufresne
|
||||||
|
@date 2025/09/15
|
||||||
|
|
||||||
|
@version v1.0 2025/09/15 初始版本
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
#include "tmp75.h"
|
||||||
|
#include "rtthread.h"
|
||||||
|
#include <core_cm4.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 延时函数
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void delay_us(int us)
|
||||||
|
{
|
||||||
|
rt_thread_udelay(us);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 初始化tmp75芯片GPIO引脚
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
void temp75_gpio_init()
|
||||||
|
{
|
||||||
|
// 配置引脚时钟
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
||||||
|
// 设置引脚为输出模式:PB6
|
||||||
|
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6);
|
||||||
|
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
|
||||||
|
|
||||||
|
// 设置引脚PB7输出模式
|
||||||
|
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
|
||||||
|
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
|
||||||
|
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
TMP75_SDA_HIGH;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 设置SDA引脚为输出模式
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void tmp75_sda_output()
|
||||||
|
{
|
||||||
|
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
|
||||||
|
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 设置SDA引脚为输入模式
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void tmp75_sda_input()
|
||||||
|
{
|
||||||
|
gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
|
||||||
|
// gpio_output_options_set(GPIOB, GPIO_PUPD_NONE, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief I2C start信号
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void i2c_start()
|
||||||
|
{
|
||||||
|
TMP75_SDA_HIGH;
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
TMP75_SDA_LOW;
|
||||||
|
delay_us(40);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief I2C stop信号
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void i2c_stop()
|
||||||
|
{
|
||||||
|
TMP75_SDA_LOW;
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
TMP75_SDA_HIGH;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 写一个字节数据
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void tmp75_write_byte(uint8_t byte)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
delay_us(4);
|
||||||
|
if (byte & 0x80)
|
||||||
|
{
|
||||||
|
TMP75_SDA_HIGH;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TMP75_SDA_LOW;
|
||||||
|
}
|
||||||
|
byte <<= 1;
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
delay_us(40);
|
||||||
|
}
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 写入数据后,CPU接收TMP75返回的ACK信号
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void tmp75_ack()
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
// 将sda设置为输入模式
|
||||||
|
tmp75_sda_input();
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
while ((TMP75_SDA_GET) && (i < 1000))
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
// 将sda设置为输出模式
|
||||||
|
tmp75_sda_output();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 读取数据
|
||||||
|
@ param
|
||||||
|
@ return value:读取到的单字节数据
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static uint8_t tmp75_read_byte()
|
||||||
|
{
|
||||||
|
uint8_t value = 0;
|
||||||
|
tmp75_sda_input();
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
value <<= 1;
|
||||||
|
delay_us(10);
|
||||||
|
if (TMP75_SDA_GET)
|
||||||
|
{
|
||||||
|
value = value | 0x01;
|
||||||
|
}
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
delay_us(10);
|
||||||
|
}
|
||||||
|
tmp75_sda_output();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 读取数据,主机发送ack信号
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void master_ack()
|
||||||
|
{
|
||||||
|
TMP75_SDA_LOW;
|
||||||
|
delay_us(5);
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
delay_us(5);
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
delay_us(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ brief 读取数据完成,主机发送noack信号
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
static void master_noack()
|
||||||
|
{
|
||||||
|
TMP75_SDA_HIGH;
|
||||||
|
delay_us(5);
|
||||||
|
TMP75_SCL_HIGH;
|
||||||
|
delay_us(5);
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
delay_us(5);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
@ brief 读取温度值
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
float tmp75_read_temp(void)
|
||||||
|
{
|
||||||
|
uint8_t tempH = 0;
|
||||||
|
uint8_t tempL = 0;
|
||||||
|
uint16_t tempCode = 0;
|
||||||
|
float temp = 0;
|
||||||
|
|
||||||
|
// 起始信号
|
||||||
|
i2c_start();
|
||||||
|
// 写tmp75地址
|
||||||
|
tmp75_write_byte(TMP75_ADDRESS);
|
||||||
|
// 接收tmp75的ack信息
|
||||||
|
tmp75_ack();
|
||||||
|
// 发送需读取数据的地址
|
||||||
|
tmp75_write_byte(TEMP_REGISTER_ADDRESS);
|
||||||
|
tmp75_ack();
|
||||||
|
|
||||||
|
i2c_start();
|
||||||
|
// 写tmp75地址
|
||||||
|
tmp75_write_byte(TMP75_ADDRESS + 1); // 读地址数据
|
||||||
|
tmp75_ack();
|
||||||
|
tempH = tmp75_read_byte();
|
||||||
|
master_ack();
|
||||||
|
tempL = tmp75_read_byte();
|
||||||
|
master_noack();
|
||||||
|
i2c_stop();
|
||||||
|
tempCode = (tempH << 8) | tempL;
|
||||||
|
tempCode = tempCode >> 6;
|
||||||
|
if (tempCode & 0x200) // 负温度
|
||||||
|
{
|
||||||
|
tempCode &= 0x1ff;
|
||||||
|
temp = ((float)tempCode - 512) / 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
temp = (float)tempCode / 4;
|
||||||
|
}
|
||||||
|
TMP75_SDA_LOW;
|
||||||
|
TMP75_SCL_LOW;
|
||||||
|
return (temp);
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
///Copyright (c) 2022, 四川汇源光通信有限公司
|
||||||
|
///All rights reserved.
|
||||||
|
///@file tmp75.h
|
||||||
|
///@brief tmp75驱动程序
|
||||||
|
///
|
||||||
|
///@details
|
||||||
|
///@note
|
||||||
|
///@author lqc
|
||||||
|
///@date 2022/05/23
|
||||||
|
///
|
||||||
|
///@version v1.0 2022/05/23 初始版本
|
||||||
|
|
||||||
|
#ifndef __TMP75_H_
|
||||||
|
#define __TMP75_H_
|
||||||
|
|
||||||
|
#include "gd32f4xx_gpio.h"
|
||||||
|
|
||||||
|
#define TMP75_ADDRESS 0x90
|
||||||
|
#define TEMP_REGISTER_ADDRESS 0x00 //温度寄存器地址
|
||||||
|
|
||||||
|
#define TMP75_SCL_HIGH gpio_bit_set(GPIOB, GPIO_PIN_6)
|
||||||
|
#define TMP75_SCL_LOW gpio_bit_reset(GPIOB, GPIO_PIN_6)
|
||||||
|
|
||||||
|
#define TMP75_SDA_HIGH gpio_bit_set(GPIOB, GPIO_PIN_7)
|
||||||
|
#define TMP75_SDA_LOW gpio_bit_reset(GPIOB, GPIO_PIN_7)
|
||||||
|
#define TMP75_SDA_GET gpio_input_bit_get(GPIOB, GPIO_PIN_7)
|
||||||
|
|
||||||
|
void temp75_gpio_init();
|
||||||
|
float tmp75_read_temp(void);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue