本帖最后由 tomzbj 于 2024-12-18 11:32 编辑
解决了, SOF信号的频率应该是1kHz
修改如下
rcu_periph_clock_enable (RCU_CTC);
ctc_refsource_prescaler_config (CTC_REFSOURCE_PSC_OFF);
ctc_refsource_signal_select (CTC_REFSOURCE_USB_SOF);
ctc_refsource_polarity_config (CTC_REFSOURCE_POLARITY_FALLING);
ctc_hardware_trim_mode_config (CTC_HARDWARE_TRIM_MODE_ENABLE);
ctc_counter_reload_value_config(47999);
ctc_clock_limit_value_config(2); // 这里用1的话得很久才能校准成功, 2就快多了, 似乎也不影响通讯
ctc_counter_enable();
while(1) {
if(RESET == ctc_flag_get(CTC_FLAG_CKOK)) {
printf("CTC Syncing... %d %d %d\n",
ctc_counter_capture_value_read(), ctc_irc48m_trim_value_read(),
ctc_counter_direction_read());
_delay_ms_loop(100);
}
else {
printf("CTC Sync done!\n");
break;
}
以及, 上面这个ctc_config的调用位置应该在 usbd_connect(&usbd_cdc); 这一行之后.
|