【备赛】遇到的小问题-1

问题描述-1

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

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

首先我定义了这几个变量

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

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

cpp 复制代码
adc_value = HAL_ADC_GetValue(hadc);

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

cpp 复制代码
percentage6 = adc_value / 4096;
percentage7 = adc_value / 4096;

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

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

解决方案-1

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

cpp 复制代码
percentage6 = ((float)adc_value / 4096.0f)*100;
percentage7 = ((float)adc_value / 4096.0f)*100;

这样出来就是整数了

percentage6 = 80。。。等等\

ok解决

问题二:

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

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

cpp 复制代码
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);
	}
}
cpp 复制代码
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的值。

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

cpp 复制代码
 get_vol(ADC_HandleTypeDef *hadc)

记录学习。

相关推荐
芯岭技术1 天前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
小乔的编程内容分享站1 天前
C语言笔记之函数
c语言·笔记
wotaifuzao1 天前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
四谎真好看1 天前
JavaWeb学习笔记(Day13)
笔记·学习·学习笔记·javaweb
承渊政道1 天前
Linux系统学习【Linux基础开发工具】
linux·运维·笔记·学习·centos·编辑器
小龙报1 天前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
承渊政道1 天前
C++学习之旅【C++中模板进阶内容介绍】
c语言·c++·笔记·学习·visual studio
浅念-1 天前
C语言——动态内存管理
c语言·开发语言·c++·笔记·学习
Lester_11011 天前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋1 天前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障