[MM32软件] 031C6T收发测试I2C

[复制链接]
 楼主| asmine 发表于 2021-12-16 16:22 | 显示全部楼层 |阅读模式
  1. /********************************************************************************************************
  2. **函数信息 :I2CMasterTest(I2C_TypeDef *I2Cx)
  3. **功能描述 :I2C接收发送数据测试程序
  4. **输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2
  5. **输出参数 :无
  6. ********************************************************************************************************/
  7. unsigned char rxBuffer[16] = {0};

  8. void I2CMasterTest(I2C_TypeDef *I2Cx)
  9. {
  10.     unsigned char i;

  11.     I2CInitMasterMode();


  12.     I2CMasterWrite(I2C1, FLASH_DEVICE_ADDR, 16 * 1, 16, tx_buffer0 );

  13.     for(i = 0; i < 16 ; i ++) {
  14.         UartSendGroup((u8*)printBuf, sprintf(printBuf, "TX data is: %x \r\n", tx_buffer0[i]));
  15.     }

  16.     I2CMasterRead(I2C1, FLASH_DEVICE_ADDR, 16 * 1, 16, rx_buffer0 );

  17.     for(i = 0; i < 16; i++) {
  18.         UartSendGroup((u8*)printBuf, sprintf(printBuf, "RX data%d is  : %x \r\n", i, rx_buffer0[i]));
  19.     }

  20. }

  1. /********************************************************************************************************
  2. **函数信息 :I2CInitMasterMode(void) //unit is Khz
  3. **功能描述 :初始化I2C
  4. **输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2
  5. **输出参数 :无
  6. ********************************************************************************************************/
  7. void I2CInitMasterMode(void)
  8. {
  9.     I2C_InitTypeDef I2C_InitStructure;
  10.     GPIO_InitTypeDef  GPIO_InitStructure;
  11.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);                         //开启GPIOB时钟

  12.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

  13.     GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8 | GPIO_Pin_9;
  14.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_20MHz;
  15.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  16.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  17.     I2C_InitStructure.I2C_Mode = I2C_Mode_MASTER;
  18.     I2C_InitStructure.I2C_OwnAddress = FLASH_DEVICE_ADDR;
  19.     I2C_InitStructure.I2C_Speed = I2C_Speed_STANDARD;
  20.     I2C_InitStructure.I2C_ClockSpeed = 100000;
  21.     I2C_Init(I2C1, &I2C_InitStructure);
  22.     I2C_Cmd(I2C1, ENABLE);

  23.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_20MHz;
  24.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  25.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  26.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_1);
  27.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_1);

  28. }

  1. int main(void)
  2. {
  3.     uart_initwBaudRate(115200);
  4.     I2CMasterTest(I2C1);                                                        //I2C收发数据
  5.     while(1) {

  6.     }
  7. }
  1. /********************************************************************************************************
  2. **函数信息 :uart_initwBaudRate(u32 bound)
  3. **功能描述 :UART初始化
  4. **输入参数 :bound
  5. **输出参数 :无
  6. ********************************************************************************************************/
  7. void uart_initwBaudRate(u32 bound)
  8. {
  9.     //GPIO端口设置
  10.     GPIO_InitTypeDef GPIO_InitStructure;
  11.     UART_InitTypeDef UART_InitStructure;

  12.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);                       //使能UART1时钟
  13.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);                         //开启GPIOA时钟
  14.     //UART 初始化设置
  15.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
  16.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

  17.     UART_InitStructure.UART_BaudRate = bound;                                   //串口波特率
  18.     UART_InitStructure.UART_WordLength = UART_WordLength_8b;                    //字长为8位数据格式
  19.     UART_InitStructure.UART_StopBits = UART_StopBits_1;                         //一个停止位
  20.     UART_InitStructure.UART_Parity = UART_Parity_No;                            //无奇偶校验位
  21.     UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;//无硬件数据流控制
  22.     UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx;                        //收发模式

  23.     UART_Init(UART1, &UART_InitStructure);                                      //初始化串口1
  24.     UART_Cmd(UART1, ENABLE);                                                    //使能串口1

  25.     //UART1_TX   GPIOA.9
  26.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                   //PA.9
  27.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  28.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                             //复用推挽输出
  29.     GPIO_Init(GPIOA, &GPIO_InitStructure);                                      //初始化GPIOA.9

  30.     //UART1_RX          GPIOA.10初始化
  31.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                                  //PA10
  32.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                       //浮空输入
  33.     GPIO_Init(GPIOA, &GPIO_InitStructure);                                      //初始化GPIOA.10

  34. }


mutable 发表于 2021-12-17 14:10 | 显示全部楼层
这是属于硬件I2C了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

720

帖子

2

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