打印
[技术问答]

NUC029LAN使用PWMB,调用PWM_ConfigOutputChannel后SystemCoreClock变了

[复制链接]
1288|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pidnews|  楼主 | 2020-7-29 14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pidnews 于 2020-7-29 16:48 编辑

NUC029LAN,在NUC029xAN_BSPv3.00.003的PWM基础上修改,那个代码只有PWMA的,在板子上试过正常,但改成PWMB的后,运行发现PWM_ConfigOutputChannel后,发现SystemCoreClock从50M变成了25M多,查PWMB运行调用了SystemCoreClockUpdate();而PWMA不会调用这个,这个bsp是不是有bug
代码如下:在
PWM_ConfigOutputChannel设置断点,停下来的时候SystemCoreClock是50M,
运行完PWM_ConfigOutputChannel,SystemCoreClock就变了;PWM_ConfigOutputChannel是BSP里面的库函数,我就不贴了,另外这个是在BSP samplecode基础上改的,注释没改
void PWM_Init(void)
{
    /* Enable PWM module clock */
    CLK_EnableModuleClock(PWM01_MODULE);
    CLK_EnableModuleClock(PWM23_MODULE);
    CLK_EnableModuleClock(PWM45_MODULE);

    /* Select PWM module clock source */
    CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HCLK, 0);
    CLK_SetModuleClock(PWM23_MODULE, CLK_CLKSEL1_PWM23_S_HCLK, 0);
    CLK_SetModuleClock(PWM45_MODULE, CLK_CLKSEL2_PWM45_S_HCLK, 0);
    /* Reset PWMA channel0~channel3 */
    SYS_ResetModule(PWM03_RST);
    SYS_ResetModule(PWM47_RST);

    SYS->P2_MFP &= ~SYS_MFP_P20_Msk;
    SYS->P2_MFP |= SYS_MFP_P20_PWM0;
    SYS->P2_MFP &= ~SYS_MFP_P21_Msk;
    SYS->P2_MFP |= SYS_MFP_P21_PWM1;
    SYS->P2_MFP &= ~SYS_MFP_P22_Msk;
    SYS->P2_MFP |= SYS_MFP_P22_PWM2;
    SYS->P2_MFP &= ~SYS_MFP_P23_Msk;
    SYS->P2_MFP |= SYS_MFP_P23_PWM3;
    SYS->P2_MFP &= ~SYS_MFP_P24_Msk;
    SYS->P2_MFP |= SYS_MFP_P24_PWM4;

    PWM_ConfigOutputChannel(PWMB, PWM_CH0, 52000, 47);

    PWM_EnableOutput(PWMB, BIT0);
    PWM_Start(PWMB, BIT0);


}

使用特权

评论回复
沙发
gaoyang9992006| | 2020-7-29 16:05 | 只看该作者
你只修改了PWMA到PWMB吗,两组对应不同的通道的。
A对应0123,B对应4567

使用特权

评论回复
板凳
gaoyang9992006| | 2020-7-29 16:05 | 只看该作者
相关的内容要跟着一起修改。不是只修改一个AB,的问题,另外也可能我理解的不对,你可以把你的代码贴出来大家一起研究研究。

使用特权

评论回复
地板
pidnews|  楼主 | 2020-7-29 16:45 | 只看该作者
gaoyang9992006 发表于 2020-7-29 16:05
你只修改了PWMA到PWMB吗,两组对应不同的通道的。
A对应0123,B对应4567

PWM_ConfigOutputChannel这个的参数只需要改A/B就行了,其他的不影响

使用特权

评论回复
5
gaoyang9992006| | 2020-7-29 18:55 | 只看该作者
有点看不懂了,这跟SGE系列的例子貌似不同,我手里的开发板是SGE系列的,跟你这个不一样,,,

使用特权

评论回复
6
gaoyang9992006| | 2020-7-29 19:02 | 只看该作者
楼主,我下载了你的这个BSP,发现你错了,跟我理解的不同。
PWMA对应通道0到3,PWMB对应通道4到7
你这个虽然使用了PWMB,但是通道你没有修改。

使用特权

评论回复
7
gaoyang9992006| | 2020-7-29 19:05 | 只看该作者
不过我这里说的不够准确,实际上通道他们分了两组,每组都是0到3
所以你配置函数是对的

    PWM_EnableOutput(PWMB, BIT0);
    PWM_Start(PWMB, BIT0);
这两个应该是错的
例如
    // Enable output of all PWMA channels
    PWM_EnableOutput(PWMA, 0xF);
表示PWM0到PWM3
而你用B组,则需要对应PWM4到PWM7
例如
    PWM_EnableOutput(PWMB, 0xF0);

使用特权

评论回复
8
gaoyang9992006| | 2020-7-29 19:06 | 只看该作者
    而PWM0到PWM3是
// Start
    PWM_Start(PWMA, 0xF);
则PWMB使用PWM4到PWM7需要
    PWM_Start(PWMB, 0xF0);

使用特权

评论回复
9
gaoyang9992006| | 2020-7-29 19:06 | 只看该作者
你试试这么修改可以不。

使用特权

评论回复
10
幸福小强| | 2020-7-29 20:12 | 只看该作者
楼上版主说的问题确实楼主存在。修改一下看看。

使用特权

评论回复
11
pidnews|  楼主 | 2020-7-31 10:12 | 只看该作者
gaoyang9992006 发表于 2020-7-29 19:06
而PWM0到PWM3是
// Start
    PWM_Start(PWMA, 0xF);

谢谢回复,确实是这个问题,

使用特权

评论回复
12
gaoyang9992006| | 2020-7-31 10:35 | 只看该作者
pidnews 发表于 2020-7-31 10:12
谢谢回复,确实是这个问题,

记得给我点个赞啊,打赏就不用了,O(∩_∩)O哈哈~,不要吝惜你的点赞。

使用特权

评论回复
13
huangcunxiake| | 2020-8-2 15:46 | 只看该作者
原来如此。

使用特权

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

本版积分规则

16

主题

56

帖子

0

粉丝