本帖最后由 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); 这一行之后.
|