首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

STM32学习-IIC

硬件开发 2.44KB 18 需要积分: 1
立即下载

资源介绍:

STM32学习-IIC
/** ****************************************************************************************** * @file myiic.c * @author 加州大溪没 * @brief ****************************************************************************************** **/ /* Includes -------------------------------------------------- */ #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/delay/delay.h" #include "./SYSTEM/my_iic/myiic.h" /* End Includes -------------------------------------------------- */ /* Functions -------------------------------------------------- */ /** @brief 对IIC硬件配置进行初始化 * @param None * @note None * @retval None */ void IIC_Init() { GPIO_InitTypeDef gpio_init_struct; /* 开启时钟 */ __HAL_RCC_GPIOB_CLK_ENABLE(); /*配置SCL SDA,开漏输出模式,此处SCL和SDA使用的都是B口*/ gpio_init_struct.Mode = GPIO_MODE_OUTPUT_OD; gpio_init_struct.Pin = SCL_PIN | SDA_PIN; gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(SCL_PORT, &gpio_init_struct); /* 释放总线 */ SCL(1); SDA(1); } /** @brief 产生一个IIC通信开始信号 * @param None * @note SDA --- 1 * \ * \ * ----- 0 * SCL ---------- 1 * @retval None */ void IIC_Start() { SDA(1); IIC_Delay(); SCL(1); IIC_Delay(); SDA(0); IIC_Delay(); SCL(0); //钳住SCL线,为后面的操作做准备 IIC_Delay(); } /** @brief 产生一个IIC通信停止信号 * @param None * @note SDA --- 1 * / * / * ----- 0 * SCL ---------- 1 * @retval None */ void IIC_Stop() { SDA(0); IIC_Delay(); SCL(1); IIC_Delay(); SDA(1); IIC_Delay(); } /** @brief 发送一个应答 / 未应答信号 * @param AckBit:1 未应答 * 0 应答 * @note SDA -------------- 0 / 1 * SCL ---- 1 * / \ * / \ * --- --- 0 * @retval None */ void IIC_SendAck(uint8_t AckBit) { SDA(AckBit); IIC_Delay(); SCL(1); IIC_Delay(); SCL(0); IIC_Delay(); } /** @brief 接收一个应答 / 未应答信号 * @param None * @note SDA -------------- 0 / 1 * SCL ---- 1 * / \ * / \ * --- --- 0 * @retval AckBit:接收到的应答 / 未应答信号 */ uint8_t IIC_ReceiveAck() { uint8_t AckBit; SDA(1); IIC_Delay(); SCL(1); IIC_Delay(); AckBit = SDA_READ; IIC_Delay(); SCL(0); IIC_Delay(); return AckBit; } /** @brief 发送一个字节的数据 * @param data:待发送的数据 * @note SDA -------------- 0 / 1 * SCL ---- 1 * / \ * / \ * --- --- 0 * @retval None */ void IIC_Send_Byte(uint8_t data) { uint8_t i; for(i = 0; i < 8; i++) { SDA(data & (0X80 >> i)); //一位一位发送数据 IIC_Delay(); SCL(1); IIC_Delay(); SCL(0); IIC_Delay(); } } /** @brief 发送一个字节的数据 * @param None * @note SDA -------------- 0 / 1 * SCL ---- 1 * / \ * / \ * --- --- 0 * @retval Receive_Data:接收到的一字节的数据 */ uint8_t IIC_Receive_Byte() { uint8_t i, Receive_Data = 0x00; SDA(1); IIC_Delay(); for(i = 0; i < 8; i++) { SCL(1); IIC_Delay(); if(SDA_READ) Receive_Data |= (0x80 >> i); //一位一位接收数据 SCL(0); IIC_Delay(); } return Receive_Data; //返回读取到的数据 } /** @brief 发送一个字节的数据 * @param addr: 从机的地址 * reg: 从机寄存器地址 * @note 读操作,AD+R末位为1 * 写操作,AD+W末位为0 * 只读一次: * Master S AD+W RA DATA P * Slave ACK ACK ACK * 读多次: * Master S AD+W RA DATA DATA P * Slave ACK ACK ACK ACK * @retval Data_Temp:IIC读取操作读取到的数据,可以连读 */ void IIC_Write(uint8_t addr, uint8_t reg, uint8_t data) { IIC_Start(); IIC_Send_Byte(addr); IIC_ReceiveAck(); IIC_Send_Byte(reg); IIC_ReceiveAck(); IIC_Send_Byte(data); IIC_ReceiveAck(); IIC_Stop(); } /** @brief 接收一个字节的数据 * @param addr: 从机的地址 * reg: 从机寄存器地址 * @note 读操作,AD+R末位为1 * 写操作,AD+W末位为0 * 只读一次: * Master S AD+W RA S AD+R NACK P * Slave ACK ACK ACK DATA * 读多次: * Master S AD+W RA S AD+R ACK NACK P * Slave ACK ACK ACK DATA DATA * @retval Data_Temp:IIC读取操作读取到的数据,可以连读 */ uint8_t IIC_Read(uint8_t addr, uint8_t reg) { uint8_t Data_Temp = 0; IIC_Start(); IIC_Send_Byte(addr); IIC_ReceiveAck(); IIC_Send_Byte(reg); IIC_ReceiveAck(); IIC_Start(); IIC_Send_Byte(addr | 0x01); IIC_ReceiveAck(); Data_Temp = IIC_Receive_Byte(); IIC_SendAck(1); IIC_Stop(); return Data_Temp; } /* END OF FILE ********************************************************** */

