野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18449|回复: 5

STM32F429 硬件IIC与BMP180通信卡在EV6

[复制链接]
发表于 2017-7-10 21:43:19 | 显示全部楼层 |阅读模式
1火花
如题
  1. #include "I2C.h"

  2. static void I2C_GPIO_Config(void){
  3.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
  4.        
  5.         GPIO_InitTypeDef GPIO_InitStruct;
  6.        
  7.         GPIO_PinAFConfig(I2C_PORT,I2C_SCL_SOURCE,GPIO_AF_I2C1);
  8.         GPIO_PinAFConfig(I2C_PORT,I2C_SDA_SOURCE,GPIO_AF_I2C1);
  9.        
  10.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
  11.         GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
  12.         GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
  13.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  14.        
  15.         GPIO_InitStruct.GPIO_Pin = I2C_SCL | I2C_SDA;
  16.        
  17.         GPIO_Init(I2C_PORT,&GPIO_InitStruct);
  18. }

  19. static void I2C_Mode_Config(void){
  20.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
  21.        
  22.         I2C_InitTypeDef I2C_IbitStruct;
  23.        
  24.         I2C_DeInit(I2C_BASIC);
  25.         I2C_IbitStruct.I2C_ClockSpeed = I2C_SPEED;
  26.         I2C_IbitStruct.I2C_Mode = I2C_Mode_I2C;
  27.         I2C_IbitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
  28.         I2C_IbitStruct.I2C_OwnAddress1 = OWN_ADRESS;
  29.         I2C_IbitStruct.I2C_Ack = I2C_Ack_Enable;
  30.         I2C_IbitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  31.        
  32.         I2C_Init(I2C_BASIC,&I2C_IbitStruct);
  33.        
  34.         I2C_Cmd(I2C1,ENABLE);
  35.        
  36.          I2C_AcknowledgeConfig(I2C_BASIC, ENABLE);  
  37. }

  38. void I2C_Config(void){
  39.         I2C_GPIO_Config();
  40.         I2C_Mode_Config();
  41. }
复制代码
  1. #ifndef _I2C_H_
  2. #define _I2C_H_

  3. #include "stm32f4xx.h"

  4. #define I2C_PORT                        GPIOB
  5. #define I2C_BASIC                        I2C1

  6. #define I2C_SCL                                GPIO_Pin_6
  7. #define I2C_SCL_SOURCE                GPIO_PinSource6

  8. #define I2C_SDA                                GPIO_Pin_7
  9. #define I2C_SDA_SOURCE                GPIO_PinSource7

  10. #define I2C_SPEED                        10000
  11. #define OWN_ADRESS                        0xEE

  12. void I2C_Config(void);

  13. #endif /*_I2C_H_*/
复制代码
  1. #include "BMP180.h"

  2. static short BMP180_Read_Data(unsigned char ADDR){
  3.         unsigned char msb,lsb;
  4.         short Data;
  5.        
  6.         while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
  7.        
  8.         I2C_AcknowledgeConfig(BMP180_I2C, ENABLE);
  9.        
  10.         I2C_GenerateSTART(BMP180_I2C,ENABLE);
  11.        
  12.         while(!I2C_CheckEvent(BMP180_I2C,I2C_EVENT_MASTER_MODE_SELECT)){

  13.         }
  14.        
  15.         I2C_Send7bitAddress(BMP180_I2C,BMP180_Write_ADDR,I2C_Direction_Transmitter);
  16.        
  17.         while(!I2C_CheckEvent(BMP180_I2C,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){

  18.         }
  19.        
  20.         I2C_SendData(BMP180_I2C,ADDR);
  21.        
  22.         while(!I2C_CheckEvent(BMP180_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTED)){

  23.         }
  24.        
  25.         I2C_GenerateSTART(BMP180_I2C,ENABLE);
  26.        
  27.         while(!I2C_CheckEvent(BMP180_I2C,I2C_EVENT_MASTER_MODE_SELECT)){

  28.         }
  29.        
  30.         I2C_Send7bitAddress(BMP180_I2C,BMP180_Read_ADDR,I2C_Direction_Transmitter);
  31.        
  32.         while(!I2C_CheckEvent(BMP180_I2C,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)){

  33.         }
  34.        
  35.         msb = I2C_ReceiveData(BMP180_I2C);
  36.        
  37.         while(!I2C_CheckEvent(BMP180_I2C,I2C_EVENT_MASTER_BYTE_RECEIVED)){

  38.         }
  39.        
  40.         I2C_NACKPositionConfig(BMP180_I2C,I2C_NACKPosition_Next);
  41.        
  42.         lsb = I2C_ReceiveData(BMP180_I2C);
  43.        
  44.         while(!I2C_CheckEvent(BMP180_I2C,I2C_EVENT_MASTER_BYTE_RECEIVED)){

  45.         }
  46.        
  47.         I2C_NACKPositionConfig(BMP180_I2C,I2C_NACKPosition_Current);
  48.        
  49.        
  50.         Data  = (msb << 8);
  51.         Data |= lsb;
  52.         return Data;
  53. }
复制代码
  1. #include "stm32f4xx.h"
  2. #include "I2C.h"

  3.                 /*íaéèoê*/
  4. #define BMP180_I2C                                                I2C1
  5.        
  6.                 /*BMP80μ&#216;&#214;·*/
  7. #define BMP180_Write_ADDR                                0xEE
  8. #define BMP180_Read_ADDR                                0xEF
复制代码


回复

使用道具 举报

发表于 2017-7-11 08:50:36 | 显示全部楼层
卡的话就直接改用软件I2C
回复

使用道具 举报

 楼主| 发表于 2017-7-11 12:20:06 | 显示全部楼层
flyleaf 发表于 2017-7-11 08:50
卡的话就直接改用软件I2C

硬件没有办法解决吗
回复

使用道具 举报

发表于 2017-10-17 19:57:31 | 显示全部楼层
flyleaf 发表于 2017-7-11 08:50
卡的话就直接改用软件I2C

请问429硬件IIC也有问题吗
回复

使用道具 举报

发表于 2017-10-18 09:15:56 | 显示全部楼层
Demonzjs 发表于 2017-10-17 19:57
请问429硬件IIC也有问题吗

都一样
回复

使用道具 举报

发表于 2017-10-18 09:16:32 | 显示全部楼层

好的  谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 22:09 , Processed in 0.030003 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表