定时器6中断
cubeMX配置定时器6中断,产生1ms的时基
在中断回调函数中tim6_count++计数:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim6)
{
tim6_count++;
}
}
stm32cubeIDE开启浮点数的配置
cubeIDE未启用浮点输出,提示的警告:
The float formatting support is not enabled, check your MCU Settings from "Project Properties > C/C++ Build > Settings > Tool Settings", or add manually "-u _printf_float" in linker flags.
通过修改属性进行消除:
选择"Properties"(属性)-> 选择"C/C++ Build"(C/C++构建)-> 展开"C/C++ Build"并选择"Settings"(设置),勾选printf float按钮,再重新编译工程,便可输出浮点数;
ADC采集VBUS+SENSE
U5主打Ultra-low-power,这块有点不一样,各个部分的电源都可以单独使能控制;
我的cubeMX是6.8.0版本的···生成的工程中对PG2的RED灯还有ADC都没有开启Vdd;
6.9.0版本的cubemx生成的工程就没有问题了;
这里配置完,郁闷了一会,输出一直全0;
检查好久没找到原因;先前没有好好看手册,最后才发现是该部分的电源没开...
启动,按14位ADC配置,391.5Cycles
★这里使能VddA模拟电:
HAL_PWREx_EnableVddA();
★这里使能PG2~15的供电VddIO2:
HAL_PWREx_EnableVddIO2();
以下为可控制使能的Vdd电源:
5V_UCPD需要接入TYPE-C
配合着TIM6定时器的计数使用:
if(0 == tim6_count%1000)
{
printf("tim6_count:%ld\r\n",tim6_count);
HAL_ADC_Start(&hadc1);
adc_val = HAL_ADC_GetValue(&hadc1);
printf("ADC VaL: %d , %.3f\r\n", adc_val,(float)adc_val*3.3/16384);
}
接入typeC供电和未接入TypeC供电电压,和实际测量对比,长采样周期时,测量值相一致;
sConfig.SamplingTime = ADC_SAMPLETIME_5CYCLE;
sConfig.SamplingTime = ADC_SAMPLETIME_391CYCLES_5;