找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2952|回复: 4
打印 上一主题 下一主题
收起左侧

STM32F1与BQ4050的通讯源码分享

  [复制链接]
跳转到指定楼层
楼主
ID:524634 发表于 2021-4-28 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习STM32的时候,应用STM32F1与BQ4050做通讯,经过各种调试,以及网上查找资料,IIC通讯等待应答的时间需要拉长,IIC通讯的调试,通过示波器查看波形真的很重要

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "myiic.h"
  6. #include "key.h"

  7. //#define BQ4050_REG_TEMP                  0x08                //Temperature   U2
  8. //#define BQ4050_REG_VOLT                  0x09                //Voltage   U2#define BQ4050_REG_CURRENT          0x0A                //CURRENT   I2
  9. //#define BQ4050_REG_RSOC                  0x0D                //RelativeStateOfCharge U1
  10. //#define BQ4050_REG_FCC                  0x10                //FullChargeCapacity    U2
  11. //#define BQ4050_REG_RTE                  0x11                //run time to empty
  12. //#define BQ4050_REG_TTE                  0x12                //TimeToEmpty   U2
  13. //#define BQ4050_REG_TTF                  0x13                //TimeToFull    U2
  14. //#define BQ4050_REG_RMC                  0x0F                ///* Remaining Capacity */



  15. u8 DLHR_DATA[2] = {0x00};
  16. u8 buff[4]  = {0x00};

  17. uint16_t Read_BQ4050(uint8_t Commond)
  18. {
  19.         uint16_t data=0,data1=0;
  20.         u8 I2c_Address = 0x16;
  21.         //u8 Read_Commond = 0x09;

  22.        
  23.         IIC_Start();

  24.         IIC_Send_Byte(I2c_Address);//write
  25.        
  26.         IIC_Wait_Ack();
  27.        

  28.         IIC_Send_Byte(Commond);//
  29.                                
  30.         IIC_Wait_Ack();

  31.        
  32.         IIC_Start();
  33.         IIC_Send_Byte((I2c_Address)+1);//read

  34.         IIC_Wait_Ack();
  35.                
  36.   data = IIC_Read_Byte(1);//STATUS[7:0]
  37.         data1 = IIC_Read_Byte(0);//PRESSURE[23:16]
  38.        

  39. IIC_Stop();       
  40.         data=data|data1<<8;
  41.         return data;

  42.        
  43. }

  44. int main(void)
  45. {       
  46.         u8 t=0;       
  47.          u8 d=0;
  48.          uint16_t data1=0,data2=0;
  49.         delay_init();                     //延时函数初始化       
  50.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  51.         uart_init(9600);         //串口初始化为9600
  52.         LED_Init();                         //初始化与LED连接的硬件接口
  53.          KEY_Init();
  54.         IIC_Init();
  55.         while(1)
  56.         {
  57.         //data=Read_BQ4050(0x09)&0x7fff;
  58.                 data1=Read_BQ4050(0x09);
  59.                 data2=Read_BQ4050(0x0d);
  60.        
  61.         delay_ms(300);
  62.                 printf("val= %d\r\n",data1);
  63.                         printf("Cap= %d\r\n",data2);
  64.        
  65.                        
  66.                 GPIO_ResetBits(GPIOA,GPIO_Pin_8);
  67.                        
  68.                                
  69.        
  70.         }
  71.                
  72.                
  73. }
复制代码

所有资料51hei提供下载:
BQ4050.7z (184.45 KB, 下载次数: 118)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:923581 发表于 2021-12-14 14:28 | 只看该作者
感谢,可用
回复

使用道具 举报

板凳
ID:1104880 发表于 2023-12-19 13:05 | 只看该作者
是否可以分享代码呢? 另外BQ4050与BQ3060物理层是否一致?
回复

使用道具 举报

地板
ID:1104880 发表于 2023-12-19 13:06 | 只看该作者
BQ4050与BQ3060底层时序一致,命令地址不一致。
回复

使用道具 举报

5#
ID:1104880 发表于 2023-12-20 15:17 | 只看该作者
xuelijun0451325 发表于 2023-12-19 13:06
BQ4050与BQ3060底层时序一致,命令地址不一致。

你好,我用您的示例代码,发现无法与BQ4050通讯。用逻辑分析仪发现是丢失了应答信号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表