当前位置: 首页> 教育> 锐评 > 网络培训平台下载_福田祥菱m1图片及报价_郑州网站推广公司电话_seo整站优化推广

网络培训平台下载_福田祥菱m1图片及报价_郑州网站推广公司电话_seo整站优化推广

时间:2025/7/11 18:00:41来源:https://blog.csdn.net/2403_87830841/article/details/146355770 浏览次数:0次
网络培训平台下载_福田祥菱m1图片及报价_郑州网站推广公司电话_seo整站优化推广

问题描述-1

想实现的功能是,通过ADC实时测量某引脚的电压及其占空比。

可以通过旋转电位器,更改其电压。

首先我定义了这几个变量

uint32_t adc_value;//HAL库函数里面得出的采样值(实时更新)
uint32_t percentage6;//占空比,随着adc_value变化而变化
uint32_t percentage7;//占空比,随着adc_value变化而变化

然后在while循环里面不断测量adc的采样值 

adc_value = HAL_ADC_GetValue(hadc);

 同样的在while循环里面不断更新这两个占空比的值。

percentage6 = adc_value / 4096;
percentage7 = adc_value / 4096;

但是会发现percentage6,percentage7的值总是0.

之前一直没想到小数的问题(太久不写代码了,悲).

解决方案-1

就是把赋值过程改成浮点数再转换成整数。

percentage6 = ((float)adc_value / 4096.0f)*100;
percentage7 = ((float)adc_value / 4096.0f)*100;

这样出来就是整数了

percentage6  = 80。。。等等\

ok解决

问题二:

实际上面的过程我都是用函数实现的。

把lcd_show()放在while里面循环执行。

void lcd_show()
{percentage6 = ((float)adc_value / 4096.0f)*100;percentage7 = ((float)adc_value / 4096.0f)*100;if (Page == 0 && mode == 0){sprintf(text, "      Data         ");LCD_DisplayStringLine(Line0, (uint8_t *)text);sprintf(text, "     V:%.2fV      ", get_vol(&hadc2));LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text, "     Mode:AUTO    ");LCD_DisplayStringLine(Line4, (uint8_t *)text);}else if (Page == 0 && mode == 1){sprintf(text, "      Data         ");LCD_DisplayStringLine(Line0, (uint8_t *)text);sprintf(text, "     V:%.2fV      ", get_vol(&hadc2));LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text, "     Mode:MANU    ");LCD_DisplayStringLine(Line4, (uint8_t *)text);}else if (Page == 1){sprintf(text, "      Para         ");LCD_DisplayStringLine(Line0, (uint8_t *)text);sprintf(text, "    PA6:%d         ",percentage6);LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text, "    PA7:%d         ",percentage7);LCD_DisplayStringLine(Line4, (uint8_t *)text);}
}
double get_vol(ADC_HandleTypeDef *hadc)
{HAL_ADC_Start(hadc);adc_value = HAL_ADC_GetValue(hadc);return 3.3 * adc_value / 4096;
}

但是在调试的时候发现,percentage的值只能更新一次,但是adc_value的值是不断变化的

解决二:

这是因为,在lcd_show()函数实现的开头赋值的时候,没更新adc_value的值。

在开头加上这个函数重新更新一遍就好了。

 get_vol(ADC_HandleTypeDef *hadc)

记录学习。

关键字:网络培训平台下载_福田祥菱m1图片及报价_郑州网站推广公司电话_seo整站优化推广

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: