搜索

[技术问答] HK32F103RE,ADC时钟配置问题

[复制链接]
77|9
 楼主 | 2021-2-18 15:40 | 显示全部楼层 |阅读模式
HK32F103RE的系统时钟设置成最大的120MHz,PCLK2也配置成120MHz,手册里ADC输入时钟不能超过14M,那么设置8分频也有15M,超过了
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
看到RCC_CFGR3寄存器可以配置成10分频的,但是ST和HK库函数里没这个寄存器,能不能更新下,难道还要自己写,还是15M超一点也是能用的
51865602e190b70965.png


使用特权

评论回复
| 2021-2-18 18:23 | 显示全部楼层
可以参考STM32F系列单片机的库文件进行书写,就可以了。

使用特权

评论回复
| 2021-2-19 18:36 | 显示全部楼层
感谢楼主的分享,我认为直接按照ST的进行配置就可以了。

使用特权

评论回复
| 2021-2-22 20:27 | 显示全部楼层
可以试着解决。

使用特权

评论回复
| 2021-2-23 17:35 | 显示全部楼层
ST的库文件就可以进行设置的,直接可以使用的。

使用特权

评论回复
| 2021-2-24 08:08 | 显示全部楼层
楼主搞定了吗?

使用特权

评论回复
| 2021-2-24 08:30 | 显示全部楼层
可以试着二楼的方式解决一下的。

使用特权

评论回复
| 2021-2-24 08:47 | 显示全部楼层
感谢楼主的分享,还需要自己好好看看自己的代码,更加直观一些吧。

使用特权

评论回复
| 2021-2-24 15:58 | 显示全部楼层
能用就好,官方例子肯定有库函数吧,看看函数里有没有这方面操作的

使用特权

评论回复
 楼主 | 2021-2-26 17:49 | 显示全部楼层
这是HK32F1新增的寄存器,就是官方的库里没有才来问的,不过已经写好了,有需要的可以看下
  1. /*********ADC时钟 分频因子 *************************************************/
  2. #define RCC_PCLK2_Div10                   ((uint32_t)0x00100000)
  3. #define RCC_PCLK2_Div12                   ((uint32_t)0x00200000)
  4. #define RCC_PCLK2_Div14                   ((uint32_t)0x00300000)
  5. #define RCC_PCLK2_Div16                   ((uint32_t)0x00400000)
  6. #define RCC_PCLK2_Div20                   ((uint32_t)0x00500000)
  7. #define IS_RCC_ADC1_CLK(ADCCLK) (((ADCCLK) == RCC_PCLK2_Div10) || ((ADCCLK) == RCC_PCLK2_Div12) || \
  8.                                                                                                                                 ((ADCCLK) == RCC_PCLK2_Div14) || ((ADCCLK) == RCC_PCLK2_Div16) || \
  9.                                                                                                                                 ((ADCCLK) == RCC_PCLK2_Div20))
  10. /*******************************************************************************
  11. * Function Name  : ADC1_CLK_DIV
  12. * Description    : ADC1时钟分频 ADC时钟不能超过14M,120/10=12M
  13. * Input          :   *     [url=home.php?mod=space&uid=2817080]@ARG[/url] RCC_PCLK2_Div2: ADC clock = PCLK2/2
  14.                                                                                  *     @arg RCC_PCLK2_Div4: ADC clock = PCLK2/4
  15.                                                                                  *     @arg RCC_PCLK2_Div6: ADC clock = PCLK2/6
  16.                                                                                  *     @arg RCC_PCLK2_Div8: ADC clock = PCLK2/8
  17.                                                                                  *     @arg RCC_PCLK2_Div10: ADC clock = PCLK2/10
  18.                                                                                  *     @arg RCC_PCLK2_Div12: ADC clock = PCLK2/12
  19.                                                                                  *     @arg RCC_PCLK2_Div14: ADC clock = PCLK2/14
  20.                                                                                  *     @arg RCC_PCLK2_Div16: ADC clock = PCLK2/16
  21.                                                                                  *     @arg RCC_PCLK2_Div20: ADC clock = PCLK2/20
  22. * Output         : None
  23. * Return         : None
  24. *******************************************************************************/

  25. void ADC1_CLK_DIV(uint32_t RCC_PCLK2)
  26. {
  27.     //自定义RCC寄存器
  28.     typedef         struct
  29.     {
  30.         __IO uint32_t CR;
  31.         __IO uint32_t CFGR;
  32.         __IO uint32_t CIR;
  33.         __IO uint32_t APB2RSTR;
  34.         __IO uint32_t APB1RSTR;
  35.         __IO uint32_t AHBENR;
  36.         __IO uint32_t APB2ENR;
  37.         __IO uint32_t APB1ENR;
  38.         __IO uint32_t BDCR;                        //0x20
  39.         __IO uint32_t CSR;                        //0x24
  40.         __IO uint32_t reserved1;//0x28
  41.         __IO uint32_t CFGR2;                //0x2C        HK32F103新增
  42.         __IO uint32_t CFGR3;                //0x30        HK32F103新增
  43.     } RCC_Register;
  44.                
  45.      __IO RCC_Register* rcc_register =(RCC_Register*) RCC;
  46.                
  47.                 //2-8分频
  48.     if(IS_RCC_ADCCLK(RCC_PCLK2))
  49.     {
  50.         RCC_ADCCLKConfig(RCC_PCLK2);
  51.     }
  52.                 //10-20分频
  53.     if(IS_RCC_ADC1_CLK(RCC_PCLK2))
  54.     {
  55.                                 //写CFGR3的ADC1SW位配置ADC1时钟分频
  56.         rcc_register->CFGR3 &= 0xFF8FFFFF;//清空位22:20 ADC1SW
  57.         rcc_register->CFGR3 |= RCC_PCLK2;//22:20 ADC1SW置RCC_PCLK2
  58.                        
  59.     }
  60. }
复制代码

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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