-
GD32F427以太网初始化软件复位不能通过SWR一直是1 sos
板卡只是更换了一颗PHY芯片,就出现了该问题,以太网的配置没有变化,PHY芯片对GD32以太网复位有什么影响?
2271浏览量 0回复量 关注量 -
关于GD32定时器0通道3触发adc问题
[i=s] 本帖最后由 快乐古月 于 2024-2-4 09:45 编辑 [/i] 再库文件里面是是控制CTL1寄存器的12-14位,但是在手册里面这几位是保留的,还有就是配置了之后,触发方式是什么,是上溢还是下溢。[code]#define CTL1_ETSIC(regval) (BITS(12,14) & ((uint32_t)(regval) << 12)) /*!< write value to ADC_CTL1_ETSIC bit field */ #define ADC0_1_EXTTRIG_INSERTED_T0_CH3 CTL1_ETSIC(1) /*!< timer 0 CC3 event select */[/code][color=#cccccc][font=Consolas, "] [/font][/color]
3274浏览量 1回复量 关注量 -
关于gd32f103rbt6sram的问题 sos
项目之前一直使用的STM32F103RBT6,后来移植到GD32F103RBT6,使用都正常,最近增加了一些功能,需要增加一些全局缓存区,结果发现编译无法通过,才发现已超出容量,对比之前st和gd能正常工作的两个版本,编译后那个ZI-data差别非常大,不会上传截图,文字给大家描述下,想问下大家这是什么情况,有遇到类似的么?gd32f103rbt6: Program Size: Code=44062 RO-data=4362 RW-data=136 ZI-data=19976 stm32f103rbt6: Program Size: Code=56310 RO-data=3882 RW-data=236 ZI-data=5556 为什么同样的全局变量缓存区,两个芯片编译后差别这么大?
1410浏览量 0回复量 关注量 -
GD32F305ZET6 MCU跑死后,系统复位不响应
Hi 各位大牛,一个项目上用到GD32F305ZET6这款单片机,最近遇到个很困惑的问题描述如下: 1、QFP-144pin封装,只用到PA0(wakeup pin),ADC、I2C、UART以及少部分GPIO作为输入输出,12M的无源晶振作为MCU时钟,3.3V供电; 2、常温环境下,上电运行一切正常,跑了一段时间后发现MCU已经跑死,不响应外围IO上的高低电平信号,UART等接口均无响应; 3、按下NRST复位开关,MCU仍没有任何响应; 4、加看门狗后发现出问题时,看门口也无法复位; 5、电源供电,NRST电路等均按照手册要求设计,时钟波形均测量正常,并且没有发现异常case; 6、没有找到导致MCU跑死的必发路径,询问原厂FAE说可能是cache有问题,所以即使复位NRST管脚也不会重新加载cache,单问题是什么情况会导致cache异常,除cache外还有没有其他可能异常点; 综合看起来像是硬件上出问题了,这种情况还是第一次遇到。 以上,请各路大神帮忙看一下什么问题,谢谢!
1944浏览量 2回复量 关注量 -
gd32l23cct6 硬件i2c 等待TI / RBNE标志位超时
gd32l23cct6芯片在硬件i2c读写过程中会偶尔出现write函数在TI标志位超时跳出,read函数在RBNE标志位超时跳出,TIMEOUT时间测试200ms+,在这两个标志位超时异常跳出导致i2c通信时序缺少stop位,bsy标志位一直位1,i2c再也无法继续通信,一定要通过复位i2c外设才能解决。硬件i2c驱动代码去下 int gd32_i2c_write(unsigned char bus, unsigned short addr, unsigned char *data, unsigned int data_len) { drv_i2c_mgr_t *i2c_mgr = NULL; unsigned int timeout = DRV_I2C_TIME_OUT; unsigned int idx; if (bus >= DRV_I2C_BUS_MAX) { return -1; } i2c_mgr = &s_st_i2c_mgr[bus]; if (0 == i2c_mgr->is_init) { return -1; } /* wait until I2C bus is idle */ timeout = DRV_I2C_TIME_OUT; i2c_master_addressing(i2c_mgr->periph, addr<<1, I2C_MASTER_TRANSMIT); i2c_address_config(i2c_mgr->periph, DRV_I2C_OWN_ADDRESS7, I2C_ADDFORMAT_7BITS); /* len not include addr byte */ i2c_transfer_byte_number_config(i2c_mgr->periph, data_len); while(i2c_flag_get(i2c_mgr->periph, I2C_FLAG_I2CBSY)) { if ((timeout--) == 0) { return -1; } } /* send a start condition to I2C bus */ timeout = DRV_I2C_TIME_OUT; i2c_start_on_bus(i2c_mgr->periph); /* wait until the transmit data buffer is empty */ I2C_STAT(i2c_mgr->periph) |= I2C_STAT_TBE; while(!i2c_flag_get(i2c_mgr->periph, I2C_FLAG_TBE)) { if ((timeout--) == 0) { return -1; } } for(idx = 0; idx < data_len; idx++) { /* data transmission */ timeout = DRV_I2C_TIME_OUT; i2c_data_transmit(i2c_mgr->periph, data[idx]); while(!i2c_flag_get(i2c_mgr->periph, I2C_FLAG_TI)) { if ((timeout--) == 0) { LOG_DIRECT_ERR("ti\r\n"); return -1; } } } timeout = DRV_I2C_TIME_OUT; while(!i2c_flag_get(i2c_mgr->periph, I2C_FLAG_TC)) { if ((timeout--) == 0) { return -1; } } /* send a stop condition to I2C bus */ i2c_stop_on_bus(i2c_mgr->periph); /* wait until stop condition generate */ while(!i2c_flag_get(i2c_mgr->periph, I2C_FLAG_STPDET)) { if ((timeout--) == 0) { return -1; } } /* clear the STPDET bit */ i2c_flag_clear(i2c_mgr->periph, I2C_FLAG_STPDET); return 0; } int gd32_i2c_read(unsigned char bus, unsigned short addr, unsigned char *data, unsigned int data_len) { drv_i2c_mgr_t *i2c_mgr = NULL; unsigned int timeout = DRV_I2C_TIME_OUT; unsigned int idx; if (bus >= DRV_I2C_BUS_MAX) { return -1; } i2c_mgr = &s_st_i2c_mgr[bus]; if (0 == i2c_mgr->is_init) { /* I2C init fail ,value invalid */ return -1; } /* wait until I2C bus is idle */ i2c_master_addressing(i2c_mgr->periph, addr<<1, I2C_MASTER_RECEIVE); i2c_address_config(i2c_mgr->periph, addr<<1, I2C_ADDFORMAT_7BITS); i2c_transfer_byte_number_config(i2c_mgr->periph, data_len); timeout = DRV_I2C_TIME_OUT; while(i2c_flag_get(i2c_mgr->periph, I2C_FLAG_I2CBSY)) { if ((timeout--) == 0) { return -1; } } /* send a start condition to I2C bus */ i2c_start_on_bus(i2c_mgr->periph); for(idx = 0; idx < data_len; idx++) { /* wait until the RBNE bit is set */ timeout = DRV_I2C_TIME_OUT; while(!i2c_flag_get(i2c_mgr->periph, I2C_FLAG_RBNE)) { if ((timeout--) == 0) { LOG_DIRECT_ERR("rbne\r\n"); return -1; } } /* read a data from I2C_DATA */ data[idx] = i2c_data_receive(i2c_mgr->periph); } while(!i2c_flag_get(i2c_mgr->periph, I2C_FLAG_TC)) { timeout = DRV_I2C_TIME_OUT; if ((timeout--) == 0) { return -1; } } /* send a stop condition to I2C bus */ i2c_stop_on_bus(i2c_mgr->periph); /* wait until stop condition generate */ while(!i2c_flag_get(i2c_mgr->periph, I2C_FLAG_STPDET)) { timeout = DRV_I2C_TIME_OUT; if ((timeout--) == 0) { return -1; } } /* clear the STPDET bit */ i2c_flag_clear(i2c_mgr->periph, I2C_FLAG_STPDET); return 0; }
4336浏览量 11回复量 关注量 -
GD32E230F8P6 USART1初始化后无法使能接收
GD32E230F8P6 PA2,PA3设置为AF1功能(USART1)初始化后无法使能接收,在STAT寄存器中查看可以发现REA为0,TEA为1; 相同的代码设置USART0(PA9,PA10)则正常,在STAT寄存器中REA、TEA均为1。[url=C:\Users\HW Engineer\Desktop\USART1_REA_fail.png][img]C:\Users\HW Engineer\Desktop\USART1_REA_fail.png[/img][/url]
2059浏览量 3回复量 关注量 -
求助帖,关于GD32_IAP更新的疑问
新手小白,被安排做IAP,学完了跳转,学中断向量,学启动,学硬件接线,学串口,学FLASH擦读写。目前卡在了上位机与下位机的通信协议,不知道怎么写协议或者调用协议,这个GD32真的很阁僚,也没有例程,求一个大佬讲讲ymodem,想知道怎么通过上位机传bin文件给下位机,传输的时候数据是存放在哪里的,什么时候再写入flash呢?目前一头雾水,蹲蹲蹲
1553浏览量 3回复量 关注量 -
GD32A503RDT3 ADC+DMA顺序转换问题,没有数据
void rcu_config(void) { /* enable GPIO clock */ rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOE); /* enable ADC0 clock */ rcu_periph_clock_enable(RCU_ADC0); /* enable DMA0 clock */ rcu_periph_clock_enable(RCU_DMA0); } /*! \brief configure the GPIO peripheral \param[in] none \param[out] none \retval none */ void gpio_config(void) { /* config the GPIO as analog mode */ gpio_mode_set(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_1);//GPIOB1, gpio_mode_set(GPIOE, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_13); } /*! \brief configure the DMA peripheral \param[in] none \param[out] none \retval none */ void dma_config(void) { /* ADC_DMA_channel configuration */ dma_parameter_struct dma_data_parameter; /* ADC DMA_channel configuration */ dma_deinit(DMA0, DMA_CH0); /* initialize DMA single data mode */ dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));//外设基地址 dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;//内存地址增量模式 dma_data_parameter.memory_addr = (uint32_t)adc_value;//数据存放地址 dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;//内存地址增量模式 dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;//dma外设宽度16位,半字 dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT; dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;//传输模式,外设到存储(接收) dma_data_parameter.number = 2;//长度 dma_data_parameter.priority = DMA_PRIORITY_HIGH;//优先级高 dma_init(DMA0, DMA_CH0, &dma_data_parameter); dma_circulation_enable(DMA0, DMA_CH0); /* enable DMA channel */ dma_channel_enable(DMA0, DMA_CH0); } /*! \brief configure the ADC peripheral \param[in] none \param[out] none \retval none */ void adc_config(void) { /* config ADC clock */ rcu_adc_clock_config(RCU_CKADC_CKAHB_DIV10); adc_deinit(ADC0); adc_mode_config(ADC_MODE_FREE);//ADC工作在独立模式 /* ADC continous function enable */ adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); /* ADC trigger config */ adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);//外部触发源设置 /* ADC data alignment config */ adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);//数据对齐配置 /* ADC channel length config */ adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);//用到几个转换通道 /* ADC regular channel config */ adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5); adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_9, ADC_SAMPLETIME_55POINT5); adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE); /* enable ADC interface */ adc_enable(ADC0); /* ADC DMA function enable */ adc_dma_mode_enable(ADC0); /* ADC calibration and reset calibration */ adc_calibration_enable(ADC0); } main.c /* system clocks configuration */ rcu_config(); /* GPIO configuration */ gpio_config(); /* DMA configuration */ dma_config(); /* ADC configuration */ adc_config(); adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
5368浏览量 25回复量 关注量 -
GD32F450VET6 SPI DMA 收数据异常 sos
1、使用从机发送数据0-4096,发现数据最后一位首先读取出来。2、读取数据时有时候接收的数据是0 , 2, 4 ,8一直到8192。 麻烦各位大神看看
1445浏览量 0回复量 关注量 -
GD-LINK GD32 连接不上 sos
新买的GD-LINK GD32 连接不上 要怎么处理 急急急[img]https://bbs.21ic.com/static/image/smiley/comcom/7.gif[/img]
1923浏览量 0回复量 关注量 -
GD32F305SPI没有时钟信号
使用了官方例程,芯片也换过,用示波器就是没检测到sck信号 而且使用这个历程之后到spi0_receive_array[receive_cnt]= spi_i2s_data_receive(spi0_send_array[send_cnt]);这行代码就不能往下执行了,send_n只接收一次 下面是代码 这是SPI的配置spi.c #include "SPI.h" #include "gd32f30x_spi.h" #include "systick.h" void spi0_init(void) { rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(SPI0); rcu_periph_clock_enable(RCU_AF); /*SCK->PA5 MISO->PA6 MOSI->PA7 SPI1:MASTER*/ gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7); gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6); spi_parameter_struct spi_init_struct; spi_i2s_deinit(SPI0); spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX; spi_init_struct.device_mode = SPI_MASTER; spi_init_struct.nss = SPI_NSS_SOFT; spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT; spi_init_struct.endian = SPI_ENDIAN_MSB; spi_init_struct.prescale = SPI_PSC_8; spi_enable(SPI0); } void spi1_init(void) { rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(SPI1); rcu_periph_clock_enable(RCU_AF); /*SCK->PB13 MISO->PB14 MOSI->PB15 SPI1:SLAVE*/ gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_14); gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_15); spi_parameter_struct spi_init_struct; spi_i2s_deinit(SPI1); spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX; spi_init_struct.device_mode = SPI_SLAVE; spi_init_struct.nss = SPI_NSS_SOFT; spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT; spi_init_struct.endian = SPI_ENDIAN_MSB; spi_enable(SPI1); } 下面是主函数的代码 main.c #include "gd32f30x.h" #include "systick.h" #include "Alarm.h" #include "SPI.h" extern void Task_Init(void); extern void Task_Idle(void); extern void spi1_init(void); #define NUM 10 unsigned char spi0_send_array[NUM] = {0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00AA}; unsigned char spi1_send_array[NUM] = {0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00BB}; unsigned char spi0_receive_array[NUM]; unsigned char spi1_receive_array[NUM]; unsigned char send_cnt, receive_cnt; int main(void) { systick_config(); spi0_init(); spi1_init(); while(send_cnt
2482浏览量 4回复量 关注量 -
关于GD32F305系列USB和CAN同时使用的问题
最近公司项目需要用到USB和CAN,将USB的数据传输到CAN总线。搜索到的信息如下:1.GD32F303的CAN和USB共享同一块SRAM,所以不能同时使用 2.只要带OTG的芯片,它们的CAN和USB是不共享SRAM的 3.查阅GD32F303的数据手册,写明了CAN和USB共享SRAM,USB外设占1KB。而GD32F305的数据手册中,找不到共享SRAM的说法了,并且USB外设占了256KB(看起来外设里自带了SRAM) 综上所述,GD32F305很有可能是属于USB和CAN可以同时使用的芯片,但我还是不敢百分百确认,于是来问问各位有没有同时用过这俩功能的[img]https://bbs.21ic.com/static/image/smiley/comcom/2.gif[/img]
7386浏览量 15回复量 关注量

问答