极海开发板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结果。
|