-
gd32l23cct6 硬件i2c 等待TI / RBNE标志位超时
gd32l23cct6芯片在硬件i2c读写过程中会偶尔出现write函数在TI标志位超时跳出,read函数在RBNE标志位超时跳出,TIMEOUT时间测试200ms+,在这两个标志位超时异常跳出导致i2c通信时序缺少stop位,bsy标志位一直位1,i2c再也无法继续通信,一定要通过复位i2c外设才能解决。硬件i2c驱动代码去下intgd32_i2c_write(unsignedcharbus,unsignedshortaddr,unsignedchar*data,unsignedintdata_len){drv_i2c_mgr_t*i2c_mgr=NULL;unsignedinttimeout=DRV_I2C_TIME_OUT;unsignedintidx;if(bus>=DRV_I2C_BUS_MAX){return-1;}i2c_mgr=&s_st_i2c_mgr[bus];if(0==i2c_mgr->is_init){return-1;}/*waituntilI2Cbusisidle*/timeout=DRV_I2C_TIME_OUT;i2c_master_addressing(i2c_mgr->periph,addrperiph,data_len);while(i2c_flag_get(i2c_mgr->periph,I2C_FLAG_I2CBSY)){if((timeout--)==0){return-1;}}/*sendastartconditiontoI2Cbus*/timeout=DRV_I2C_TIME_OUT;i2c_start_on_bus(i2c_mgr->periph);/*waituntilthetransmitdatabufferisempty*/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++){/*datatransmission*/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;}}/*sendastopconditiontoI2Cbus*/i2c_stop_on_bus(i2c_mgr->periph);/*waituntilstopconditiongenerate*/while(!i2c_flag_get(i2c_mgr->periph,I2C_FLAG_STPDET)){if((timeout--)==0){return-1;}}/*cleartheSTPDETbit*/i2c_flag_clear(i2c_mgr->periph,I2C_FLAG_STPDET);return0;}intgd32_i2c_read(unsignedcharbus,
2023-09-21 11 -
NUCLEO-F103RB在升级ST-Link时,导致ST-Link不能使用,求助!
NUCLEO-F103RB在用STLinkUpgrade升级ST-Link时,选择ChangeType和STM32Debug+VCP,然后点击yes后电脑就不认这全板上的ST-Link了,也没有显示U盘。请问怎么修复?
2023-09-06 7 -
为什么STM32在使用定时器中断的时候ARR的参数不能给0?
我在使用ETR外部时钟信号时,想实现类似于外部中断的,信号来一次进入一次中断的操作。但是发现当TIM_Period参数给1-1,也就是0时,无法正常进入中断。但是将参数调整为2-1时,来两次信号又可以进入中断,请问这是为什么?uint16_tCount;voidTIM_QuicklyInit(void);intmain(void){TIM_QuicklyInit();OLED_Init();OLED_ShowString(1,1,"Counts:");while(1){OLED_ShowNum(2,1,Count,4);OLED_ShowNum(3,1,TIM_GetCounter(TIM2),1);}}voidTIM_QuicklyInit(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDefGPIOInitstructure;GPIOInitstructure.GPIO_Mode=GPIO_Mode_IPD;GPIOInitstructure.GPIO_Pin=GPIO_Pin_0;GPIOInitstructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIOInitstructure);TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_Inverted,0x0F);TIM_TimeBaseInitTypeDefTimeInitstructure;TimeInitstructure.TIM_CounterMode=TIM_CounterMode_Up;TimeInitstructure.TIM_ClockDivision=TIM_CKD_DIV4;TimeInitstructure.TIM_Period=1-1;TimeInitstructure.TIM_Prescaler=1-1;TimeInitstructure.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM2,&TimeInitstructure);TIM_ClearFlag(TIM2,TIM_FLAG_Update);TIM_Cmd(TIM2,ENABLE);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDefNVICInitstructure;NVICInitstructure.NVIC_IRQChannel=TIM2_IRQn;NVICInitstructure.NVIC_IRQChannelCmd=ENABLE;NVICInitstructure.NVIC_IRQChannelPreemptionPriority=2;NVICInitstructure.NVIC_IRQChannelSubPriority=2;NVIC_Init(&NVICInitstructure);}voidTIM2_IRQHandler(void){if(TIM_GetFlagStatus(TIM2,TIM_IT_Update)==SET)Count++;TIM_ClearFlag(TIM2,TI
2023-09-04 8 -
大佬有知道GD32C103和后出的C113有什么区别吗?
大佬有知道GD32C103和后出的C113有什么区别吗?
2023-09-04 9 -
GD32L开发板那个好?
GD32L开发板那个好?大神们推荐一下,谢谢!
2023-08-23 3 -
GD32E503写入部分寄存器会失败
使用GD官方库做STM32F103的移植,对应的寄存器的命名方式都采用了官方库的形式。测试时发现每次重新上电AFIO_PCF0寄存器设置失败、I2C启动信号(第8bitstart)置位失败、RTC的频率写入失败。如果增加写入操作次数第一次写入失败,第二次写入成功。目前查到了这些异常,相关的外设配置没有发现问题,有大佬知道这是怎么回事吗?
2023-08-23 18 -
GD32E30x uart0 波特率1200时,出现乱码。
udiv=(uclk+baudval/2U)/baudval;intdiv=udiv&0x0000fff0U;fradiv=udiv&0x0000000fU;}USART_BAUD(usart_periph)=((USART_BAUD_FRADIV|USART_BAUD_INTDIV)&(intdiv|fradiv));跟中代码发现走的上面的过程uclk=180000000,intdiv=?fradiv=?1.intdiv=456,fradiv=82.intdiv=65440,fradiv=8
2023-08-19 52 -
GD32 关于RGB问题
本帖最后由tyw于2023-8-1615:49编辑GDF32F470VKT6支持TLI功能但是引脚上面是没有PG与PH的,手册上面也未指出哪些引脚能够复用,这个我需要怎么解决tyw注
2023-08-16 11 -
GD32F303芯片 SMARTCARD 7816智能卡功能初始化问题
本帖最后由lonkyzhang于2022-4-2018:09编辑在官方库中没有smartcard的例程,我照着ST的方法写了一下初始化,使能了时钟,PB14的RST复位信号用示波器可以看到,但PB12的CLK对应管脚一直没有时钟信号,一直是低电平。使用的GD32F303RCT6代码如下,请教各位大神!感谢!unsignedcharInit_Card_Slot(unsignedcharInit_Psam_Slot(unsignedchar*Atr){rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_USART2);gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_13);//VCCPB13gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_14);//RSTPB14gpio_init(GPIOB,GPIO_MODE_AF_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_10);//IOPB10USART2TXgpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_12);//CLKPB12USART2CKgpio_bit_set(GPIOB,GPIO_PIN_13);//VCC=1//关闭失能usart_deinit(USART2);usart_disable(USART2);usart_synchronous_clock_disable(USART2);usart_transmit_config(USART2,USART_TRANSMIT_DISABLE);usart_receive_config(USART2,USART_RECEIVE_DISABLE);usart_hardware_flow_rts_config(USART2,USART_RTS_DISABLE);usart_hardware_flow_cts_config(USART2,USART_CTS_DISABLE);//配置传输格式usart_word_length_set(USART2,USART_WL_9BIT);usart_stop_bit_set(USART2,USART_STB_1_5BIT);usart_parity_config(USART2,USART_PM_EVEN);usart_transmit_config(USART2,USART_TRANSMIT_ENABLE);usart_receive_config(USART2,USART_RECEIVE_ENABLE);usart_synchronous_clock_config(USART2,USART_CLEN_NONE,USART_CPH_1CK,USART_CPL_LOW);usart_baudrate_set(USART2,9600);usart_guard_time_config(USART2,0x00);//其他模式失能usart_lin_mode_disable(USART2);usart_halfduplex_disable(USART2);usart_irda_mode_disable(USART2);//开启USART2usart_enable(USART2);gpio_bit_res
2022-04-20 10 -
J-LINK如何支持GD32
本帖最后由ee230于2022-4-1116:13编辑请教版主,以及各位同道中人:开发一款GD32F303的程序,原先电脑有安装j-link5.12版本,但这个版本不支持GD32.现在就想让j-link支持这款GD32,功能包括j-flash,j-link调试(IAR)。大概有2种方法:1.在j-link5.12版本上打个补丁,支持GD322.更新j-link到最新版本(我看segger官方最新的应该支持)方法1是否有解?使用j-link是否有注意的地方?
2022-04-11 19 -
403只有2.0的bsp库了吗,更早版本的库下不到吗?
2.0的库命名太随意,还没有说明
2022-03-08 5 -
新手不会调试IIC
我是一个新手,我IIC程序都编译成功了,DSView捕获波形的时候SDA没有波形,应该是没有往里面写入寄存器地址和数据,如果往地址0x02写入0xaa,不知道怎么往里写入.[img][/img]
2020-09-29 13