[求教] 有没有成功用USB的SOF校准CTC实现USB免晶振的?

[复制链接]
2190|3
 楼主| tomzbj 发表于 2024-12-18 11:08 | 显示全部楼层 |阅读模式
网上找不到例子, 官方包里只有CTC_GPIO和CTC_LXTAL, 没有用USB_SOF的. 自己改了一下,

  1.   rcu_periph_clock_enable (RCU_CTC);
  2.   ctc_refsource_prescaler_config (CTC_REFSOURCE_PSC_DIV128);
  3.   ctc_refsource_signal_select (CTC_REFSOURCE_USB_SOF);
  4.   ctc_refsource_polarity_config (CTC_REFSOURCE_POLARITY_FALLING);
  5.   ctc_hardware_trim_mode_config (CTC_HARDWARE_TRIM_MODE_ENABLE);
  6.   ctc_counter_reload_value_config(127);
  7.   ctc_clock_limit_value_config(2);
  8.   ctc_counter_enable();


结果一直也不成功.

哪位配成过的介绍一下?
 楼主| tomzbj 发表于 2024-12-18 11:31 | 显示全部楼层
本帖最后由 tomzbj 于 2024-12-18 11:32 编辑

解决了, SOF信号的频率应该是1kHz
修改如下
  1. rcu_periph_clock_enable (RCU_CTC);
  2.   ctc_refsource_prescaler_config (CTC_REFSOURCE_PSC_OFF);
  3.   ctc_refsource_signal_select (CTC_REFSOURCE_USB_SOF);
  4.   ctc_refsource_polarity_config (CTC_REFSOURCE_POLARITY_FALLING);
  5.   ctc_hardware_trim_mode_config (CTC_HARDWARE_TRIM_MODE_ENABLE);
  6.   ctc_counter_reload_value_config(47999);
  7.   ctc_clock_limit_value_config(2);  // 这里用1的话得很久才能校准成功, 2就快多了, 似乎也不影响通讯
  8.   ctc_counter_enable();

  9.   while(1) {
  10.     if(RESET == ctc_flag_get(CTC_FLAG_CKOK)) {
  11.       printf("CTC Syncing... %d %d %d\n",
  12.         ctc_counter_capture_value_read(), ctc_irc48m_trim_value_read(),
  13.         ctc_counter_direction_read());
  14.       _delay_ms_loop(100);
  15.     }
  16.     else {
  17.       printf("CTC Sync done!\n");
  18.       break;
  19.     }
以及, 上面这个ctc_config的调用位置应该在  usbd_connect(&usbd_cdc); 这一行之后.
xionghaoyun 发表于 2024-12-18 17:19 | 显示全部楼层
学习一下
Amazingxixixi 发表于 2024-12-27 15:40 | 显示全部楼层
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

86

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部