59 lines
2.3 KiB
C
59 lines
2.3 KiB
C
/*
|
||
* @Description 使用IIC1 驱动SGM58031
|
||
* @Version: 1.0
|
||
* @Autor: lzc
|
||
* @Date: 2022-09-02 08:59:57
|
||
* @LastEditors: lzc
|
||
* @LastEditTime: 2023-08-09 08:48:03
|
||
*/
|
||
#ifndef __DRV_SGM58031_H
|
||
#define __DRV_SGM58031_H
|
||
#include "main.h"
|
||
#include "stm32f4xx.h"
|
||
#include "stm32f4xx_rcc.h"
|
||
#include "stm32f4xx_gpio.h"
|
||
|
||
// 输入电压 = AINP-AINN 默认AINP=AIN0 AINN=AIN1
|
||
// 输出数据速率 = 100HZ,即10ms更新一次数据
|
||
/* SGM58031内部寄存器地址 */
|
||
#define Conversion_Reg 0x00 // AD值转换寄存器,16bit数据,默认值0x0000,只读
|
||
#define Config_Reg 0x01 // 配置寄存器,默认0x8583,可读可写
|
||
#define Lo_Thresh_Reg 0x02 // 比较器阈值下限,默认0x8000
|
||
#define Hi_Thresh_Reg 0x03 // 比较器阈值上限,默认0x7FFF
|
||
#define Config1_Reg 0x04 // 扩展配置寄存器,默认0x0000
|
||
#define ChipID_Reg 0x05 // 芯片ID,默认0x0080
|
||
#define GN_Trim1_Reg 0x06 // 增益修正,默认0x03FA
|
||
|
||
// 输入输出设置io
|
||
#define SDA_IN() \
|
||
{ \
|
||
GPIOB->MODER &= ~(3 << (7 * 2)); \
|
||
GPIOB->MODER |= 0 << 7 * 2; \
|
||
}
|
||
#define SDA_OUT() \
|
||
{ \
|
||
GPIOB->MODER &= ~(3 << (7 * 2)); \
|
||
GPIOB->MODER |= 1 << 7 * 2; \
|
||
}
|
||
|
||
// IO操作函数
|
||
#define IIC_SCL PBout(6) // SCL
|
||
#define IIC_SDA PBout(7) // SDA
|
||
#define READ_SDA GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7) // 输入SDA
|
||
|
||
// IIC所有操作函数
|
||
void IIC_Init(void); // 初始化IIC的IO口
|
||
void IIC_Start(void); // 发送IIC开始信号
|
||
void IIC_Stop(void); // 发送IIC停止信号
|
||
void IIC_Send_Byte(u8 txd); // IIC发送一个字节
|
||
u8 IIC_Read_Byte(unsigned char ack); // IIC读取一个字节
|
||
u8 IIC_Wait_Ack(void); // IIC等待ACK信号
|
||
void IIC_Ack(void); // IIC发送ACK信号
|
||
void IIC_NAck(void); // IIC不发送ACK信号
|
||
|
||
float SGM58031_ReadADCValue(void);
|
||
char SGM58031_WriteConfig(uint16_t data);
|
||
void SGM58031_WriteData(uint8_t addr, uint16_t data, uint8_t device_addr);
|
||
uint16_t SGM58031_ReadData(uint8_t addr, uint8_t device_addr, uint16_t ByteNumToRead); // 寄存器地址,器件地址,要读的字节数
|
||
|
||
#endif |