學習STM32的時候,應用STM32F1與BQ4050做通訊,經過各種調試,以及網上查找資料,IIC通訊等待應答的時間需要拉長,IIC通訊的調試,通過示波器查看波形真的很重要
單片機源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "myiic.h"
- #include "key.h"
- //#define BQ4050_REG_TEMP 0x08 //Temperature U2
- //#define BQ4050_REG_VOLT 0x09 //Voltage U2#define BQ4050_REG_CURRENT 0x0A //CURRENT I2
- //#define BQ4050_REG_RSOC 0x0D //RelativeStateOfCharge U1
- //#define BQ4050_REG_FCC 0x10 //FullChargeCapacity U2
- //#define BQ4050_REG_RTE 0x11 //run time to empty
- //#define BQ4050_REG_TTE 0x12 //TimeToEmpty U2
- //#define BQ4050_REG_TTF 0x13 //TimeToFull U2
- //#define BQ4050_REG_RMC 0x0F ///* Remaining Capacity */
- u8 DLHR_DATA[2] = {0x00};
- u8 buff[4] = {0x00};
- uint16_t Read_BQ4050(uint8_t Commond)
- {
- uint16_t data=0,data1=0;
- u8 I2c_Address = 0x16;
- //u8 Read_Commond = 0x09;
-
- IIC_Start();
- IIC_Send_Byte(I2c_Address);//write
-
- IIC_Wait_Ack();
-
- IIC_Send_Byte(Commond);//
-
- IIC_Wait_Ack();
-
- IIC_Start();
- IIC_Send_Byte((I2c_Address)+1);//read
- IIC_Wait_Ack();
-
- data = IIC_Read_Byte(1);//STATUS[7:0]
- data1 = IIC_Read_Byte(0);//PRESSURE[23:16]
-
- IIC_Stop();
- data=data|data1<<8;
- return data;
-
- }
- int main(void)
- {
- u8 t=0;
- u8 d=0;
- uint16_t data1=0,data2=0;
- delay_init(); //延時函數初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設置中斷優先級分組2
- uart_init(9600); //串口初始化為9600
- LED_Init(); //初始化與LED連接的硬件接口
- KEY_Init();
- IIC_Init();
- while(1)
- {
- //data=Read_BQ4050(0x09)&0x7fff;
- data1=Read_BQ4050(0x09);
- data2=Read_BQ4050(0x0d);
-
- delay_ms(300);
- printf("val= %d\r\n",data1);
- printf("Cap= %d\r\n",data2);
-
-
- GPIO_ResetBits(GPIOA,GPIO_Pin_8);
-
-
-
- }
-
-
- }
復制代碼
所有資料51hei提供下載:
BQ4050.7z
(184.45 KB, 下載次數: 125)
2021-4-28 16:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|