i2c 相关问题

I2C是双线串行总线。它用于与嵌入式系统和计算机主板中的低速外设接口。

BH1750 I2C Python 在 Raspberry Pi 上失败

我刚刚为我的 Raspberry Pi 4 项目购买了 BH1750 勒克斯探测器。这段代码的工作原理: 进口板 导入时间 导入 adafruit_bh1750 i2c = 板.I2C() 传感器 = adafruit_bh1750.BH1750(i2c) 而 Tr...

回答 1 投票 0

STM32F103开关I2C引脚

我使用stm32f103c8t6 bluepill开发板。我在 STM32CubeIDE 中启用了 I2C-2。默认情况下,scl 引脚分配给 PB10,sda 引脚分配给 PB11。但我需要将它们切换为 SCL PB11、SD...

回答 1 投票 0

stm32的I2C主控如何只接收数据?

现在我有两个stm32芯片,两个stm32的I2C连接同一个设备,一个stm32用于向设备发送数据,也用于接收数据;另一个stm32只接收de返回的数据...

回答 2 投票 0

不带背光的Python时钟

我有点绝望,我试图通过带有 HD44780 和 I2C 芯片的 Raspberry pi 显示当前时间。这效果很好,但现在我希望背光保持关闭状态。

回答 1 投票 0

在Rust中使用sh1106(和类似的)时,有没有办法不“移动”i2c

我对 Rust 还很陌生,正在深入研究相对复杂的嵌入式编程,也许这就是我的问题,请耐心等待... 我使用 RPi Pico,带有基于 i2c 的 SH11106 显示屏,我们...

回答 1 投票 0

编写STM32 FRAM驱动

我正在尝试学习如何使用组件的数据表编写驱动程序。本例中使用 MB85RC16 FRAM。数据表 = https://www.fujitsu.com/ca/en/Images/MB85RC16-DS501-00001-8v0-E.pdf - P...

回答 1 投票 0

如何将 Arduino 库与第二个 Sercom/第二个 I2c 总线一起使用

我正准备因没有适当地谷歌搜索而被排斥,但在过去的一天半里我一直在寻找解决方案,尝试了几十种方法,但没有任何效果。我是

回答 1 投票 0

ADS1x15 Python 库

假设我有一个 ADS1015 ADC 转换器和一个 Raspberry Pi。在我的项目中,我只需要读取模拟传感器的值。 这是用 Python 编写的用于 Rasp ADC 转换器的库...

回答 1 投票 0

pic18f4550 的 DHT11 代码不适用于 pic18f57Q84

我正在尝试读取PIC18f57Q84上的DHT11并将其显示到LCD屏幕上。我在网上发现有人对 PIC18f4550 做了这个,并试图让它在我的 PIC18f57Q84 开发板上工作。 ...

回答 1 投票 0

I2C 外设在单次事务后失败

我正在使用该库通过 Beaglebone Black 上的 PRU 对 I2C 总线上的一些传感器进行采样。似乎只有第一笔交易才能正常工作,之后图书馆似乎...

回答 1 投票 0

I2C 读取返回零(RPi 4、SenseHat、Pi4J)

我正在使用 Raspberry Pi 4 和 Sense Hat 开发一个项目。我正在尝试从 Java 的帽子获取温度、湿度和气压读数。我不想使用 Python 或其他

回答 1 投票 0

使用寄存器的STM32F401xx I2C驱动程序

