打印
[技术问答]

CLK_SetModuleClock 函数导致代码无法正常运行

[复制链接]
339|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerantone|  楼主 | 2021-5-13 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
库函数 为 : Mini51DE_Series_BSP_CMSIS_v3.02.001
使用的 mcu 为  MINI51ZDE
上传不了 图片  就纯手打吧
    //选择 外设 的 时钟源 和 分频         
    CLK_SetModuleClock(UART_MODULE,CLK_CLKSEL1_UART_S_IRC22M,CLK_CLKDIV_UART(1));//串口
    CLK_SetModuleClock(TMR0_MODULE,CLK_CLKSEL1_TMR0_S_IRC22M,0);//定时器0
    CLK_SetModuleClock(TMR1_MODULE,CLK_CLKSEL1_TMR1_S_IRC22M,0);//定时器1
    CLK_SetModuleClock(PWM01_MODULE,CLK_CLKSEL1_PWM01_S_HCLK,0);//pwm0和1  
    CLK_SetModuleClock(ADC_MODULE,CLK_CLKSEL1_ADC_S_IRC22M,CLK_CLKDIV_ADC(1));//ADC


上面是代码  看示例代码中 是选择外设时钟源的
我使用了 串口和 adc   但是无法打印和adc采集
将这段代码 注释后  可以正常打印和adc采集  
使用的 是内部 22m

//           CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk; //清空 usart 时钟源位
//        CLK->CLKSEL1 |= CLK_CLKSEL1_UART_S_IRC22M;// 设置 时钟源为 内部 22m
或者 我自己直接写 寄存器也是 可以的   
但是  使用 库函数  就直接挂掉  
所以 库函数 CLK_SetModuleClock  到底 做了什么操作呢
求解答  谢谢

使用特权

评论回复
沙发
powerantone|  楼主 | 2021-5-13 15:05 | 只看该作者

SYS_UnlockReg();  //解锁


    CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);


    CLK_WaitClockReady(CLK_CLKSTATUS_IRC22M_STB_Msk);

    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_IRC22M,CLK_CLKDIV_HCLK(1));

    CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLK_S_IRC22M_DIV2);


    // 使能外设 时钟

    CLK_EnableModuleClock(UART_MODULE);//串口

    CLK_EnableModuleClock(TMR0_MODULE);//定时器0

    CLK_EnableModuleClock(TMR1_MODULE);//定时器1

    CLK_EnableModuleClock(PWM01_MODULE);//pwm0和1

    CLK_EnableModuleClock(ADC_MODULE);//ADC





    //选择 外设 的 时钟源 和 分频            库函数  不知道操作了什么 无法使用

//    CLK_SetModuleClock(UART_MODULE,CLK_CLKSEL1_UART_S_IRC22M,CLK_CLKDIV_UART(1));//串口

//    CLK_SetModuleClock(TMR0_MODULE,CLK_CLKSEL1_TMR0_S_IRC22M,0);//定时器0

//    CLK_SetModuleClock(TMR1_MODULE,CLK_CLKSEL1_TMR1_S_IRC22M,0);//定时器1

//    CLK_SetModuleClock(PWM01_MODULE,CLK_CLKSEL1_PWM01_S_HCLK,0);//pwm0和1

//    CLK_SetModuleClock(ADC_MODULE,CLK_CLKSEL1_ADC_S_IRC22M,CLK_CLKDIV_ADC(1));//ADC


    /* Update System Core Clock */

    /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */

    SystemCoreClockUpdate();



    //io口 复用


    SYS->P0_MFP =  SYS_MFP_P00_TXD | SYS_MFP_P01_RXD;//端口 复用  p0_0  p0_1 为 tx rx


    SYS->P1_MFP = SYS_MFP_P13_AIN3 | SYS_MFP_P14_AIN4 ;   //端口 复用  p1_4  ad采样 1  3

    GPIO_DISABLE_DIGITAL_PATH(P1, ~GPIO_OFFD_OFFD_Msk|BIT4 |BIT3);         


    SYS_LockReg();//上锁


使用特权

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

本版积分规则

410

主题

1457

帖子

4

粉丝