你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

各位大神求助 !!!!!急急急

[复制链接]
liuxingxyz 提问时间:2019-6-25 18:47 /
阅读主题, 点击返回1楼
收藏 评论17 发布时间:2019-6-25 18:47
17个回答
liuxingxyz 回答时间:2019-6-26 11:27:37
andeyqi 发表于 2019-6-26 11:07
没用过硬件32的硬件iic,一直都用的软件模拟的,IIC为什么还有CS呢,上述的地址3c是7bit的地址还是八位的 ...

8位的,速率100khz,I2C底层是生成的,问一下有没有ST官方STM32F407VG加速度(lis3dsh)例程?
dataozi 回答时间:2019-6-26 11:44:07
有411的 LIS2DH 模拟的IIC 你需要吗?
jeffhe1 回答时间:2019-6-26 11:57:10
cs 應該是 SPI 才有的詞 , I2C 不就 SDA SCL , 要不要先對 EEPROM 讀寫看是否成功 , 再依IC protcol 發 cmd

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

liuxingxyz 回答时间:2019-6-26 12:30:32
安 发表于 2019-6-26 11:03
楼主,最好把你操作的代码发一下,要注意I2C读写的标志位。先是写地址操作,再是读取操作。 ...

u8_t LIS3DH_WriteReg(u8_t WriteAddr, u8_t Data) {
  
    uint8_t tmp[2];
    HAL_StatusTypeDef ret;

    tmp[0] = WriteAddr;
    tmp[1] = Data;
       
    ret = HAL_I2C_Master_Transmit(&hi2c1, LIS3DH_MEMS_I2C_ADDRESS<<1, tmp, sizeof(tmp), LIS3DHTR_COMM_TIMEOUT);
       
    if (HAL_OK != ret){
    //DbgPrintfD("I2C error, %d\r\n", ret, hi2c1.ErrorCode);
    }
   return ret;
}
u8_t LIS3DH_ReadReg(u8_t Reg, u8_t* data) {
  
    HAL_StatusTypeDef ret;
          
    //DbgPrintfD("%d\t%x\r\n", reg, data);
                ret = HAL_I2C_Master_Transmit(&hi2c1, LIS3DH_MEMS_I2C_ADDRESS<<1, &Reg, 1, LIS3DHTR_COMM_TIMEOUT);
    ret = HAL_I2C_Master_Receive(&hi2c1, LIS3DH_MEMS_I2C_ADDRESS<<1, data, 1, LIS3DHTR_COMM_TIMEOUT);
    if (HAL_OK != ret){
    //DbgPrintfD("I2C error, %d %u\r\n", ret, hi2c1.ErrorCode);
    }
   return ret;
}
void Lis3dhtrInit(void)
{
          uint8_t response=0;
                response=LIS3DH_WriteReg(LIS3DH_CTRL_REG1,0x47);     // 启动传感器,使能 X、 Y 和 Z
          ODR = 100 Hz
          DbgPrintfD("设置 ODR:%d\r\n",response);
                response=LIS3DH_SetMode(LIS3DH_NORMAL);              // 设置为正常模式
          DbgPrintfD("设置 MODE:%d\r\n",response);
          LIS3DH_WriteReg(LIS3DH_CTRL_REG2,0x00);     // 高通滤波器已禁用
          LIS3DH_WriteReg(LIS3DH_CTRL_REG3,0x40);     // 中断被驱动到 INT1 焊盘
          LIS3DH_WriteReg(LIS3DH_CTRL_REG4,0x00);     // FS = 2 g
          LIS3DH_WriteReg(LIS3DH_CTRL_REG5,0x08);     // 中断已锁存
          //LIS3DH_WriteReg(LIS3DH_CTRL_REG6,0x08);
          LIS3DH_WriteReg(LIS3DH_INT1_THS,0x16);      // 将自由落体阈值设为 350 mg
          LIS3DH_WriteReg(LIS3DH_INT1_DURATION,0x03); // 设置最短事件持续时间
          LIS3DH_WriteReg(LIS3DH_INT1_CFG,0x95);      // 配置自由落体识别
}
void Lis3dhtrPoll(void)
{
          uint8_t data;
          uint8_t ret,j;
          uint16_t i;
          ret=HAL_GPIO_ReadPin(GPIO_Acc_GPIO_Port, GPIO_Acc_Pin);
          for(i=0;i<5000;i++){}
                LIS3DH_WriteReg(LIS3DH_INT1_CFG,0x95);
       
                //j=LIS3DH_ReadReg(LIS3DH_INT1_SRC,&data);//清除中断请求  
    //j=LIS3DH_ReadReg(LIS3DH_WHO_AM_I,&data);                       
                if(j==1)
                {
                                DbgPrintfD("设备ID:%d\r\n",data);
                }       
                if(ret==0)
                {
                                //LIS3DH_ReadReg(LIS3DH_INT1_SRC,&data);//清除中断请求                 
                }
                else
                {
                    
                }
}
你看下有问题没?
回答时间:2019-6-26 14:05:51
从代码上看没有问题,注意一下硬件地址是不是0x1E?先测试读取一下ID内容。下面是我以前测试的代码:
void MX_DS1308_READ(void)
{
        uint8_t data[8];       
        uint8_t ch;
       
        ch = 0x02;       
        if(HAL_I2C_Master_Transmit(&hi2c1,MX_RTC_ADDR,(uint8_t*)&ch,1,1000) != HAL_OK)
        {
                return;
        }       
        if(HAL_I2C_Master_Receive(&hi2c1,MX_RTC_ADDR,data1,7,1000) != HAL_OK)
        {
                return;
        }
}

liuxingxyz 回答时间:2019-6-26 14:31:56
主要是先发芯片地址,LIS3DH没有回ACK,往下就不能进行了。你用的是什么型号单片机,可否把代码发我参考一下,谢谢。
你若安好_清风徐来 回答时间:2019-6-27 11:01:45
liuxingxyz 发表于 2019-6-26 10:00
用的是硬件I2C,lis3dsh地址是0x3c;cs也拉高,SA0接地;用逻辑分析仪测到的波形,地址也发的对,但是就是 ...

没有  没用过你这个系列
middle1102 回答时间:2019-8-16 11:29:09
很简单,先不用看代码,直接用示波器挂在I2C的两个脚上,看看你发出的器件地址第一个字节对不,如果确认地址是对的,再看第9位从机有没有应答
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版