我想在proteus中使用两个STM32F401xx MCU。其一为主人,其二为奴隶。 这是我给主人的代码: 使用(MicroC Pro For Arm)程序。 #包括 我想在STM32F401xx MCU中使用两个proteus。其中一个是成为 master,另一个是成为 slave。 这是我给大师的代码: 使用 (MicroC Pro For Arm) 程序。 #include <stdint.h> #include <stdio.h> uint8_t temp=0; void begin(uint8_t addr); void end(void); void Write (uint8_t dat); void main() { // Enable the I2C CLOCK and GPIO CLOCK RCC_APB1ENR |= (1<<21); // enable I2C CLOCK RCC_AHB1ENR |= (1<<1); // Enable GPIOB CLOCK // Configure the I2C PINs for ALternate Functions //PB8 and PB9 are connected to I2C1_SCL and I2C1_SDA GPIOB_MODER |= (2<<16) | (2<<18); GPIOB_OTYPER |= (1<<8) | (1<<9); GPIOB_OSPEEDR |= (3<<16) | (3<<18); GPIOB_PUPDR |= (1<<16) | (1<<18); GPIOB_AFRH |= (4<<0) | (4<<4); begin(0x08); Write(0x01); end(); } void begin(uint8_t addr){ //join I2C as a master mode //Generate a start condition I2C1_CR1 |= (1<<10); // Enable the ACK I2C1_CR1 |= (1<<8); // Generate START while (!(I2C1_SR1 & (1<<0))); // Wait for SB bit to set to 1 //Send the Slave Address to the DR Register I2C1_DR = addr; // send the address while (!(I2C1_SR1 & (1<<1))); // temp = I2C1_SR1 | I2C1_SR2; // read SR1 and SR2 to clear the ADDR bit // Reset the I2C I2C1_CR1 |= (1<<15); //I2C Peripheral under reset state -->page.493 manual I2C1_CR1 &= ~(1<<15); //I2C Peripheral not under reset -->page.493 manual // Program the peripheral input clock in I2C_CR2 Register in order to generate correct timings I2C1_CR2 |= (42 <<0); // PCLK1 FREQUENCY in MHz I2C1_CCR = 210<<0; // Configure the clock control registers I2C1_TRISE = 43; // Configure the rise time register I2C1_CR1 |= (1<<0); // Enable I2C } void end(void) { I2C1_CR1 |= (1<<9);//stop generation // Wait until the STOP condition is complete while (I2C1_SR2 & (1<<0)); //Cleared by hardware after detecting a Stop condition on the bus // Clear the STOP bit I2C1_CR1 &= ~(1<<9); } void Write (uint8_t dat) { while (!(I2C1_SR1 & (1<<7))); // wait for TXE bit to set I2C1_DR = dat ; // wait for BTF bit to set while (!(I2C1_SR1 & (1<<2))); //waiting while BTF=0 but when BTF=1; Data byte transfer succeeded } 从机代码: #include <stdint.h> #include <stdio.h> uint8_t temp=0; uint8_t state =0x00; void begin(uint8_t addr); void end(void); uint8_t Read (); void main() { RCC_APB1ENR |= (1<<21); // enable I2C CLOCK - RCC_AHB1ENR |= (1<<1); // Enable GPIOB CLOCK RCC_AHB1ENR |= (1<<0); // Enable GPIOA CLOCK GPIOA_MODER |=(1<<0); //set pin 0 as output // Configure the I2C PINs for ALternate Functions //PB8 and PB9 are connected to I2C1_SCL and I2C1_SDA GPIOB_MODER |= (2<<16) | (2<<18); GPIOB_OTYPER |= (1<<8) | (1<<9); GPIOB_OSPEEDR |= (3<<16) | (3<<18); GPIOB_PUPDR |= (1<<16) | (1<<18); GPIOB_AFRH |= (4<<0) | (4<<4); begin(0x08); state = Read(); end(); if (state == 0x01){ GPIOA_ODR |=(1<<0);//set 1 for pin 0 } } void begin(uint8_t addr){ //join I2C bus as a slave mode I2C1_CR2 |= (42<<0); // PCLK1 FREQUENCY in MHz I2C1_OAR1 = addr;//own address interface I2C1_CR1 |= (1<<0); // Enable I2C I2C1_CR1 |= (1<<10); // Enable the ACK ,indicate that a byte is received } void end(void) { I2C1_CR1 |= (1<<9);//stop generation // Wait until the STOP condition is complete while (I2C1_SR2 & (1<<0)); //Cleared by hardware after detecting a Stop condition on the bus // Clear the STOP bit I2C1_CR1 &= ~(1<<9); } uint8_t Read (){ uint8_t receivedData = 0; I2C1_CR1 &= ~(1<<10); // clear the ACK bit temp = I2C1_SR1 | I2C1_SR2; // read SR1 and SR2 to clear the ADDR bit.... EV6 condition I2C1_CR1 |= (1<<9); // Stop I2C while (!(I2C1_SR1 & (1<<6))); // wait for RxNE to set receivedData = I2C1_DR; // Read the data from the DATA REGISTER return receivedData; } 我尝试在Proteus上进行模拟,但是没有什么可以改变的,led still off。所以,我想知道如何在Proteus上制作simulation,如果我提供的代码有任何问题,我按照STM32F401xx的datasheet和manual来编写这个简单的驱动程序。 proteus 两个 STM32F401xx MCU 的连接: 你的主人的“开始”功能做了一些奇怪的事情。 I2C1_TRISE = 43; after 设置起始位怎么样?您在配置之前尝试使用 I2C。在使用任何应答或起始位之前,TRISE 必须是对 I2C 执行的首要操作之一。整个函数以奇怪的顺序执行操作。 寄存器中的“起始位”不启用起始位功能。当您写入时,它实际上会尝试立即发送一个起始位,并且在您的代码中,它会在您设置 TRISE 之前甚至在启用 I2C 外设之前发生。因此,行为是不可预测的。 我检查了F401的外设,它与F103的外设一模一样,只是F401多了一个用于模拟和数字噪声滤波器控制的寄存器。除此之外,它们是相同的并且完美地映射到另一个。 (根据勘误表,F401 不存在与 F103 相同的带有滤波器故障的硅缺陷)。 以下是我使用该外设的操作顺序,跳过了明显的 GPIO 备用功能设置,因此此处仅注册 I2C。这是 I2C 主设备配置,但一般设置是相同的,从设备配置和主设备配置之间的区别在于以下必要步骤: 配置GPIO,使能I2C时钟。 将CR2中的FREQ配置为APBx时钟频率(例如STM32运行在64MHz时为32,因为I2C的APBx运行在32000000Hz) 在CCR中配置时钟周期倍频器 配置 TRISE 的上升/下降时间 现在,如果您写入起始位,您可以将数据加载到 DR 并将其作为主设备发送。到目前为止,您不需要向 Start 位写入任何内容,也不需要向 ACK 位写入任何内容,这些位用于正在进行的通信,而不是用于配置。 对于从机,您可以进行类似的设置,但显然还需要配置其从机地址。 我觉得你太着急了。从主 MCU 开始,确保您首先可以在 I2C 线路上看到一些内容。

