当前位置: 首页 > wzjs >正文

公司网站怎么注销营销知识和技巧

公司网站怎么注销,营销知识和技巧,wordpress知更鸟修改,网站建设的开发方法有哪些学习交流792125321,欢迎一起加入讨论! 在学习iic的时候,我们经常会遇到软件 IC和硬件 IC,它两到底有什么区别呢? 软件 IC(模拟 IC)和硬件 IC(外设 IC)是两种实现 IC 总线通信的方式…

学习交流792125321,欢迎一起加入讨论!

在学习iic的时候,我们经常会遇到软件 I²C和硬件 I²C,它两到底有什么区别呢?

软件 I²C(模拟 I²C)和硬件 I²C(外设 I²C)是两种实现 I²C 总线通信的方式,核心区别在于 ​是否依赖微控制器(MCU)内置的硬件 I²C 外设。以下是详细对比及标准库(以 STM32 标准外设库为例)的实现差异:

1. 核心区别

特性软件 I²C硬件 I²C
实现方式通过 GPIO 引脚模拟 I²C 时序(软件控制)使用 MCU 内置的硬件 I²C 外设(硬件控制)
CPU 占用高(需 CPU 持续操作 GPIO)低(硬件自动完成时序,CPU 可处理其他任务)
时序精度依赖软件延时,精度较低由硬件时钟控制,精度高且稳定
开发复杂度简单(无需配置复杂寄存器)复杂(需初始化外设、处理中断/DMA)
灵活性高(可适配任意 GPIO 引脚)低(必须使用硬件 I²C 外设的固定引脚)
速度较慢(受限于软件延时)较快(支持标准模式 100kHz、快速模式 400kHz+)
兼容性通用性强(可适配不同 MCU)依赖具体 MCU 的硬件支持

2. 标准库实现对比(以 STM32F1 标准外设库为例)​

​(1) 硬件 I²C 实现

硬件 I²C 使用 STM32 内置的 I²C 外设,需配置时钟、引脚复用、中断/DMA 等。

代码示例:初始化硬件 I²C1(标准模式,100kHz)​

#include "stm32f10x_i2c.h"void I2C_Hardware_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;I2C_InitTypeDef I2C_InitStruct;// 使能时钟(I2C1 和 GPIOB)RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 配置 GPIOB6 (SCL) 和 GPIOB7 (SDA) 为复用开漏模式GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; // 复用开漏GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStruct);// 配置 I2C1I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; // 占空比 16:9I2C_InitStruct.I2C_OwnAddress1 = 0xA0;          // 主机地址(可忽略)I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;        // 启用应答I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;I2C_InitStruct.I2C_ClockSpeed = 100000;         // 100kHzI2C_Init(I2C1, &I2C_InitStruct);// 启用 I2C1I2C_Cmd(I2C1, ENABLE);
}// 发送数据函数(需处理状态标志和中断)
void I2C_WriteByte(uint8_t devAddr, uint8_t regAddr, uint8_t data) {I2C_GenerateSTART(I2C1, ENABLE);while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));I2C_Send7bitAddress(I2C1, devAddr, I2C_Direction_Transmitter);while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));I2C_SendData(I2C1, regAddr);while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));I2C_SendData(I2C1, data);while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));I2C_GenerateSTOP(I2C1, ENABLE);
}
​(2) 软件 I²C 实现

通过 GPIO 手动控制 SCL 和 SDA 引脚电平,模拟 I²C 时序。

代码示例:模拟 I²C 时序(使用 GPIOB8 和 GPIOB9)​

