基础任务3-------INA219测量电压电流
欢迎来到基础任务3
这篇文章对数字的显示有不同的用法
希望能够帮助到你
本节所有代码均已放置在末尾附件中~

一、配置引脚
INA219详细参数请参考上一篇开箱文,
对于接线和配置已经很清楚,这里不赘述
重新用cubemx打开刚刚配置的文件的.ioc文件,
通信栏中任选一组i2c进行使能,这里我选择了i2c1
配置为I2C


参数基本上保持默认
右侧选择I2C1右侧map图会高亮被自动配置的引脚,
如果你不需要重新映射,直接将INA219的通讯接口接入即可
(如果需要指定重映射引脚,请先配置引脚)


生成后,加入INA219驱动代码(驱动代码在本章最后)
值得注意的是,模块上有拨动开关,其拨动开关用于配置模块的I2C地址。
该模块提供了4个可通过拨码开关配置的I2C地址,
分别是0x40、0x41、0x44、0x45。
在实际应用中,如果一个系统中有多个I2C设备,
为了避免地址冲突,就可以通过拨动SEN0291上的开关来设置不同的I2C地址,
让主控能够正确识别该功率计模块

我这里默认的0x40
需要将传感器上的拨动开关拨到0

千万别忘了配置路径,与上一篇OLED配置相同,这里不赘述
二、调用数据并显示--sprintf函数的妙用
在main函数中添加
INA219_Init(&hi2c1); //使能
值得一提的是,对于数据的显示,我使用的
sprintf函数,如下
sprintf(current_OLED, "%.2f", current);//舍弃小数点后两位直接使用 %.2f
可以将数据直接写入字符型数组中,
数据长度和浮点数,
小数点什么的就不需要担心影响显示,
对于省略小数点后两位更是手拿把掐~~

使用方式与printf相似。
我之前使用过数字显示,很麻烦且需要控制位数,
小数点位置,超出范围显示就会异常
变得异常麻烦~
#include <stdio.h> //sprintf引用
char voltage_OLED[30]; //负载电压
char current_OLED[30]; //总线电流
char power_OLED[30]; //负载功率
while (1)
{
float busVoltage = INA219_GetBusVoltage_V();
float shuntVoltage = INA219_GetShuntVoltage_mV();
float current = INA219_GetCurrent_mA();
float power = INA219_GetPower_mW();
// OLED显示
sprintf(current_OLED, "%.2f", current);
OLED_ShowString(45,16,current_OLED,16,1);
sprintf(voltage_OLED, "%.2f", busVoltage);
OLED_ShowString(45,32,voltage_OLED,16,0);
sprintf(power_OLED, "%.2f", power);
OLED_ShowString(45,48,power_OLED,16,1);
OLED_Refresh();
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}最终效果如下

上述驱动代码放置于此,请结合上述使用
此附件不需要支付积分~
以上就是环境搭建与基础任务的全部内容,希望能够帮助到你
如果你觉得这篇文章还不错的话,
麻烦点个赞支持一下,
你的鼓励将会是我进步最大的动力!

这里是大桔,我们下一篇见!
我要赚赏金