回答 1 投票 0

无法从 Arduino Uno 读取 Raspberry Pi 中的 I2C 数据(缓冲区为空)

我正在尝试通过 I2C 将从 Arduino Uno 发送的数据发送到我的 Raspberry Pi 4。我似乎能够从 Uno 毫无问题地发送数据,但数据没有在 Raspberry P 上读入...

回答 1 投票 0

将 platform_driver 与 i2c_driver 结合在一起的内核驱动程序

我正在为 LCD 编写内核驱动程序。该 LCD 使用 8 条 GPIO 线 (d0...d7) 发送数据以显示,一些 GPIO 控制信号(开/关、启用背光和读/写)和一个电位器来控制...

回答 2 投票 0

在Python中读取2字节的I2C事务

我正在尝试在Python上实现I2C通信的读取。我遇到的问题是,我从一个事务中读取两个字节的答案的传感器。有Python吗

回答 2 投票 0

i2cdump 可以工作,但 i2cget 不行

我正在尝试在 Raspberry Pi 上使用 BMP180 over i2c。 我检测到芯片。我可以获取 i2cdump,但无法读出单个字节。 知道我做错了什么吗? 打印出: $ sudo i2cDetect...

回答 3 投票 0

我无法从 Linux 写入 24fc512 i2c 内存芯片

这几天,我一直在努力从 Linux 向 24fc512 i2c 芯片的内存中写入一些数据。我尝试了 Raspberry Pi 4 和 Beaglebone Black。 该 IC 在 SCL 上有 4.7 KOhm 上拉电阻,并且...

回答 1 投票 0

如何从BNO085传感器读取数据

如何通过I2C读写BNO085传感器中的数据。 I2C 接口可用的传感器,但数据表中没有可用的寄存器数据。

回答 2 投票 0

对`i2c_smbus_read_word_data(int, unsigned char)的未定义引用

更新到 Ubuntu 18.04 后,我无法编译我的 Qt 应用程序。 出现以下错误: 对“i2c_smbus_read_word_data(int, unsigned char) 的未定义引用” 据我了解,

回答 2 投票 0

Beaglebone Black 和 MCP230xx CircuitPython 库

我不知道如何指定I2C总线,因为Beaglebone Black有3x(1x无法通过标头访问)。我想将它们用于许多不同的 I2C 设备(引脚 17/18 I2C1 和引脚 19/20

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.