问答

汇集网友智慧,解决技术难题

21ic问答首页 - TAG - IIC从机
  • GD32E230作为IIC从机时接收数据会卡顿是什么原因

    在配置完成IIC从机模式后,主机向从机发送9位数据,在从机收到数据后主函数的代码会跑不到,不知道在什么地方造成了阻塞,接收完毕会产生多次的STPDEF中断吗,但是IIC从机模式的故障应该也不会影响到主函数的运行才对,有没有懂的大佬帮忙分析一下谢谢,代码如下[color=#dadada][backcolor=rgb(30, 30, 30)][font=Consolas, "][size=17px][color=#b4b4b4]#[/color][color=#9a9a9a]include[/color][color=#c8c8c8] [/color][color=#e8c9bb]"[/color][color=#ce9178]gd32e230.h[/color][color=#e8c9bb]"[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]define[/color][color=#c8c8c8] [/color][color=#beb7ff]MSG_RECV_BYTE_SUM[/color][color=#c8c8c8] [/color][color=#b5cea8]9[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]define[/color][color=#c8c8c8] [/color][color=#beb7ff]MSG_SEND_BYTE_SUM[/color][color=#c8c8c8] [/color][color=#b5cea8]6[/color] [color=#b4b4b4]#[/color][color=#9a9a9a]define[/color][color=#c8c8c8] [/color][color=#beb7ff]I2C0_OWN_ADDRESS7[/color][color=#c8c8c8] [/color][color=#b5cea8]0x44[/color] [color=#569cd6]void[/color] [color=#dcdcaa]iic_msg_gpio_config_init[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* enable GPIOB clock */[/color] [color=#dcdcaa]rcu_periph_clock_enable[/color][color=#b4b4b4]([/color]RCU_GPIOB[color=#b4b4b4]);[/color] [color=#57a64a] /* enable I2C0 clock */[/color] [color=#dcdcaa]rcu_periph_clock_enable[/color][color=#b4b4b4]([/color]RCU_I2C0[color=#b4b4b4]);[/color] [color=#57a64a] /* connect PB6 to I2C0_SCL */[/color] [color=#dcdcaa]gpio_af_set[/color][color=#b4b4b4]([/color]GPIOB[color=#b4b4b4],[/color] GPIO_AF_1[color=#b4b4b4],[/color] GPIO_PIN_6[color=#b4b4b4]);[/color] [color=#57a64a] /* connect PB7 to I2C0_SDA */[/color] [color=#dcdcaa]gpio_af_set[/color][color=#b4b4b4]([/color]GPIOB[color=#b4b4b4],[/color] GPIO_AF_1[color=#b4b4b4],[/color] GPIO_PIN_7[color=#b4b4b4]);[/color] [color=#57a64a] /* configure GPIO pins of I2C0 */[/color] [color=#dcdcaa]gpio_mode_set[/color][color=#b4b4b4]([/color]GPIOB[color=#b4b4b4],[/color] GPIO_MODE_AF[color=#b4b4b4],[/color] GPIO_PUPD_PULLUP[color=#b4b4b4],[/color] GPIO_PIN_6[color=#b4b4b4]);[/color] [color=#dcdcaa]gpio_output_options_set[/color][color=#b4b4b4]([/color]GPIOB[color=#b4b4b4],[/color] GPIO_OTYPE_OD[color=#b4b4b4],[/color] GPIO_OSPEED_50MHZ[color=#b4b4b4],[/color] GPIO_PIN_6[color=#b4b4b4]);[/color] [color=#dcdcaa]gpio_mode_set[/color][color=#b4b4b4]([/color]GPIOB[color=#b4b4b4],[/color] GPIO_MODE_AF[color=#b4b4b4],[/color] GPIO_PUPD_PULLUP[color=#b4b4b4],[/color] GPIO_PIN_7[color=#b4b4b4]);[/color] [color=#dcdcaa]gpio_output_options_set[/color][color=#b4b4b4]([/color]GPIOB[color=#b4b4b4],[/color] GPIO_OTYPE_OD[color=#b4b4b4],[/color] GPIO_OSPEED_50MHZ[color=#b4b4b4],[/color] GPIO_PIN_7[color=#b4b4b4]);[/color] [color=#57a64a] /* I2C clock configure */[/color] [color=#dcdcaa]i2c_clock_config[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] [color=#b5cea8]400000[/color][color=#b4b4b4],[/color] I2C_DTCY_2[color=#b4b4b4]);[/color] [color=#57a64a] /* I2C address configure */[/color] [color=#dcdcaa]i2c_mode_addr_config[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_I2CMODE_ENABLE[color=#b4b4b4],[/color] I2C_ADDFORMAT_7BITS[color=#b4b4b4],[/color] [color=#beb7ff]I2C0_OWN_ADDRESS7[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* enable I2C0 */[/color] [color=#dcdcaa]i2c_enable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4]);[/color] [color=#57a64a] /* enable acknowledge */[/color] [color=#dcdcaa]i2c_ack_config[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_ACK_ENABLE[color=#b4b4b4]);[/color] [color=#dcdcaa]nvic_irq_enable[/color][color=#b4b4b4]([/color]I2C0_EV_IRQn[color=#b4b4b4],[/color] [color=#b5cea8]23[/color][color=#b4b4b4]);[/color] [color=#dcdcaa]nvic_irq_enable[/color][color=#b4b4b4]([/color]I2C0_ER_IRQn[color=#b4b4b4],[/color] [color=#b5cea8]32[/color][color=#b4b4b4]);[/color] [color=#57a64a] /* enable the I2C0 interrupt */[/color] [color=#dcdcaa]i2c_interrupt_enable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_ERR[color=#b4b4b4]);[/color] [color=#dcdcaa]i2c_interrupt_enable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_EV[color=#b4b4b4]);[/color] [color=#dcdcaa]i2c_interrupt_enable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_BUF[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#569cd6]void[/color] [color=#dcdcaa]i2c0_event_irq_handler[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_ADDSEND[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#b4b4b4] [/color][color=#57a64a]// 0:接收端[/color] [color=#b4b4b4] [/color][color=#57a64a]// 1:发送端[/color] [color=#9cdcfe]tI2cSlave[/color][color=#b4b4b4].[/color][color=#9cdcfe]uFlag[/color][color=#b4b4b4].[/color][color=#9cdcfe]Bits[/color].[color=#9cdcfe]DirState[/color] [color=#b4b4b4]=[/color] [color=#dcdcaa]i2c_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_FLAG_TR[color=#b4b4b4]);[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#9cdcfe]tI2cSlave[/color][color=#b4b4b4].[/color][color=#9cdcfe]uFlag[/color][color=#b4b4b4].[/color][color=#9cdcfe]Bits[/color].[color=#9cdcfe]DirState[/color] [color=#b4b4b4]==[/color] RESET[color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] msg_iic_recv_buf_count [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#d8a0df]for[/color] [color=#b4b4b4]([/color][color=#569cd6]uint8_t[/color] [color=#9cdcfe]i[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i[/color] [color=#b4b4b4]<[/color] [color=#beb7ff]MSG_RECV_BYTE_SUM[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i[/color][color=#b4b4b4]++)[/color] [color=#b4b4b4]{[/color] [color=#9cdcfe]i2c_rxbuffer1[/color][color=#b4b4b4][[/color][color=#9cdcfe]i[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* clear I2C_TDATA register */[/color] [color=#dcdcaa]i2c_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_FLAG_TBE[color=#b4b4b4]);[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]soft_versions[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0x00[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]0[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]soft_versions[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]1[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]KEY_state[/color][color=#b4b4b4];[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]reserved_1[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0x00[/color][color=#b4b4b4];[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]reserved_2[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0x00[/color][color=#b4b4b4];[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]reserved_3[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0x00[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]2[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]reserved_1[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]3[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]reserved_2[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]4[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]reserved_3[/color][color=#b4b4b4];[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]check_sum[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#569cd6]uint32_t[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]+=[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]0[/color][color=#b4b4b4]];[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]+=[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]1[/color][color=#b4b4b4]];[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]+=[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]2[/color][color=#b4b4b4]];[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]+=[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]3[/color][color=#b4b4b4]];[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]+=[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]4[/color][color=#b4b4b4]];[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]=[/color] [color=#b4b4b4]~[/color][color=#9cdcfe]cheak[/color][color=#b4b4b4];[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]cheak[/color] [color=#b4b4b4]+[/color] [color=#b5cea8]1[/color][color=#b4b4b4];[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color][color=#b5cea8]5[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]cheak[/color][color=#b4b4b4];[/color] [color=#9cdcfe]slave_msg_send[/color][color=#b4b4b4].[/color][color=#9cdcfe]check_sum[/color] [color=#b4b4b4]=[/color] [color=#9cdcfe]cheak[/color][color=#b4b4b4];[/color] msg_iic_send_buf_count [color=#b4b4b4]=[/color] [color=#b5cea8]0[/color][color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* clear the ADDSEND bit */[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_ADDSEND[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_RBNE[color=#b4b4b4]))[/color][color=#57a64a] // && dma_flag_get(DMA_RX_CH, DMA_FLAG_FTF)[/color] [color=#b4b4b4]{[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color]msg_iic_recv_buf_count [color=#b4b4b4]<[/color] [color=#beb7ff]MSG_RECV_BYTE_SUM[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#9cdcfe]i2c_rxbuffer1[/color][color=#b4b4b4][[/color]msg_iic_recv_buf_count [color=#b4b4b4]=[/color] [color=#dcdcaa]i2c_data_receive[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4]);[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color]msg_iic_recv_buf_count [color=#b4b4b4]==[/color] [color=#b4b4b4]([/color][color=#beb7ff]MSG_RECV_BYTE_SUM[/color] [color=#b4b4b4]-[/color] [color=#b5cea8]1[/color][color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]UpdateReceiveProc[/color][color=#b4b4b4]();[/color] [color=#b4b4b4]}[/color] [color=#b4b4b4]++[/color]msg_iic_recv_buf_count[color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_data_receive[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#d8a0df]if[/color] [color=#b4b4b4](([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_TBE[color=#b4b4b4])))[/color][color=#57a64a] // && dma_flag_get(DMA_TX_CH, DMA_FLAG_FTF)[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* send a data byte */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color]msg_iic_send_buf_count [color=#b4b4b4]<[/color] [color=#beb7ff]MSG_SEND_BYTE_SUM[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* if reception data register is not empty, I2C0 will read a data from I2C_RDATA */[/color] [color=#dcdcaa]i2c_data_transmit[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] [color=#9cdcfe]i2c_txbuffer[/color][color=#b4b4b4][[/color]msg_iic_send_buf_count[color=#b4b4b4]]);[/color] msg_iic_send_buf_count[color=#b4b4b4]++;[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_data_transmit[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] [color=#b5cea8]0xff[/color][color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_STPDET[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* clear STPDET interrupt flag */[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_STPDET[color=#b4b4b4]);[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#9cdcfe]tI2cSlave[/color][color=#b4b4b4].[/color][color=#9cdcfe]uFlag[/color][color=#b4b4b4].[/color][color=#9cdcfe]Bits[/color].[color=#9cdcfe]DirState[/color] [color=#b4b4b4]==[/color] RESET[color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#9cdcfe]tI2cSlave[/color][color=#b4b4b4].[/color][color=#9cdcfe]uFlag[/color][color=#b4b4b4].[/color][color=#9cdcfe]Bits[/color].[color=#9cdcfe]RecSuccess[/color] [color=#b4b4b4]=[/color] SUCCESS[color=#b4b4b4];[/color] msg_iic_recv_buf_count [color=#b4b4b4]=[/color] [color=#b5cea8]0x00[/color][color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#b4b4b4]{[/color] [color=#9cdcfe]tI2cSlave[/color][color=#b4b4b4].[/color][color=#9cdcfe]uFlag[/color][color=#b4b4b4].[/color][color=#9cdcfe]Bits[/color].[color=#9cdcfe]SendSuccess[/color] [color=#b4b4b4]=[/color] SUCCESS[color=#b4b4b4];[/color] [color=#9cdcfe]tI2cSlave[/color][color=#b4b4b4].[/color][color=#9cdcfe]SendSize[/color] [color=#b4b4b4]=[/color] [color=#b5cea8]0x00[/color][color=#b4b4b4];[/color][color=#57a64a] // 避免没有接收到命令重新发数据[/color] msg_iic_send_buf_count [color=#b4b4b4]=[/color] [color=#b5cea8]0x00[/color][color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#dcdcaa]i2c_enable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#d8a0df]else[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_AERR[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* clear STPDET interrupt flag */[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_AERR[color=#b4b4b4]);[/color] [color=#9cdcfe]tI2cSlave[/color][color=#b4b4b4].[/color][color=#9cdcfe]uFlag[/color][color=#b4b4b4].[/color][color=#9cdcfe]Bits[/color].[color=#9cdcfe]SendSuccess[/color] [color=#b4b4b4]=[/color] SUCCESS[color=#b4b4b4];[/color] [color=#b4b4b4]}[/color] [color=#b4b4b4]}[/color] [color=#569cd6]void[/color] [color=#dcdcaa]i2c0_error_irq_handler[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#57a64a] /* no acknowledge received */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_AERR[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_AERR[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* SMBus alert */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_SMBALT[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_SMBALT[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* bus timeout in SMBus mode */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_SMBTO[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_SMBTO[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* over-run or under-run when SCL stretch is disabled */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_OUERR[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_OUERR[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* arbitration lost */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_LOSTARB[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_LOSTARB[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* bus error */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_BERR[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_BERR[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* CRC value doesn't match */[/color] [color=#d8a0df]if[/color] [color=#b4b4b4]([/color][color=#dcdcaa]i2c_interrupt_flag_get[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_PECERR[color=#b4b4b4]))[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c_interrupt_flag_clear[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_FLAG_PECERR[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#57a64a] /* disable the I2C0 interrupt */[/color] [color=#dcdcaa]i2c_interrupt_disable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_ERR[color=#b4b4b4]);[/color] [color=#dcdcaa]i2c_interrupt_disable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_BUF[color=#b4b4b4]);[/color] [color=#dcdcaa]i2c_interrupt_disable[/color][color=#b4b4b4]([/color]I2C0[color=#b4b4b4],[/color] I2C_INT_EV[color=#b4b4b4]);[/color] [color=#b4b4b4]}[/color] [color=#569cd6]void[/color] [color=#dcdcaa]I2C0_EV_IRQHandler[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c0_event_irq_handler[/color][color=#b4b4b4]();[/color] [color=#b4b4b4]}[/color] [color=#569cd6]void[/color] [color=#dcdcaa]I2C0_ER_IRQHandler[/color][color=#b4b4b4]([/color][color=#569cd6]void[/color][color=#b4b4b4])[/color] [color=#b4b4b4]{[/color] [color=#dcdcaa]i2c0_error_irq_handler[/color][color=#b4b4b4]();[/color] [color=#b4b4b4]}[/color] [/size][/font][/backcolor][/color]

    MCU 接收 GD32E230 IIC从机 卡顿 原因

    2127浏览量 9回复量 关注量
  • APM32F103TBU6硬件IIC从机通信 sos

    使用APM32F103TBU6进行IIC主从通信时,APM32F103作为从机总是数据接收异常,示波器查看到芯片的IIC信号,波形正常,但是APM32F103没有对地址进行应答,复位偶尔能应答一次,确定硬件没问题,从机使用官方的例程,有没使用过IIC主从通信的大佬指点下

    国产芯片 IIC从机

    794浏览量 0回复量 关注量