问答

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

Henry-hu

TA的家园币:10  

  • GD32E230作为IIC从机时接收数据会卡顿是什么原因

    在配置完成IIC从机模式后,主机向从机发送9位数据,在从机收到数据后主函数的代码会跑不到,不知道在什么地方造成了阻塞,接收完毕会产生多次的STPDEF中断吗,但是IIC从机模式的故障应该也不会影响到主函数的运行才对,有没有懂的大佬帮忙分析一下谢谢,代码如下#include"gd32e230.h"#defineMSG_RECV_BYTE_SUM9#defineMSG_SEND_BYTE_SUM6#defineI2C0_OWN_ADDRESS70x44voidiic_msg_gpio_config_init(void){/*enableGPIOBclock*/rcu_periph_clock_enable(RCU_GPIOB);/*enableI2C0clock*/rcu_periph_clock_enable(RCU_I2C0);/*connectPB6toI2C0_SCL*/gpio_af_set(GPIOB,GPIO_AF_1,GPIO_PIN_6);/*connectPB7toI2C0_SDA*/gpio_af_set(GPIOB,GPIO_AF_1,GPIO_PIN_7);/*configureGPIOpinsofI2C0*/gpio_mode_set(GPIOB,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_6);gpio_output_options_set(GPIOB,GPIO_OTYPE_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_6);gpio_mode_set(GPIOB,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_7);gpio_output_options_set(GPIOB,GPIO_OTYPE_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_7);/*I2Cclockconfigure*/i2c_clock_config(I2C0,400000,I2C_DTCY_2);/*I2Caddressconfigure*/i2c_mode_addr_config(I2C0,I2C_I2CMODE_ENABLE,I2C_ADDFORMAT_7BITS,I2C0_OWN_ADDRESS7);/*enableI2C0*/i2c_enable(I2C0);/*enableacknowledge*/i2c_ack_config(I2C0,I2C_ACK_ENABLE);nvic_irq_enable(I2C0_EV_IRQn,23);nvic_irq_enable(I2C0_ER_IRQn,32);/*enabletheI2C0interrupt*/i2c_interrupt_enable(I2C0,I2C_INT_ERR);i2c_interrupt_enable(I2C0,I2C_INT_EV);i2c_interrupt_enable(I2C0,I2C_INT_BUF);}voidi2c0_event_irq_handler(void){if(i2c_interrupt_flag_get(I2C0,I2C_INT_FLAG_ADDSEND)){//0:接收端//1:发送端tI2cSlave.uFlag.Bits.DirState=i2c_flag_get(I2C0,I2C_FLAG_TR);if(tI2cSlave.uFlag.Bits.DirState==RESET){msg_iic_recv