打印
[G32A]

极海开发板G32A1465+ADC在线调试过程与代码分析

[复制链接]
33|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuyu40|  楼主 | 2024-12-20 10:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
极海开发板G32A1465+ADC在线调试过程与代码分析
开箱略;
安装好keil5.36,stlink驱动,以及pack包;使用了极海G1465芯片,所以需要CPU支持包:

安装完成之后就能使用开发板进行设备调试了;
我打开了工程进行ADC转换,希望能在线调试,这里记录一下中途出现的错误和解决方法:

打开魔术棒,选择stlink仿真器对应的选项,在对话框中看到可以连接设备:

下载调试:

发现转换结果adcValue出现  not   in  scope,没有数据,直接观察结果寄存器:

能够进行转换也出现结果,查询www.bing.com.cn网页,说是因为进行了优化,所以降低优化等级:

还是不出结果,再次查询,需要将变量设置为全局变量,为了方便比较于是重新设置了一个全局变量float adresult,运行调试观察变量,可以看见局部变量还是 not  in  scope,
全局变量有了数据;

为了进行图形化观察,我安装了stm-studio,观察全局变量adresult(同样没办法观察到局部变量),得到动态波形图,而且波形图和在线调试的数据一致,这个测评基本完成:

下面阅读代码:
#define PERIPHERAL_CLOCKS_CNT                      34U
#define CLOCK_CONFIG_CNT                           1U
#define CLOCK_CALLBACK_CNT                         0U
/**@} end of group ADC_ReadConfig_Macros*/
/**@} end of group ADC_ReadConfig*/
/**@} end of group Examples*/
/* User clock configuration*/
extern CLOCK_MANAGER_USER_CONFIG_T g_clockConfig;
/* User peripheral clock configuration */使能了外设也就是ADC的时钟
extern PERIPHERAL_CLOCK_CONFIG_T g_peripheralClockConfig[PERIPHERAL_CLOCKS_CNT];
/* Array of pointers to user clock configuration */
extern CLOCK_MANAGER_USER_CONFIG_T const *g_clockConfigsArr[CLOCK_CONFIG_CNT];
/* Array of user callbacks */
extern CLOCK_MANAGER_CALLBACK_USER_CONFIG_T *g_clockCallbacksArr[];
在 user_clock_config.h文件中使能了外设也就是ADC的时钟
在主函数中定义调用以下函数:
void ADC_init(void)
{
    ADC_CONV_CFG_T adcConvCfg0;
    ADC_AVG_CFG_T adcAverCfg0;
    ADC_COMP_CFG_T adcCompareCfg0;
    ADC_CALIBRATION_T adcCalibration0;
    /* Reset adc module */
    ADC_Reset(INSTANCE);
    /* Calling ADC default initialization values */
    ADC_ConfigConverterStruct(&adcConvCfg0);
    adcConvCfg0.clockDivision = ADC_CLK_DIVISION_4;
    adcConvCfg0.resolution = ADC_RESOLUTION_RATIO_12BIT;
    /* Calling hardware average default initialization values */
    ADC_ConfigHwAverageStruct(&adcAverCfg0);
    adcAverCfg0.hwAvgEnable = true;
    adcAverCfg0.hwAverage = ADC_HW_AVERAGE_32;
    /* Call default calibration initial value*/
    ADC_ConfigUserCalibrationStruct(&adcCalibration0);
    adcCalibration0.userGain = ADC_DEFAULT_SAMPLE_TIME;
    adcCalibration0.userOffset = 20000u;
    /* Initialize ADC based on configuration values */
    ADC_ConfigConverter(INSTANCE,&adcConvCfg0);
    /* Initialize ADC hardware averaging function based on configuration values */
    ADC_ConfigHwAverage(INSTANCE,&adcAverCfg0);
    /* Enable calibration function */
    ADC_ConfigUserCalibration(INSTANCE,&adcCalibration0);
    /* Verify ADC */
    ADC_AutoCalibration(INSTANCE);
    /* Call default configuration */
    ADC_ConfigHwCompareStruct(&adcCompareCfg0);
    /* Configure hardware comparison function */
    adcCompareCfg0.compEnable = true;
    adcCompareCfg0.compGreaterThanEnable = true;
    adcCompareCfg0.compRangeFuncEnable = true;
    adcCompareCfg0.compValue1 = COMPVAL1;
    adcCompareCfg0.compValue2 = COMPVAL2;
    /* Enable hardware comparison function */
    ADC_ConfigHwCompare(INSTANCE,&adcCompareCfg0);
}
可以看出设置步骤和stm32标准库基本一致,设置内容也类似比如ADC分频时钟,ADC校准等,开发转型难度不大 ;最后给出studio视频显示ADC结果。


使用特权

评论回复
沙发
wuyu40|  楼主 | 2024-12-20 10:17 | 只看该作者
视频不能上传到网站,差评

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