打印
[技术问答]

HK32F103RE,ADC时钟配置问题

[复制链接]
754|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yxy633|  楼主 | 2021-2-18 15:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HK32F103RE的系统时钟设置成最大的120MHz,PCLK2也配置成120MHz,手册里ADC输入时钟不能超过14M,那么设置8分频也有15M,超过了
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
看到RCC_CFGR3寄存器可以配置成10分频的,但是ST和HK库函数里没这个寄存器,能不能更新下,难道还要自己写,还是15M超一点也是能用的



使用特权

评论回复

相关帖子

沙发
单片小菜| | 2021-2-18 18:23 | 只看该作者
可以参考STM32F系列单片机的库文件进行书写,就可以了。

使用特权

评论回复
板凳
数据采集存储| | 2021-2-19 18:36 | 只看该作者
感谢楼主的分享,我认为直接按照ST的进行配置就可以了。

使用特权

评论回复
地板
yiyigirl2014| | 2021-2-22 20:27 | 只看该作者
可以试着解决。

使用特权

评论回复
5
看别人照片| | 2021-2-23 17:35 | 只看该作者
ST的库文件就可以进行设置的,直接可以使用的。

使用特权

评论回复
6
单片小菜| | 2021-2-24 08:08 | 只看该作者
楼主搞定了吗?

使用特权

评论回复
7
别看我照片| | 2021-2-24 08:30 | 只看该作者
可以试着二楼的方式解决一下的。

使用特权

评论回复
8
真爱吴迪迪| | 2021-2-24 08:47 | 只看该作者
感谢楼主的分享,还需要自己好好看看自己的代码,更加直观一些吧。

使用特权

评论回复
9
xixi2017| | 2021-2-24 15:58 | 只看该作者
能用就好,官方例子肯定有库函数吧,看看函数里有没有这方面操作的

使用特权

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

void ADC1_CLK_DIV(uint32_t RCC_PCLK2)
{
    //自定义RCC寄存器
    typedef         struct
    {
        __IO uint32_t CR;
        __IO uint32_t CFGR;
        __IO uint32_t CIR;
        __IO uint32_t APB2RSTR;
        __IO uint32_t APB1RSTR;
        __IO uint32_t AHBENR;
        __IO uint32_t APB2ENR;
        __IO uint32_t APB1ENR;
        __IO uint32_t BDCR;                        //0x20
        __IO uint32_t CSR;                        //0x24
        __IO uint32_t reserved1;//0x28
        __IO uint32_t CFGR2;                //0x2C        HK32F103新增
        __IO uint32_t CFGR3;                //0x30        HK32F103新增
    } RCC_Register;
               
     __IO RCC_Register* rcc_register =(RCC_Register*) RCC;
               
                //2-8分频
    if(IS_RCC_ADCCLK(RCC_PCLK2))
    {
        RCC_ADCCLKConfig(RCC_PCLK2);
    }
                //10-20分频
    if(IS_RCC_ADC1_CLK(RCC_PCLK2))
    {
                                //写CFGR3的ADC1SW位配置ADC1时钟分频
        rcc_register->CFGR3 &= 0xFF8FFFFF;//清空位22:20 ADC1SW
        rcc_register->CFGR3 |= RCC_PCLK2;//22:20 ADC1SW置RCC_PCLK2
                       
    }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