PA11引脚同时被CAN0_RX和TIMER0_CH3复用,造成信号干扰。
问题:屏蔽TIMER0_CH3功能会影响PA11的复用功能配置
方案1:更换CAN引脚
// 使用PB8, PB9作为CAN0引脚
gpio_pin_remap_config(GPIO_CAN0_FULL_REMAP, ENABLE); // 完全重映射
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8); // CAN0_RX
gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_9); // CAN0_TX
方案2:使用CAN1替代
如果PB8,PB9不可用,可以使用CAN1
// CAN1使用PB12, PB13
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12); // CAN1_RX
gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_13); // CAN1_TX
方案3:保持当前配置但优化同步触发
如果必须使用PA11,PA12,需要确保TIMER3与TIMER0正确同步
// TIMER0作为主定时器
timer_master_output_trigger_source_select(TIMER0, TIMER_TRI_OUT_SRC_UPDATE);
timer_primary_output_config(TIMER0, ENABLE);
// TIMER3作为从定时器,与TIMER0同步
timer_slave_mode_select(TIMER3, TIMER_SLAVE_MODE_EXTERNAL0);
timer_input_trigger_source_select(TIMER3, TIMER_SMCFG_TRGSEL_ITI0);
// 确保TIMER3的CH3配置正确用于ADC触发
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
timer_channel_output_config(TIMER3, TIMER_CH_3, &timer_ocintpara);
// ADC配置使用TIMER3_CH3作为触发源
adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXT_TRIG_REGULAR_T3_CH3);
建议项目开始就制作一个引脚功能分配表,避免类似冲突。GD32E508RE的引脚复用功能比较丰富,通常可以找到不冲突的配置方案。
|