- /********************************************************************************************************
- **函数信息 :I2CMasterTest(I2C_TypeDef *I2Cx)
- **功能描述 :I2C接收发送数据测试程序
- **输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2
- **输出参数 :无
- ********************************************************************************************************/
- unsigned char rxBuffer[16] = {0};
- void I2CMasterTest(I2C_TypeDef *I2Cx)
- {
- unsigned char i;
- I2CInitMasterMode();
- I2CMasterWrite(I2C1, FLASH_DEVICE_ADDR, 16 * 1, 16, tx_buffer0 );
- for(i = 0; i < 16 ; i ++) {
- UartSendGroup((u8*)printBuf, sprintf(printBuf, "TX data is: %x \r\n", tx_buffer0[i]));
- }
- I2CMasterRead(I2C1, FLASH_DEVICE_ADDR, 16 * 1, 16, rx_buffer0 );
- for(i = 0; i < 16; i++) {
- UartSendGroup((u8*)printBuf, sprintf(printBuf, "RX data%d is : %x \r\n", i, rx_buffer0[i]));
- }
- }
- /********************************************************************************************************
- **函数信息 :I2CInitMasterMode(void) //unit is Khz
- **功能描述 :初始化I2C
- **输入参数 :I2C_TypeDef *I2Cx,选择I2C1,I2C2
- **输出参数 :无
- ********************************************************************************************************/
- void I2CInitMasterMode(void)
- {
- I2C_InitTypeDef I2C_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //开启GPIOB时钟
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_20MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- I2C_InitStructure.I2C_Mode = I2C_Mode_MASTER;
- I2C_InitStructure.I2C_OwnAddress = FLASH_DEVICE_ADDR;
- I2C_InitStructure.I2C_Speed = I2C_Speed_STANDARD;
- I2C_InitStructure.I2C_ClockSpeed = 100000;
- I2C_Init(I2C1, &I2C_InitStructure);
- I2C_Cmd(I2C1, ENABLE);
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_20MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_1);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_1);
- }
- int main(void)
- {
- uart_initwBaudRate(115200);
- I2CMasterTest(I2C1); //I2C收发数据
- while(1) {
- }
- }
- /********************************************************************************************************
- **函数信息 :uart_initwBaudRate(u32 bound)
- **功能描述 :UART初始化
- **输入参数 :bound
- **输出参数 :无
- ********************************************************************************************************/
- void uart_initwBaudRate(u32 bound)
- {
- //GPIO端口设置
- GPIO_InitTypeDef GPIO_InitStructure;
- UART_InitTypeDef UART_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE); //使能UART1时钟
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //开启GPIOA时钟
- //UART 初始化设置
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
- UART_InitStructure.UART_BaudRate = bound; //串口波特率
- UART_InitStructure.UART_WordLength = UART_WordLength_8b; //字长为8位数据格式
- UART_InitStructure.UART_StopBits = UART_StopBits_1; //一个停止位
- UART_InitStructure.UART_Parity = UART_Parity_No; //无奇偶校验位
- UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;//无硬件数据流控制
- UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; //收发模式
- UART_Init(UART1, &UART_InitStructure); //初始化串口1
- UART_Cmd(UART1, ENABLE); //使能串口1
- //UART1_TX GPIOA.9
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
- GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.9
- //UART1_RX GPIOA.10初始化
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
- GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.10
- }
|