告陕无 发表于 2025-12-16 18:45:00

软件i2c

记录
i2c程序

#include "iic.h"#include "port.h"#include "sys.h"/*IIC应用配置*/const iic_handle item_i2c ={                {GPIOB, GPIOB, GPIO_PIN_7, GPIO_PIN_6},};/*** @brief: 设置SDA引脚输出电平* @param orgn: IIC句柄指针* @param level: 输出电平(0:低电平,1:高电平)* @param None* @retval: None*/void iic_sda_out(const iic_handle *orgn, uint8_t level){    if (level)    {      gpio_set(orgn->iic_SDA, orgn->iic_SDA_PIN);    }    else    {      gpio_reset(orgn->iic_SDA, orgn->iic_SDA_PIN);    }}/*** @brief: 读取SDA引脚输入电平* @param orgn: IIC句柄指针* @param None* @retval: SDA引脚电平(0:低电平,1:高电平)*/uint8_t iic_sda_in(const iic_handle *orgn){    if (1 == gpio_read(orgn->iic_SDA, orgn->iic_SDA_PIN))    {      return 1;    }    else    {      return 0;    }}/*** @brief: 设置SCL引脚输出电平* @param orgn: IIC句柄指针* @param level: 输出电平(0:低电平,1:高电平)* @param None* @retval: None*/void iic_scl_out(const iic_handle *orgn, uint8_t level){    if (level)    {      gpio_set(orgn->iic_SCL, orgn->iic_SCL_PIN);    }    else    {      gpio_reset(orgn->iic_SCL, orgn->iic_SCL_PIN);    }}/*** @brief: 产生IIC起始信号* @param orgn: IIC句柄指针* @param None* @retval: None*/void iic_start(const iic_handle *orgn){    /*SCL高电平时,SDA由高电平到低电平*/    /*拉高SDA防止使用前已经是低电平*/    iic_sda_out(orgn, 1);    delay_us(2);    iic_scl_out(orgn, 1);    delay_us(1);    /*拉低SDA*/    iic_sda_out(orgn, 0);    delay_us(1);    /*拉低SCL准备数据 */    iic_scl_out(orgn, 0);    delay_us(1);}/*** @brief: 产生IIC停止信号* @param orgn: IIC句柄指针* @param None* @retval: None*/void iic_stop(const iic_handle *orgn){    /*SCL高电平时,SDA由低电平到高电平*/    /*改变SDA时保证SCL低电平*/    iic_scl_out(orgn, 0);    delay_us(1);    delay_us(1);    /*拉低数据线 */    iic_sda_out(orgn, 0);    delay_us(1);    /*拉高SCL后再拉高SDA*/    iic_scl_out(orgn, 1);    delay_us(1);    iic_sda_out(orgn, 1);    delay_us(1);}/*** @brief: 产生IIC应答信号* @param orgn: IIC句柄指针* @param None* @retval: None*/void iic_ack(const iic_handle *orgn){    /*在SCL高电平时读取SDA电压*/    /*准备SDA数据低电平应答*/    iic_sda_out(orgn, 0);    delay_us(1);    iic_scl_out(orgn, 1);    delay_us(1);    iic_scl_out(orgn, 0);    delay_us(1);}/*** @brief: 产生IIC非应答信号* @param orgn: IIC句柄指针* @param None* @retval: None*/void iic_nack(const iic_handle *orgn){    /*在SCL高电平时读取SDA电压*/    /*准备SDA数据高电平不应答*/    iic_sda_out(orgn, 1);    delay_us(1);    iic_scl_out(orgn, 1);    delay_us(1);    iic_scl_out(orgn, 0);    delay_us(1);}/*** @brief: 接收IIC应答信号* @param orgn: IIC句柄指针* @param None* @retval: 应答状态(0:应答成功,1:无应答)*/uint8_t iic_rxack(const iic_handle *orgn){    /*接收应答*/    uint8_t i = 5;    /*主机释放SDA由从机控制*/    iic_gpio_INinit(orgn);    /*发送第九个时钟信号读取从机应答*/    iic_scl_out(orgn, 1);    delay_us(1);    delay_us(1);    while (iic_sda_in(orgn))    {      /*读5次防止干扰*/      i--;      delay_us(1);      if (0 == i)      {            /*无应答停止IIC总线*/            iic_gpio_outinit(orgn);            iic_stop(orgn);            return 1; /*非应答*/      }    }    /*没有发送不应答,SDA重新配置输出以参与下次发送*/    iic_gpio_outinit(orgn);    iic_scl_out(orgn, 0);    delay_us(1);    delay_us(1);    return 0; /*应答*/}/*** @brief: IIC发送一个字节数据* @param orgn: IIC句柄指针* @param data: 要发送的数据字节* @param None* @retval: None*/void icc_sendbyte(const iic_handle *orgn, uint8_t data){    uint8_t i = 8;    while (i--)    {      /*发送数据在时钟低电平时准备数据*/      iic_scl_out(orgn, 0);      delay_us(1);      delay_us(1);      /*对比最高位*/      iic_sda_out(orgn, data & 0x80);      delay_us(1);      /*左移 */      data = data

准挝 发表于 2026-1-16 07:14:27

东西不错很实用谢谢分享

喳谍 发表于 2026-1-16 10:30:52

过来提前占个楼

坪钗 发表于 2026-1-16 17:54:15

谢谢楼主提供!

垢峒 发表于 2026-1-18 23:06:36

很好很强大我过来先占个楼 待编辑

莘度 发表于 2026-1-23 04:45:14

这个有用。

顶豌 发表于 2026-1-23 07:23:00

喜欢鼓捣这些软件,现在用得少,谢谢分享!

嫁吱裨 发表于 2026-1-23 08:13:24

收藏一下   不知道什么时候能用到

骛扼铮 发表于 2026-1-23 17:17:27

鼓励转贴优秀软件安全工具和文档!

懵径 发表于 2026-1-26 08:09:29

谢谢分享,辛苦了

百里宵月 发表于 2026-1-27 10:47:39

喜欢鼓捣这些软件,现在用得少,谢谢分享!

敞撬 发表于 2026-1-27 13:31:11

懂技术并乐意极积无私分享的人越来越少。珍惜

粹脍誊 发表于 2026-1-28 02:23:47

谢谢楼主提供!

薯羞 发表于 2026-1-31 15:20:59

感谢分享

窖咎 发表于 2026-2-4 06:46:51

过来提前占个楼

虽裘侪 发表于 2026-2-6 10:10:56

分享、互助 让互联网精神温暖你我

凶契帽 发表于 2026-2-7 08:00:41

感谢发布原创作品,程序园因你更精彩

梨恐 发表于 2026-2-8 04:38:44

鼓励转贴优秀软件安全工具和文档!

粉押淫 发表于 2026-2-8 05:20:26

感谢分享,学习下。

后沛若 发表于 2026-2-8 12:56:11

这个有用。
页: [1] 2 3
查看完整版本: 软件i2c