打印
[STM32F1]

硬件 I2C 搞不定

[复制链接]
1743|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
什么原因?
static void MX_I2C2_Init(void)
{

  /* USER CODE BEGIN I2C2_Init 0 */

  /* USER CODE END I2C2_Init 0 */

  /* USER CODE BEGIN I2C2_Init 1 */

  /* USER CODE END I2C2_Init 1 */
  I2cHandle.Instance = I2C2;
  I2cHandle.Init.ClockSpeed = 100000;
  I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_2;
  I2cHandle.Init.OwnAddress1 = I2C_ADDRESS;
  I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  I2cHandle.Init.OwnAddress2 = 0xff;
  I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&I2cHandle) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN I2C2_Init 2 */

  /* USER CODE END I2C2_Init 2 */

}

QQ图片20190612160116.png (15.58 KB )

QQ图片20190612160116.png

使用特权

评论回复
评论
tiantiantian123 2019-6-12 16:49 回复TA
硬件iic最难了 
沙发
神奇号| | 2019-6-12 16:45 | 只看该作者
正点原子的程序直接用,端口模拟的IIC
我都是直接操作寄存器,不用库函数,就不给你程序了,你自己搜库函数的程序

使用特权

评论回复
板凳
brucewoo| | 2019-6-13 00:38 | 只看该作者
大家都在用软件I2C,很多芯片的例程也是软件I2C,所以还是用软件的好了。
我以前买了个VOC传感器,用硬件I2C搞半天搞不起来,用软件的一下就好了。

使用特权

评论回复
地板
caoenq| | 2019-6-13 08:24 | 只看该作者
我用过硬件IIC,没发现有问题啊

使用特权

评论回复
5
zhang..yb|  楼主 | 2019-6-13 08:51 | 只看该作者
我用的是 103c8t6,楼上用哪款?
产生波形了,应该是硬件的问题

使用特权

评论回复
6
zhang..yb|  楼主 | 2019-6-13 09:01 | 只看该作者
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
  MX_I2C2_Init();
  /* USER CODE BEGIN 2 */
         /*##-5- Master sends read request for slave ##############################*/
    do
    {
      if(HAL_I2C_Master_Transmit_IT(&I2cHandle, (uint16_t)I2C_ADDRESS, (uint8_t*)&bTransferRequest, 1)!= HAL_OK)
      {
        /* Error_Handler() function is called in case of error. */
        Error_Handler();
      }
执行到这里 SCL SDA 就全拉低了·,波形上也看得出

使用特权

评论回复
7
zhang..yb|  楼主 | 2019-6-13 09:27 | 只看该作者
  MX_I2C2_Init();
  /* USER CODE BEGIN 2 */
         /*##-5- Master sends read request for slave ##############################*/
          bTransferRequest = MASTER_REQ_WRITE;
                //bTransferRequest = MASTER_REQ_READ;
    do
    {
      if(HAL_I2C_Master_Transmit_IT(&I2cHandle, (uint16_t)I2C_ADDRESS, (uint8_t*)&bTransferRequest, 1)!= HAL_OK)
      {
        /* Error_Handler() function is called in case of error. */
        Error_Handler();
      }

主模式读和写都不行

使用特权

评论回复
8
LMCH| | 2019-6-13 10:09 | 只看该作者
用库函数应该没问题的,我的429开发板触控就是I2C通信的,用的库函数,没什么问题。初始化的时候,GPIO时钟和模式,I2C时钟和模式设置正确,调用发送或接收函数的时候,注意用哪种方式进行传输,调用相应的函数,应该没问题的。单片机坏了的可能性很小的吧

使用特权

评论回复
9
zhang..yb|  楼主 | 2019-6-13 10:18 | 只看该作者
F4 可能是没问题,F1 好多人碰到问题,不可能是巧合

使用特权

评论回复
10
HappyXue| | 2019-6-13 13:08 | 只看该作者
do{}循环里面发送完后做啥了? I2C的中断响应回调中是怎么处理的?

使用特权

评论回复
11
zhang..yb|  楼主 | 2019-6-13 14:20 | 只看该作者
用范例就解决了,CubeMX 不大靠谱,STM32F1 芯片 I2C 没问题,谢谢坛友们回复!

QQ图片20190613141433.png (14.76 KB )

QQ图片20190613141433.png

使用特权

评论回复
12
cw0923| | 2019-6-13 16:01 | 只看该作者
路过学习

使用特权

评论回复
13
dsyq| | 2019-6-13 20:57 | 只看该作者
F0、F1和F4的I2C的hal库都用过,没问题的

使用特权

评论回复
14
Prry| | 2019-6-13 23:26 | 只看该作者
模拟i2c出货都几十万了,稳定无误,为毛要跳坑硬件i2c。

使用特权

评论回复
15
宵待雨月| | 2019-6-14 10:37 | 只看该作者
我用F4,HAL库,硬件IIC1和硬件IIC3一切正常,偏偏硬件IIC2就不能用,坑的一批 。。。

使用特权

评论回复
16
liutao2202| | 2019-6-14 19:53 | 只看该作者
学习一下,顶!

使用特权

评论回复
17
yanhaijian| | 2019-6-15 10:49 | 只看该作者
上拉电阻最好小于4.7K。

使用特权

评论回复
18
磨砂| | 2019-7-5 09:41 | 只看该作者
用io口模拟吧

使用特权

评论回复
19
八层楼| | 2019-7-5 09:45 | 只看该作者
看波形挺好的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

441

帖子

1

粉丝