ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:16.82KB ,
资源ID:20167893      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20167893.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一个稳定可靠的STM32 I2C程序Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一个稳定可靠的STM32 I2C程序Word文档格式.docx

1、unsigned long Sensors_I2C_ReadRegister(unsigned char Address, unsigned char RegisterAddr, unsigned short RegisterLen, unsigned char *RegisterValue);int Sensors_I2C_WriteRegister_swap(unsigned char slave_addr,unsigned char reg_addr,unsigned char len, unsigned char *data_ptr);int Sensors_I2C_ReadRegis

2、ter_swap(unsigned char slave_addr,unsigned char reg_addr,unsigned char len, unsigned char *data_ptr);int I2C_Reset_User();#endif / _I2C_H_/* i2c.c I2c 3 to communicate with the sensorsAuthor :* Includes */#include #include stm32l1xx.hi2c.hgpio.hlog.hdiscover_board.hmain.h/* Defines */#define I2Cx_FL

3、AG_TIMEOUT (uint32_t) 900)#define I2Cx_LONG_TIMEOUT (uint32_t)(300 * I2Cx_FLAG_TIMEOUT)#define SENSORS_I2C_SCL_GPIO_PORT GPIOB#define SENSORS_I2C_SCL_GPIO_CLK RCC_AHBPeriph_GPIOB#define SENSORS_I2C_SCL_GPIO_PIN GPIO_Pin_10#define SENSORS_I2C_SCL_GPIO_PINSOURCE GPIO_PinSource10#define SENSORS_I2C_SDA

4、_GPIO_PORT GPIOB#define SENSORS_I2C_SDA_GPIO_CLK RCC_AHBPeriph_GPIOB#define SENSORS_I2C_SDA_GPIO_PIN GPIO_Pin_11#define SENSORS_I2C_SDA_GPIO_PINSOURCE GPIO_PinSource11#define SENSORS_I2C_RCC_CLK RCC_APB1Periph_I2C2#define SENSORS_I2C_AF GPIO_AF_I2C2#define WAIT_FOR_FLAG(flag, value, timeout, errorco

5、de) I2CTimeout = timeout; while(I2C_GetFlagStatus(SENSORS_I2C, flag) != value) if(I2CTimeout-) = 0) return I2Cx_TIMEOUT_UserCallback(errorcode); #define CLEAR_ADDR_BIT I2C_ReadRegister(SENSORS_I2C, I2C_Register_SR1); I2C_ReadRegister(SENSORS_I2C, I2C_Register_SR2);/* Globals */* Prototypes */* Funct

6、ion */static uint32_t I2Cx_TIMEOUT_UserCallback(char value);void I2cMaster_Init(void) GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; /* Enable I2Cx clock */ RCC_APB1PeriphClockCmd(SENSORS_I2C_RCC_CLK, ENABLE); /* Enable I2C GPIO clock */ RCC_AHBPeriphClockCmd(SENSORS_I2C_SCL

7、_GPIO_CLK | SENSORS_I2C_SDA_GPIO_CLK, ENABLE); /* Configure I2Cx pin: SCL -*/ GPIO_InitStructure.GPIO_Pin = SENSORS_I2C_SCL_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_

8、PuPd = GPIO_PuPd_NOPULL; /* Connect pins to Periph */ GPIO_PinAFConfig(SENSORS_I2C_SCL_GPIO_PORT, SENSORS_I2C_SCL_GPIO_PINSOURCE, SENSORS_I2C_AF); GPIO_Init(SENSORS_I2C_SCL_GPIO_PORT, &GPIO_InitStructure); SDA -*/ GPIO_InitStructure.GPIO_Pin = SENSORS_I2C_SDA_GPIO_PIN; GPIO_PinAFConfig(SENSORS_I2C_S

9、DA_GPIO_PORT, SENSORS_I2C_SDA_GPIO_PINSOURCE, SENSORS_I2C_AF); GPIO_Init(SENSORS_I2C_SDA_GPIO_PORT, & I2C_DeInit(SENSORS_I2C); I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = I2C_OWN_ADDRESS; I2C_InitStructure.I2C_Ack

10、= I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; /* Enable the I2C peripheral */ I2C_Cmd(SENSORS_I2C, ENABLE); /* Initialize the I2C peripheral */ I2C_Init(SENSORS_I2C, &I2C_InitStructure);/* * brief Basic manag

11、ement of the timeout situation. * param None. * retval None. */static uint32_t I2Cx_TIMEOUT_UserCallback(char value) /* The following code allows I2C error recovery and return to normal communication if the error source doesnt still exist (ie. hardware issue.) */ I2C_GenerateSTOP(SENSORS_I2C, ENABLE

12、); I2C_SoftwareResetCmd(SENSORS_I2C, ENABLE); I2C_SoftwareResetCmd(SENSORS_I2C, DISABLE);#ifdef User_debug MPL_LOGI(I2C Restarted.n);#endif return 1;int I2C_Reset_User() return I2Cx_TIMEOUT_UserCallback(0); * brief Writes a Byte to a given register to the sensors through the control interface (I2C)

13、* param RegisterAddr: The address (location) of the register to be written. * param RegisterValue: the Byte value to be written into destination register. * retval 0 if correct communication, else wrong communicationunsigned long Sensors_I2C_WriteRegister(unsigned char Address, unsigned char Registe

14、rAddr, unsigned short RegisterLen, const unsigned char *RegisterValue) uint32_t result = 0; uint32_t i = RegisterLen; _IO uint32_t I2CTimeout = I2Cx_LONG_TIMEOUT; /RegisterValue = RegisterValue + (RegisterLen - 1); /* Wait for the busy flag to be cleared */ WAIT_FOR_FLAG (I2C_FLAG_BUSY, RESET, I2Cx_LONG_TIMEOUT, 1); /* Start the config sequence */ I2C_GenerateSTART(SENSORS_I2C, ENABLE); /* Wait for the start bit to be set */ WAIT_FOR_FLAG (I2C_FLAG_SB, SET, I2Cx_FLAG_TIMEOUT, 2); /* Transmit the slave address and enable writing operation */ I2C_Send7bitAddress(SENSORS_I2C, (AddressCR1 |

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1