【STM32+HAL】读取电池电量

一、准备工作

有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置

有关定时器触发ADC模式配置,详见【STM32+HAL】ADC采集波形实现

有关软件触发ADC模式配置,详见【STM32+HAL】三轴按键PS2摇杆

二、所用工具


1、芯片: STM32F407VET6

2、IDE: MDK-Keil软件

3、库文件:STM32F4xxHAL库

三、实现功能

串口打印电池电量值

四、接线

此接口是采样电池电压和系统 VCC 电压的。其中VM 是电池电压,VCC 是系统电压。 电池电压经过 1:10 分压,VCC 电压通过 1:1 分压。使用时候注意共GND。

VCC -> 5V  (无法测量低于5V电量VM)
BAT -> PA1 (ADC1-IN1)
VM  -> 电量正极

五、HAL库配置

1、开启ADC

实验发现误差较大,故将采样周期配置为480周期(最大)

2、开启串口

 

至此,HAL库配置完毕

六、keil填写代码

1、初始化
#define SAMP 20

uint16_t adc1[SAMP]={0};
double voltage = 0;

	printf("Hello World\r\n");
	HAL_Delay(300);
	
	HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);

 

 2、打印电量值
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	   for(int i=0;i<SAMP;i++)
	  {
		  voltage = adc1[i]*3.3*11/4096.0f;
		  printf("%.2f\r\n",voltage-0.12f); 	//0.12为电量偏差经验值
	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

 

七、源码提供

资源【STM32+HAL】读取电池电量

八、结语

本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过STM32通过模拟IIC读取BQ27742的电池电量,需要以下步骤和程序。 1. 首先,需要将STM32的GPIO口配置为模拟IIC的SCL和SDA引脚。可以通过寄存器设置或者使用HAL库函数来设置。 2. 然后,需要编写函数来实现模拟IIC的通信协议,包括开始信号、停止信号、发送数据、读取数据等操作。以STM32为例,可以通过以下代码实现: ``` void IIC_Start() { // 置SCL和SDA为高电平 // 等待一段时间 // 置SDA为低电平,开始信号 // 等待一段时间 // 置SCL为低电平 // 等待一段时间 } void IIC_Stop() { // 置SDA为低电平 // 等待一段时间 // 置SCL为高电平 // 等待一段时间 // 置SDA为高电平,停止信号 // 等待一段时间 } void IIC_SendByte(uint8_t byte) { for (int i = 0; i < 8; i++) { // 将每一位数据写入SDA // 置SCL为高电平 // 等待一段时间 // 置SCL为低电平 // 等待一段时间 } // 接收从设备的应答信号 // 置SDA为高电平 // 等待一段时间 // 置SCL为高电平 // 等待一段时间 // 读取SDA的值,确定接收到的应答信号 // 置SCL为低电平 // 等待一段时间 } uint8_t IIC_ReadByte() { uint8_t byte = 0; for (int i = 0; i < 8; i++) { // 置SCL为高电平 // 等待一段时间 // 读取SDA的值,保存到byte中 // 置SCL为低电平 // 等待一段时间 } // 发送应答信号给设备 // 置SDA为低电平 // 等待一段时间 // 置SCL为高电平 // 等待一段时间 // 置SDA为高电平 // 等待一段时间 return byte; } ``` 3. 编写读取BQ27742的电池电量的函数。可以通过IIC_SendByte和IIC_ReadByte等函数来发送和接收数据。以读取电池电量为例: ``` uint16_t ReadBatteryVoltage() { uint16_t voltage = 0; IIC_Start(); IIC_SendByte(0xXX); // 发送读取电池电量的地址 IIC_ReadByte(); // 读取高位数据 IIC_ReadByte(); // 读取低位数据 IIC_Stop(); return voltage; } ``` 以上就是通过模拟IIC读取BQ27742电池电量的程序。可以根据具体的需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值