资源文件列表:

my_iic.zip 大约有3个文件
  1. my_iic/myiic.c 4.8KB
  2. my_iic/myiic.h 2.17KB
  3. my_iic/
0评论
提交 加载更多评论
其他资源 数据库原理实验一、实验1 认识DBMS二、实验2 简单SQL查询三、实验3 高级SQL查询四、实验4 数据的更新
一、实验1 认识DBMS 二、实验2 简单SQL查询 三、实验3 高级SQL查询 四、实验4 数据的更新 五、实验总结
数据库原理实验一、实验1 认识DBMS二、实验2 简单SQL查询三、实验3 高级SQL查询四、实验4 数据的更新 数据库原理实验一、实验1 认识DBMS二、实验2 简单SQL查询三、实验3 高级SQL查询四、实验4 数据的更新 数据库原理实验一、实验1 认识DBMS二、实验2 简单SQL查询三、实验3 高级SQL查询四、实验4 数据的更新
GoGoGo-1.12.1.zip
GoGoGo-1.12.1.zip
GoGoGo-1.12.1.zip
huwhfujnvdcedrferfrg
huwhfujnvdcedrferfrg
23BD 赵佳怡 4238130032.zip
23BD 赵佳怡 4238130032.zip
在线拍卖系统2024(代码+论文+ppt)
CSDN展示地址: http://t.csdnimg.cn/28rdv
QT封装的弧形进度条组件
在可视化应用中,弧形进度条应用也比较广泛,本示例封装了一个可复用、个性化的弧形进度条组件。示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
HTML+CSS实现快速3D效果,六个案例源码分享 3D球体、正方体+鼠标渐入渐出效果、贴图正方体、球体相册、行星环绕相册
【HTML+CSS】实现快速3D效果,六个案例源码分享。3D球体、正方体+鼠标渐入渐出效果、贴图正方体、球体相册、行星环绕相册。使用于刚开始学习前端的人群,在不使用js的前提下就实现3D效果。代码简洁易懂,初级开发者利器。源码是开源的,任何人都可以借鉴。
使用Quartus ii和Verilog语言构建一个32位CPU并实现FPGA单片机流水灯
Quartus II 是一款功能强大的 FPGA(现场可编程门阵列)设计软件。它提供了从设计输入、仿真、综合、优化、布局布线到最终的硬件配置的完整设计流程。Quartus II 支持多种硬件平台,包括但不限于 Cyclone、Arria 和 Stratix 系列 FPGA。 Quartus II 是电子工程师和研究人员在设计和开发 FPGA 应用时广泛使用的软件之一。供代码编辑器、项目管理工具等,提高设计效率,支持多种设计输入方式,如 VHDL、Verilog 等硬件描述语言。本文件代码使用Verilog语言。Verilog 是一种硬件描述语言(HDL),主要用于设计和模拟电子系统,特别是数字电路。Verilog 支持模块化设计,允许设计者将复杂的系统分解为更小、更易于管理的模块。配置上Quartus II提供功能仿真和时序仿真,提供在线调试工具。将综合后的逻辑映射到 FPGA 的物理结构上,并进行布线,成最终的配置文件,用于将设计下载到 FPGA 上,集成开发环境可以优化设计以提高性能和减少资源使用。本文件就是利用Quartusii工具,使用Verilog语言构建一个32位cpu。