路径:bcm2835-1.64/examples/i2c
树莓派Raspberry Pi 4B + QT5
控制I2C总线与STM32F103通讯,树莓派4b I2C自带上拉电阻,发送与接收数据一样。
#include
#include
#include "bcm2835.h"
int main()
{
uint8_t temp = 0;
printf("Hello Sudaroot!\r\n");
if(!bcm2835_init()) return 1;
bcm2835_i2c_begin();
bcm2835_i2c_setSlaveAddress(0x67);
bcm2835_i2c_set_baudrate(100000); // 100KB
while(1)
{
temp = (uint8_t)(rand() % 256);
if(bcm2835_i2c_write((char*)&temp, 1) == BCM2835_I2C_REASON_OK)
{
printf("write = %d, ", temp);
bcm2835_i2c_read((char*)&temp, 1);
printf("read = %d\r\n", temp);
}
bcm2835_delay(1000);
}
bcm2835_i2c_end();
bcm2835_close();
return 0;
}
bcm2835_init():初始化bcm2835库,需要root权限运行。
bcm2835_i2c_begin():初始化I2C,用完i2c需要调用bcm2835_i2c_end()取消初始化。
bcm2835_i2c_setSlaveAddress():设置从机地址。可以用i2cdetect -y 1命令查看i2c从机地址。
bcm2835_i2c_set_baudrate():设置I2C总线传输速度,如果设置100KBHz,填100 000。
bcm2835_i2c_setClockDivider():通过分频设置I2C总线传输速度,和bcm2835_i2c_set_baudrate()选一即可。
bcm2835_i2c_write():通过I2C总线向从机传输数据。
bcm2835_i2c_read():通过I2C总线向从机读取数据。
bcm2835_i2c_end():取消I2C初始化。
bcm2835_close():取消初始化bcm2835库。
由于bcm2835_init()需要使用root权限才能使用,除非控制GPIO可以不使用root权限运行。
用终端进入QT工程可执行程序输出路径,运行可执行程序。
全篇完。
本人是一个嵌入式未入门小白,博客仅仅代表我个人主观见解方便记录成长笔记。 若有与大神大大见解有冲突,我坚信大神大大见解是对的,我的是错的。 若无法下载源码,可私聊私发。 感谢~!