#include "stm32f10x_gpio.h"// 定义 SCL 和 SDA 引脚
#define SOFT_I2C_SCL_PIN    GPIO_Pin_8
#define SOFT_I2C_SDA_PIN    GPIO_Pin_9
#define SOFT_I2C_PORT       GPIOB// 初始化 GPIO
void Soft_I2C_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 配置 SCL 和 SDA 为开漏输出模式GPIO_InitStruct.GPIO_Pin = SOFT_I2C_SCL_PIN | SOFT_I2C_SDA_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; // 开漏输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(SOFT_I2C_PORT, &GPIO_InitStruct);// 初始拉高 SCL 和 SDAGPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);
}// 微秒级延时函数(需根据实际时钟调整)
void Delay_us(uint32_t us) {us *= 72; // 假设主频为 72MHzwhile (us--) __NOP();
}// 发送起始信号
void Soft_I2C_Start(void) {GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);Delay_us(5);GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);
}// 发送停止信号
void Soft_I2C_Stop(void) {GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);Delay_us(5);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);Delay_us(5);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);
}// 发送一个字节
void Soft_I2C_WriteByte(uint8_t data) {for (int i = 0; i < 8; i++) {if (data & 0x80) {GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);} else {GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);}Delay_us(2);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);Delay_us(5);GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);data <<= 1;}// 等待从机应答(省略应答检查)GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);Delay_us(2);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);Delay_us(5);GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);
}

3. 适用场景

场景推荐方式原因
高速通信(>100kHz)硬件 I²C依赖硬件时序精度,避免软件延时误差
多任务系统硬件 I²C减少 CPU 占用,支持 DMA/中断
引脚资源紧张硬件 I²C必须使用固定引脚,避免浪费 GPIO
适配非标准 I²C 设备软件 I²C可灵活调整时序(如长延时、非标准协议)
硬件 I²C 外设不可用软件 I²C解决硬件资源冲突或兼容性问题

4. 常见问题

  • 硬件 I²C 初始化失败
    检查时钟配置、引脚复用、上拉电阻(硬件 I²C 需要外部上拉,通常 4.7kΩ)。

  • 软件 I²C 通信不稳定
    调整延时函数精度,确保 SCL/SDA 边沿时间符合设备要求。

  • 速度瓶颈
    软件 I²C 通常无法超过 100kHz,硬件 I²C 可支持 400kHz(Fast Mode)或更高。


总结

  • 硬件 I²C:适合高速、高稳定性场景,但开发复杂且依赖固定引脚。
  • 软件 I²C:灵活简单,但占用 CPU 资源且速度受限。
    根据项目需求选择合适方案:优先使用硬件 I²C 提升性能,若硬件资源不足或需要特殊时序,则用软件模拟。
http://www.dtcms.com/wzjs/113401.html

相关文章:

  • 做网站遇到的问题温州seo团队
  • 返利网站开发一般要多少钱友链查询站长工具
  • 温州网站制作网站广告网站大全
  • wordpress如何二次开发电商seo搜索引擎优化
  • 深圳市住房和建设局办事大厅黑帽seo365t技术
  • 学seo可以做网站吗百度一下官网首页网址
  • 上海网站建设免费推宁波seo博客
  • 比较好的做网站百度网盘登录入口官网
  • wordpress seo 标题网站搜索排名优化价格
  • 青海省建设厅网站seo培训学院
  • 网站建设评语百度权重查询
  • 遵义网站建设有限公司如何推销产品给客户
  • 网站建设主要课程投放广告怎么投放
  • 北京龙鼎网站建设公司济南seo优化公司助力网站腾飞
  • 企业网站开发公司排名企业网络策划
  • 如何进行网站网站调试手游推广渠道
  • h5营销型网站文章优化关键词排名
  • 欧式风格装修效果图免费的seo网站
  • 网站收录申请b站推广入口
  • 做陶瓷的公司网站百度助手下载
  • 网站开发多少钱现在有哪些免费推广平台
  • 用scala做网站类似58的推广平台有哪些平台
  • 怎样下载做网站的软件哈尔滨seo
  • 网站版权备案在线子域名二级域名查询工具
  • 天津做淘宝网站网络营销师证书查询
  • 做网站软件 手机大数据下的精准营销
  • 可以自己买服务器做网站吗百度手机网页
  • 建设工程评标专家在哪个网站登录购物链接
  • 做代购的网站正规的教育机构有哪些
  • 创新的商城网站建设seo外包公司如何优化