找回密码
 立即注册
楼主: haojin

急请,看下总是提示如下引用错误

[复制链接]
已绑定手机

98

主题

380

回帖

590

积分

高级会员

积分
590
发表于 2026-9-4 07:27:50 | 显示全部楼层
对啊,缺个分号,先补上再说呗
回复

使用道具 举报 送花

14

主题

1423

回帖

7869

积分

论坛元老

积分
7869
发表于 2026-9-4 09:24:43 | 显示全部楼层

针对这类问题,我给出以下排查建议:

1. 先检查语法:确认所有语句末尾是否都有分号(;),尤其是结构体声明和变量定义附近。

2. 确认头文件包含路径:检查 STC8G_H_ADC.h 是否确实被包含,以及其内容是否正确(条件编译宏是否匹配)。

3. 确认结构体定义:在 adc.c 中直接使用 ADC_InitTypeDef 类型之前,必须已经通过 #include "STC8G_H_ADC.h" 引入了该类型的定义。

4. 正确使用结构体变量:不能直接用类型名 ADC_InitTypeDef 作为参数,必须先定义该类型的变量,如:

ADC_InitTypeDef ADC_Init;
ADC_Inilize(&ADC_Init);

5. 注意嵌套包含保护:如果 adc.h 包含 STC8G_H_ADC.h,而 adc.c 又包含了 adc.h,要注意使用条件编译保护(#ifndef),避免重复包含。
回复

使用道具 举报 送花

14

主题

1423

回帖

7869

积分

论坛元老

积分
7869
发表于 2026-9-4 09:31:36 | 显示全部楼层

1. 结构体定义(在 STC8G_H_ADC.h 中已定义):
2. 函数原型:
STC8G_H_ADC.h

  1. typedef struct
  2. {
  3.         u8        ADC_SMPduty;                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
  4.         u8        ADC_Speed;                        //设置 ADC 工作时钟频率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
  5.         u8        ADC_AdjResult;        //ADC结果调整,        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
  6.         u8        ADC_CsSetup;                //ADC 通道选择时间控制 0(默认),1
  7.         u8        ADC_CsHold;                        //ADC 通道选择保持时间控制 0,1(默认),2,3
  8. } ADC_InitTypeDef;
  9. void        ADC_Inilize(ADC_InitTypeDef *ADCx);
  10. void        ADC_PowerControl(u8 pwr);
  11. u16                Get_ADCResult(u8 channel);        //channel = 0~15
复制代码

STC8G_H_ADC.c
  1. #include        "STC8G_H_ADC.h"
  2. //========================================================================
  3. // 函数: void        ADC_Inilize(ADC_InitTypeDef *ADCx)
  4. // 描述: ADC初始化程序.
  5. // 参数: ADCx: 结构参数,请参考adc.h里的定义.
  6. // 返回: none.
  7. // 版本: V1.0, 2012-10-22
  8. //========================================================================
  9. void        ADC_Inilize(ADC_InitTypeDef *ADCx)
  10. {
  11.         ADCCFG = (ADCCFG & ~ADC_SPEED_2X16T) | ADCx->ADC_Speed;        //设置ADC工作时钟频率
  12.         ADC_Justify(ADCx->ADC_AdjResult);                //AD转换结果对齐方式
  13.         if(ADCx->ADC_SMPduty > 31)        return;        //错误
  14.         if(ADCx->ADC_CsSetup > 1)        return;        //错误
  15.         if(ADCx->ADC_CsHold > 3)        return;        //错误
  16.         ADCTIM = (ADCx->ADC_CsSetup << 7) | (ADCx->ADC_CsHold << 5) | ADCx->ADC_SMPduty ;                //设置 ADC 内部时序,ADC采样时间建议设最大值
  17. }
复制代码
3. 正确调用方式(定义结构体变量并传地址):
正确写法如下:
main.c
  1. /******************* AD配置函数 *******************/
  2. void        ADC_config(void)
  3. {
  4.         ADC_InitTypeDef                ADC_InitStructure;                //结构定义
  5.         ADC_InitStructure.ADC_SMPduty   = 31;                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
  6.         ADC_InitStructure.ADC_CsSetup   = 0;                //ADC 通道选择时间控制 0(默认),1
  7.         ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道选择保持时间控制 0,1(默认),2,3
  8.         ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X16T;                //设置 ADC 工作时钟频率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
  9.         ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC结果调整,        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
  10.         ADC_Inilize(&ADC_InitStructure);                //初始化
  11.         ADC_PowerControl(ENABLE);                                //ADC电源开关, ENABLE或DISABLE
  12.         NVIC_ADC_Init(DISABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
  13. }
复制代码
11-多路ADC转换-BandGap-串口2发送.zip (40.42 KB, 下载次数: 0)

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-22 12:34 , Processed in 0.065587 second(s), 53 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表