Compare commits
5 Commits
441153ec10
...
14174ffa94
Author | SHA1 | Date |
---|---|---|
|
14174ffa94 | |
|
b458a57577 | |
|
61e3485689 | |
|
9ed0bb00be | |
|
4ca82f2c6c |
|
@ -14,6 +14,7 @@
|
||||||
"delay_us.h": "c",
|
"delay_us.h": "c",
|
||||||
"core_cm4.h": "c",
|
"core_cm4.h": "c",
|
||||||
"gd32f4xx_usart.h": "c",
|
"gd32f4xx_usart.h": "c",
|
||||||
"stdlib.h": "c"
|
"stdlib.h": "c",
|
||||||
|
"gd32f4xx_gpio.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -357,9 +357,9 @@
|
||||||
<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>
|
||||||
<state>D:\newPtz\drivers</state>
|
<state>C:\Users\Administrator\Documents\newPtz\drivers\mb85rc64</state>
|
||||||
<state>D:\newPtz\drivers\mb85rc64</state>
|
<state>C:\Users\Administrator\Documents\newPtz\drivers\tmp75</state>
|
||||||
<state>D:\newPtz\drivers\tmp75</state>
|
<state>C:\Users\Administrator\Documents\newPtz\drivers</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCStdIncCheck</name>
|
<name>CCStdIncCheck</name>
|
||||||
|
@ -772,11 +772,11 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfOverride</name>
|
<name>IlinkIcfOverride</name>
|
||||||
<state>0</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFile</name>
|
<name>IlinkIcfFile</name>
|
||||||
<state>$TOOLKIT_DIR$/config/linker/GigaDevice/GD32F470xE.icf</state>
|
<state>C:\Users\Administrator\Documents\newPtz\EWARM\iar\GD32F450xE.icf</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFileSlave</name>
|
<name>IlinkIcfFileSlave</name>
|
||||||
|
@ -2230,6 +2230,12 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\drv_adc.h</name>
|
<name>$PROJ_DIR$\..\drivers\drv_adc.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\drv_i2c.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\drv_i2c.h</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\drv_usart.c</name>
|
<name>$PROJ_DIR$\..\drivers\drv_usart.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -2901,6 +2901,12 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\drv_adc.h</name>
|
<name>$PROJ_DIR$\..\drivers\drv_adc.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\drv_i2c.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\drivers\drv_i2c.h</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\drivers\drv_usart.c</name>
|
<name>$PROJ_DIR$\..\drivers\drv_usart.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -761,10 +761,10 @@ void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t fla
|
||||||
\retval none
|
\retval none
|
||||||
*/
|
*/
|
||||||
void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source)
|
void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source)
|
||||||
{
|
{//DMA_CHXFCTL_FEEIE 7
|
||||||
if(DMA_CHXFCTL_FEEIE != source) {
|
if(DMA_CHXFCTL_FEEIE != source) {//不是7
|
||||||
DMA_CHCTL(dma_periph, channelx) |= source;
|
DMA_CHCTL(dma_periph, channelx) |= source;
|
||||||
} else {
|
} else {//是7
|
||||||
DMA_CHFCTL(dma_periph, channelx) |= source;
|
DMA_CHFCTL(dma_periph, channelx) |= source;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,6 @@ float current;
|
||||||
float current_origin;
|
float current_origin;
|
||||||
char tiedian_id[3]={0};
|
char tiedian_id[3]={0};
|
||||||
|
|
||||||
#ifdef MDAX
|
|
||||||
uint32_t ctl_data = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint32_t primask;
|
uint32_t primask;
|
||||||
|
|
||||||
|
@ -56,9 +53,6 @@ uint16_t tmp_value = 0;
|
||||||
|
|
||||||
extern uint16_t USER_ADC_DMA_DATA_BUFF;//bsp_adc.c中定义的ADC数据接收数组
|
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;
|
||||||
|
@ -113,42 +107,8 @@ int main(void)
|
||||||
// 进入主循环或启动其他任务
|
// 进入主循环或启动其他任务
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
#ifdef DMAX
|
|
||||||
ctl_data = DMA_CHCTL(DMAX, USER_DMA_ADC_CHANNEL);
|
|
||||||
if (ctl_data == 33762576)
|
|
||||||
{
|
|
||||||
// dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);
|
|
||||||
ttest.status = 5;
|
|
||||||
}
|
|
||||||
else if (ctl_data == 33762577)
|
|
||||||
{
|
|
||||||
ttest.status = 4;
|
|
||||||
|
|
||||||
}
|
#if (defined ADC_MODE_0) || (defined ADC_MODE_1) || (defined ADC_MODE_3)
|
||||||
|
|
||||||
|
|
||||||
__asm volatile("mrs %0, primask" : "=r"(primask));
|
|
||||||
|
|
||||||
if(SET == g_ADCDataReady)
|
|
||||||
{
|
|
||||||
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(250);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ADC_MODE_2
|
|
||||||
voltage = ptz_Voltage_collect_adc1_task();
|
voltage = ptz_Voltage_collect_adc1_task();
|
||||||
rt_thread_mdelay(500);
|
rt_thread_mdelay(500);
|
||||||
|
|
||||||
|
@ -159,6 +119,7 @@ int main(void)
|
||||||
#ifdef ADC_MODE_2
|
#ifdef ADC_MODE_2
|
||||||
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//测试mb铁电读写
|
//测试mb铁电读写
|
||||||
read_mb_id((uint8_t*)&tiedian_id);//读取铁电ID
|
read_mb_id((uint8_t*)&tiedian_id);//读取铁电ID
|
||||||
|
|
||||||
|
@ -172,7 +133,7 @@ int main(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DMAX
|
#ifdef ADC_MODE_3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
|
@ -210,7 +171,6 @@ void DMA1_Channel0_IRQHandler(void)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef ADCX_IRQn
|
#ifdef ADCX_IRQn
|
||||||
void ADC_IRQHandler()
|
void ADC_IRQHandler()
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
|
@ -15,11 +15,26 @@
|
||||||
|
|
||||||
|
|
||||||
#ifdef DMAX
|
#ifdef DMAX
|
||||||
|
|
||||||
/*全局声明区*/
|
/*全局声明区*/
|
||||||
uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0};
|
uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0};
|
||||||
uint32_t ctl = 0;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
float adc1_v[LB_V_TIMES];
|
||||||
|
float curadc1_out_v;
|
||||||
|
uint8_t adc1_v_num = 0;
|
||||||
|
|
||||||
|
float adc1_i[LB_I_TIMES];
|
||||||
|
float curadc1_out_i;
|
||||||
|
uint8_t adc1_i_num = 0;
|
||||||
|
|
||||||
|
float tmp75[LB_T_TIMES];
|
||||||
|
float curtmp75_out;
|
||||||
|
uint8_t tmp75_num;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool filter_v_flag = 0;//滤波开启标志位,全局改变一次
|
bool filter_v_flag = 0;//滤波开启标志位,全局改变一次
|
||||||
bool filter_i_flag = 0;//滤波开启标志位,全局改变一次
|
bool filter_i_flag = 0;//滤波开启标志位,全局改变一次
|
||||||
bool filter_t_flag = 0;//滤波开启标志位,全局改变一次
|
bool filter_t_flag = 0;//滤波开启标志位,全局改变一次
|
||||||
|
@ -43,20 +58,6 @@ void adc_init(void)
|
||||||
adc_interrupt_int();
|
adc_interrupt_int();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DMAX
|
|
||||||
ctl = DMA_CHCTL(DMAX, USER_DMA_ADC_CHANNEL);
|
|
||||||
if (ctl == 33762576)
|
|
||||||
{
|
|
||||||
// dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);
|
|
||||||
// ttest.status = 5;
|
|
||||||
dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);// enable DMA channel
|
|
||||||
}
|
|
||||||
else if (ctl == 33762577)
|
|
||||||
{
|
|
||||||
// ttest.status = 4;
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
/* 时钟+GPIO */
|
/* 时钟+GPIO */
|
||||||
void adc_rcu_config(void)
|
void adc_rcu_config(void)
|
||||||
|
@ -100,20 +101,20 @@ void adc_dma_config(void)
|
||||||
dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY; //ADC外设到RAM全局变量 DMA外设到内存模式开启
|
dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY; //ADC外设到RAM全局变量 DMA外设到内存模式开启
|
||||||
dma_single_data_parameter.number = CHANNEL_LENGTH; //宏决定传输个数
|
dma_single_data_parameter.number = CHANNEL_LENGTH; //宏决定传输个数
|
||||||
dma_single_data_parameter.priority = DMA_PRIORITY_ULTRA_HIGH; //优先级设为超高,可改用宏
|
dma_single_data_parameter.priority = DMA_PRIORITY_ULTRA_HIGH; //优先级设为超高,可改用宏
|
||||||
dma_single_data_mode_init (DMA1, USER_DMA_ADC_CHANNEL, &dma_single_data_parameter);
|
dma_single_data_mode_init (DMAX, USER_DMA_ADC_CHANNEL, &dma_single_data_parameter);
|
||||||
/* 配置 dma 子连接 */
|
/* 配置 dma 子连接 */
|
||||||
dma_channel_subperipheral_select (DMA1, USER_DMA_ADC_CHANNEL, USER_DMA_ADC_SUBPERI);
|
dma_channel_subperipheral_select (DMAX, USER_DMA_ADC_CHANNEL, USER_DMA_ADC_SUBPERI);
|
||||||
|
|
||||||
/* enable DMA circulation mode */
|
/* enable DMA circulation mode */
|
||||||
dma_circulation_enable (DMA1, USER_DMA_ADC_CHANNEL);// 开启循环模式
|
dma_circulation_enable (DMAX, USER_DMA_ADC_CHANNEL);// 开启循环模式
|
||||||
|
|
||||||
/* enable DMA it */
|
/* enable DMA it */
|
||||||
dma_interrupt_enable (DMA1,USER_DMA_ADC_CHANNEL,DMA_INT_FTF);//DMA传输完成标志位 打开全部完成中断
|
dma_interrupt_enable (DMAX,USER_DMA_ADC_CHANNEL,DMA_INT_FTF);//DMA传输完成标志位 打开全部完成中断 4
|
||||||
dma_interrupt_enable (DMA1,USER_DMA_ADC_CHANNEL,DMA_INT_TAE);
|
// dma_interrupt_enable (DMAX,USER_DMA_ADC_CHANNEL,DMA_INT_TAE);//传输错误中断使能位 2
|
||||||
dma_interrupt_enable (DMA1,USER_DMA_ADC_CHANNEL,DMA_INT_FEE);
|
// dma_interrupt_enable (DMAX,USER_DMA_ADC_CHANNEL,DMA_INT_FEE);// 7
|
||||||
nvic_irq_enable (DMA_ADC_IRQn, DMA_ADC_PRIORITY_PRE, DMA_ADC_PRIORITY_SUB);
|
nvic_irq_enable (DMA_ADC_IRQn, DMA_ADC_PRIORITY_PRE, DMA_ADC_PRIORITY_SUB);
|
||||||
|
|
||||||
dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);// enable DMA channel
|
dma_channel_enable (DMAX, USER_DMA_ADC_CHANNEL);// enable DMA channel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,7 +164,10 @@ void adc_config(void)
|
||||||
adc_inserted_channel_config (ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);//电压
|
adc_inserted_channel_config (ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);//电压
|
||||||
adc_inserted_channel_config (ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);//电流
|
adc_inserted_channel_config (ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);//电流
|
||||||
}
|
}
|
||||||
|
#ifdef DMAX
|
||||||
|
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
adc_routine_channel_config(ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 使能外部触发:这里使用软件触发,所以先禁用硬件触发 */
|
/* 使能外部触发:这里使用软件触发,所以先禁用硬件触发 */
|
||||||
// adc_external_trigger_source_config(ADCX, SEQUENCE_CHANNEL, ADC_EXTTRIG_ROUTINE_T0_CH0);
|
// adc_external_trigger_source_config(ADCX, SEQUENCE_CHANNEL, ADC_EXTTRIG_ROUTINE_T0_CH0);
|
||||||
|
@ -192,34 +196,41 @@ void adc_interrupt_int(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------采集---------------------------------------------------- */
|
/* ---------------------------------------------------采集---------------------------------------------------- */
|
||||||
|
|
||||||
// adc电压采集
|
// adc电压采集
|
||||||
float ptz_Voltage_collect_adc1_task()
|
float ptz_Voltage_collect_adc1_task()
|
||||||
{
|
{
|
||||||
static float adc1_v[LB_V_TIMES];
|
|
||||||
static float curadc1_out_v;
|
|
||||||
static uint8_t adc1_v_num = 0;
|
|
||||||
uint16_t value_V = 0;
|
uint16_t value_V = 0;
|
||||||
|
|
||||||
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
|
#ifdef ADC_MODE_0
|
||||||
{
|
/* 模式1需先配置 */
|
||||||
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
}
|
#endif
|
||||||
|
|
||||||
|
#if (defined ADC_MODE_0) || (defined ADC_MODE_1)
|
||||||
|
/* 模式1 + 2 */
|
||||||
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
||||||
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
|
#endif
|
||||||
{
|
|
||||||
|
#ifdef ADC_MODE_0
|
||||||
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
|
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
|
||||||
adc_flag_clear(ADCX, ADC_FLAG_EOC);
|
adc_flag_clear(ADCX, ADC_FLAG_EOC);
|
||||||
value_V = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
value_V = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
||||||
}
|
#endif
|
||||||
else if (SEQUENCE_CHANNEL == ADC_INSERTED_CHANNEL)
|
|
||||||
{
|
#ifdef ADC_MODE_1
|
||||||
while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束
|
while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束
|
||||||
adc_flag_clear(ADCX, ADC_FLAG_EOIC);
|
adc_flag_clear(ADCX, ADC_FLAG_EOIC);
|
||||||
value_V = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_0); // 读取注入组数据寄存器
|
value_V = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_0); // 读取注入组数据寄存器
|
||||||
}
|
#endif
|
||||||
|
|
||||||
|
#ifdef ADC_MODE_3
|
||||||
|
value_V = BSP_ADCDataAcquire(0);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 间接测量,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;
|
||||||
|
|
||||||
|
@ -230,7 +241,7 @@ float ptz_Voltage_collect_adc1_task()
|
||||||
filter_v_flag = 1;
|
filter_v_flag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter_v_flag)
|
if (filter_v_flag)//等读满一组开始滤波
|
||||||
{
|
{
|
||||||
return Filtering(adc1_v, LB_V_TIMES, LB_V_DEL);
|
return Filtering(adc1_v, LB_V_TIMES, LB_V_DEL);
|
||||||
}
|
}
|
||||||
|
@ -242,29 +253,33 @@ float ptz_Voltage_collect_adc1_task()
|
||||||
// adc电流采集
|
// adc电流采集
|
||||||
float ptz_Current_collect_adc1_task()
|
float ptz_Current_collect_adc1_task()
|
||||||
{
|
{
|
||||||
static float adc1_i[LB_I_TIMES];
|
|
||||||
static float curadc1_out_i;
|
|
||||||
static uint8_t adc1_i_num = 0;
|
|
||||||
uint16_t value_I = 0;
|
uint16_t value_I = 0;
|
||||||
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
|
|
||||||
{
|
#ifdef ADC_MODE_0
|
||||||
|
/* 模式1需先配置 */
|
||||||
adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
}
|
#endif
|
||||||
|
|
||||||
|
#if (defined ADC_MODE_0) || (defined ADC_MODE_1)
|
||||||
|
/* 模式1 + 2 */
|
||||||
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
|
||||||
|
#endif
|
||||||
|
|
||||||
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
|
#ifdef ADC_MODE_0
|
||||||
{
|
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
|
||||||
while (adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束->等到SET
|
|
||||||
adc_flag_clear(ADCX, ADC_FLAG_EOC);
|
adc_flag_clear(ADCX, ADC_FLAG_EOC);
|
||||||
value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
|
||||||
}
|
#endif
|
||||||
else if (SEQUENCE_CHANNEL == ADC_INSERTED_CHANNEL)
|
|
||||||
{
|
#ifdef ADC_MODE_1
|
||||||
while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束
|
while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束
|
||||||
adc_flag_clear(ADCX, ADC_FLAG_EOIC);
|
adc_flag_clear(ADCX, ADC_FLAG_EOIC);
|
||||||
value_I = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_1); // 读取注入组数据寄存器
|
value_I = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_1); // 读取注入组数据寄存器
|
||||||
}
|
#endif
|
||||||
|
|
||||||
|
#ifdef ADC_MODE_3
|
||||||
|
value_I = BSP_ADCDataAcquire(1);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 间接测量,11倍分压/放大 */
|
/* 间接测量,11倍分压/放大 */
|
||||||
adc1_i[adc1_i_num] = (((float)value_I / 4095.0 * 3.3) - 3.3 / 2) / 0.132;
|
adc1_i[adc1_i_num] = (((float)value_I / 4095.0 * 3.3) - 3.3 / 2) / 0.132;
|
||||||
|
@ -284,13 +299,9 @@ float ptz_Current_collect_adc1_task()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//温度采集
|
/* 温度采集 */
|
||||||
float ptz_temperature_collect_tmp75_task()
|
float ptz_temperature_collect_tmp75_task()
|
||||||
{
|
{
|
||||||
static float tmp75[5];
|
|
||||||
static unsigned char tmp75_num;
|
|
||||||
static float curtmp75_out;
|
|
||||||
|
|
||||||
tmp75[tmp75_num] = tmp75_read_temp();
|
tmp75[tmp75_num] = tmp75_read_temp();
|
||||||
tmp75_num ++;
|
tmp75_num ++;
|
||||||
|
|
||||||
|
@ -306,7 +317,7 @@ float ptz_temperature_collect_tmp75_task()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 滤波函数 */
|
||||||
float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel)
|
float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel)
|
||||||
{
|
{
|
||||||
uint8_t j,k;
|
uint8_t j,k;
|
||||||
|
@ -325,7 +336,6 @@ float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(uint8_t i = filterdel; i < filterlens - filterdel; i++)
|
for(uint8_t i = filterdel; i < filterlens - filterdel; i++)
|
||||||
{
|
{
|
||||||
curadc = curadc + filter[i];
|
curadc = curadc + filter[i];
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#define ADC_MODE_0 //规则组、单次转换、非扫描
|
#define ADC_MODE_0 //规则组、单次转换、非扫描
|
||||||
// #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集
|
// #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集
|
||||||
// #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集
|
// #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集
|
||||||
|
// #define ADC_MODE_3 //规则组、连续转换、扫描、DMA采集
|
||||||
|
|
||||||
/*
|
/*
|
||||||
adc模式配置参数
|
adc模式配置参数
|
||||||
|
@ -34,36 +35,47 @@ adc模式配置参数
|
||||||
DISABLE
|
DISABLE
|
||||||
*/
|
*/
|
||||||
#ifdef ADC_MODE_0
|
#ifdef ADC_MODE_0
|
||||||
|
|
||||||
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
||||||
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
||||||
// #define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
|
||||||
#define SCAN_STATUS DISABLE // 是否开启扫描模式
|
#define SCAN_STATUS DISABLE // 是否开启扫描模式
|
||||||
#define CHANNEL_LENGTH 1 // 通道数量:1~16
|
#define CHANNEL_LENGTH 1 // 通道数量:1~16
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ADC_MODE_1
|
#ifdef ADC_MODE_1
|
||||||
|
|
||||||
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
||||||
// #define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
|
||||||
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
||||||
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
||||||
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ADC_MODE_2
|
#ifdef ADC_MODE_2
|
||||||
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
|
||||||
// #define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
#define CONTINUOUS_STATUS DISABLE // 不开启连续转换
|
||||||
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
||||||
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
||||||
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
||||||
#define ADCX_IRQn ADC_IRQn
|
#define ADCX_IRQn ADC_IRQn
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ADC_MODE_3
|
||||||
|
|
||||||
|
#define CONTINUOUS_STATUS ENABLE // 开启连续转换
|
||||||
|
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
||||||
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
||||||
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
||||||
|
#define DMAX DMA1
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* adc dma */
|
/* adc dma */
|
||||||
// #define DMAX DMA1
|
|
||||||
|
|
||||||
#ifdef DMAX
|
#ifdef DMAX
|
||||||
#define DMA_STATUS DISABLE // 是否开启dma *后续把这个定义改到#ifdef里*
|
|
||||||
#define USER_DMA_ADC_CHANNEL DMA_CH3 //DMA通道:ADC0:DMA_CH0 DMA_CH4
|
#define USER_DMA_ADC_CHANNEL DMA_CH3 //DMA通道:ADC0:DMA_CH0 DMA_CH4
|
||||||
// ADC1:DMA_CH2 DMA_CH3
|
// ADC1:DMA_CH2 DMA_CH3
|
||||||
// ADC2:DMA_CH0 DMA_CH3
|
// ADC2:DMA_CH0 DMA_CH3
|
||||||
|
@ -102,6 +114,7 @@ void adc_interrupt_int(void);
|
||||||
#ifdef DMAX
|
#ifdef DMAX
|
||||||
void adc_dma_config(void);
|
void adc_dma_config(void);
|
||||||
__weak void DMA1_Channel0_IRQHandler(void);
|
__weak void DMA1_Channel0_IRQHandler(void);
|
||||||
|
uint16_t BSP_ADCDataAcquire(uint8_t _index);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
/*************************************************
|
||||||
|
Copyright (c) 2025, 成都赛联科技有限责任公司
|
||||||
|
All rights reserved.
|
||||||
|
@file drv_i2c.C
|
||||||
|
@brief drv_i2c驱动程序
|
||||||
|
|
||||||
|
@details
|
||||||
|
@note
|
||||||
|
@author dufresne
|
||||||
|
@date 2025/09/24
|
||||||
|
|
||||||
|
@version v1.0 2025/09/24 初始版本
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
#include "drv_i2c.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_init(void)
|
||||||
|
{
|
||||||
|
i2c_gpio_config();
|
||||||
|
i2c_config();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
@ brief 初始化tmp75芯片GPIO引脚
|
||||||
|
@ param
|
||||||
|
@ return
|
||||||
|
@ note 2025-09-15
|
||||||
|
*/
|
||||||
|
void i2c_gpio_config(void)
|
||||||
|
{
|
||||||
|
// 配置引脚时钟
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
||||||
|
|
||||||
|
gpio_af_set(GPIOB, GPIO_AF_4, I2C_SCL_PIN | I2C_SDA_PIN);
|
||||||
|
/* 初始化GPIO复用功能模式 */
|
||||||
|
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, I2C_SCL_PIN | I2C_SDA_PIN);
|
||||||
|
gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, I2C_SCL_PIN | I2C_SDA_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_config(void)
|
||||||
|
{
|
||||||
|
// 启用 I2C 外设的时钟
|
||||||
|
rcu_periph_clock_enable(RCU_I2C0);
|
||||||
|
|
||||||
|
// 配置 I2C 的时钟参数:
|
||||||
|
// I2C_PERIPH:这里使用的I2C1
|
||||||
|
// I2C_SPEED:通信速率(单位为 Hz,常用为 100000 或 400000),这里使用100000
|
||||||
|
i2c_clock_config(I2C_PERIPH, I2C_SPEED, I2C_DTCY_2);
|
||||||
|
|
||||||
|
// 配置 I2C 工作模式和地址:
|
||||||
|
// I2C_ADDFORMAT_7BITS:使用 7 位地址模式
|
||||||
|
// I2C_BUS_ADDRESS:SD2068器件代码0110010 = 0x32
|
||||||
|
i2c_mode_addr_config(I2C_PERIPH, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, I2C_BUS_ADDRESS);
|
||||||
|
|
||||||
|
// 启用 I2C 外设
|
||||||
|
i2c_enable(I2C_PERIPH);
|
||||||
|
|
||||||
|
// 使能 ACK 应答功能,确保在接收数据后自动发送 ACK
|
||||||
|
i2c_ack_config(I2C_PERIPH, I2C_ACK_ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ 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,41 @@
|
||||||
|
///Copyright (c) 2022, 四川汇源光通信有限公司
|
||||||
|
///All rights reserved.
|
||||||
|
///@file drv_i2c.h
|
||||||
|
///@brief drv_i2c驱动程序
|
||||||
|
///
|
||||||
|
///@details
|
||||||
|
///@note
|
||||||
|
///@author dufresne
|
||||||
|
///@date 2025/09/24
|
||||||
|
///
|
||||||
|
///@version v1.0 2025/09/24 初始版本
|
||||||
|
|
||||||
|
#ifndef DRV_I2C_H
|
||||||
|
#define DRV_I2C_H
|
||||||
|
|
||||||
|
#include "gd32f4xx_gpio.h"
|
||||||
|
#include "gd32f4xx_i2c.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define I2C_PERIPH I2C0
|
||||||
|
#define I2C_SCL_PIN GPIO_PIN_6
|
||||||
|
#define I2C_SDA_PIN GPIO_PIN_7
|
||||||
|
#define I2C_SPEED 100000
|
||||||
|
|
||||||
|
// #define I2C_SCL_HIGH gpio_bit_set(GPIOB, I2C_SCL_PIN)
|
||||||
|
// #define I2C_SCL_LOW gpio_bit_reset(GPIOB, I2C_SCL_PIN)
|
||||||
|
|
||||||
|
// #define I2C_SDA_HIGH gpio_bit_set(GPIOB, I2C_SDA_PIN)
|
||||||
|
// #define I2C_SDA_LOW gpio_bit_reset(GPIOB, I2C_SDA_PIN)
|
||||||
|
// #define I2C_SDA_GET gpio_input_bit_get(GPIOB, I2C_SDA_PIN)
|
||||||
|
|
||||||
|
|
||||||
|
void i2c_init(void);
|
||||||
|
void i2c_gpio_config(void);
|
||||||
|
void i2c_config(void);
|
||||||
|
|
||||||
|
void temp75_gpio_init();
|
||||||
|
float tmp75_read_temp(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
#define MB85RC64_ADDRESS_WRITE 0xA0
|
#define MB85RC64_ADDRESS_WRITE 0xA0
|
||||||
#define MB85RC64_ADDRESS_READ 0xA1
|
#define MB85RC64_ADDRESS_READ 0xA1
|
||||||
|
//mb85rc64湔揣華硊
|
||||||
|
#define MB85RC64_SAVE_ADDRESS_BEGIN 0x0000
|
||||||
|
|
||||||
|
|
||||||
#define MB85RC64_SCL_HIGH gpio_bit_set(GPIOB, GPIO_PIN_6)
|
#define MB85RC64_SCL_HIGH gpio_bit_set(GPIOB, GPIO_PIN_6)
|
||||||
#define MB85RC64_SCL_LOW gpio_bit_reset(GPIOB, GPIO_PIN_6)
|
#define MB85RC64_SCL_LOW gpio_bit_reset(GPIOB, GPIO_PIN_6)
|
||||||
|
@ -25,8 +28,6 @@
|
||||||
#define MB85RC64_SDA_LOW gpio_bit_reset(GPIOB, GPIO_PIN_7)
|
#define MB85RC64_SDA_LOW gpio_bit_reset(GPIOB, GPIO_PIN_7)
|
||||||
#define MB85RC64_SDA_GET gpio_input_bit_get(GPIOB, GPIO_PIN_7)
|
#define MB85RC64_SDA_GET gpio_input_bit_get(GPIOB, GPIO_PIN_7)
|
||||||
|
|
||||||
//mb85rc64湔揣華硊
|
|
||||||
#define MB85RC64_SAVE_ADDRESS_BEGIN 0x0000
|
|
||||||
|
|
||||||
void mb85rc64_gpio_init();
|
void mb85rc64_gpio_init();
|
||||||
char mb85rc64_page_write(unsigned short int addr, unsigned char* data, int data_len);
|
char mb85rc64_page_write(unsigned short int addr, unsigned char* data, int data_len);
|
||||||
|
|
|
@ -207,6 +207,7 @@ static void master_noack()
|
||||||
TMP75_SCL_LOW;
|
TMP75_SCL_LOW;
|
||||||
delay_us(5);
|
delay_us(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ brief ¶ÁȡζÈÖµ
|
@ brief ¶ÁȡζÈÖµ
|
||||||
@ param
|
@ param
|
||||||
|
@ -239,6 +240,7 @@ float tmp75_read_temp(void)
|
||||||
tempL = tmp75_read_byte();
|
tempL = tmp75_read_byte();
|
||||||
master_noack();
|
master_noack();
|
||||||
i2c_stop();
|
i2c_stop();
|
||||||
|
|
||||||
tempCode = (tempH << 8) | tempL;
|
tempCode = (tempH << 8) | tempL;
|
||||||
tempCode = tempCode >> 6;
|
tempCode = tempCode >> 6;
|
||||||
if (tempCode & 0x200) // ¸ºÎ¶È
|
if (tempCode & 0x200) // ¸ºÎ¶È
|
||||||
|
|
Loading…
Reference in New Issue