打印
[DemoCode下载]

M471写个呼吸灯

[复制链接]
2085|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呼吸灯就是慢慢的亮,慢慢的灭,如此循环像出气一样。。。。
这里用库函数说,就是要设置PWM,然后启动它,定时的修改占空比。
#include"NuMicro.h"
#include<stdio.h>




void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Set XT1_OUT(PF.2) and XT1_IN(PF.3) to input mode */
    PF->MODE &= ~(GPIO_MODE_MODE2_Msk | GPIO_MODE_MODE3_Msk);

    /* Enable HIRC clock (Internal RC 48 MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

    /* Wait for HIRC clock ready */
    CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

    /* Set core clock as 96MHz from PLL */
    CLK_SetCoreClock(FREQ_96MHZ);

    /* Set PCLK0/PCLK1 to HCLK/2 */
    CLK->PCLKDIV = (CLK_PCLKDIV_APB0DIV_DIV2 | CLK_PCLKDIV_APB1DIV_DIV2);

    /* Enable UART clock */
    CLK_EnableModuleClock(UART0_MODULE);
    /* Enable EPWM1 module clock */
    CLK_EnableModuleClock(EPWM1_MODULE);
               
               
    /* Select UART clock source from HIRC */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));

    /*---------------------------------------------------------------------------------------------------------*/
    /* EPWM clock frequency configuration                                                                      */
    /*---------------------------------------------------------------------------------------------------------*/
    CLK_SetModuleClock(EPWM1_MODULE, CLK_CLKSEL2_EPWM1SEL_PCLK1, 0);

                CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HIRC_DIV2);

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
    SystemCoreClockUpdate();



    /* Set GPB multi-function pins for UART0 RXD and TXD */
    SYS->GPB_MFPH = (SYS->GPB_MFPH & ~(SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk))    |       \
                    (SYS_GPB_MFPH_PB12MFP_UART0_RXD | SYS_GPB_MFPH_PB13MFP_UART0_TXD);

                SYS->GPB_MFPH=(SYS->GPB_MFPH&(~SYS_GPB_MFPH_PB14MFP_Msk))|SYS_GPB_MFPH_PB14MFP_EPWM1_CH1;


/* Lock protected registers */
    SYS_LockReg();
}


int main(void)
{
                int i=0;

                SYS_Init();

                UART_Open(UART0, 115200);
                printf("Hello World\n");
       
            /* Enable output of BPWM1 channel 0~5 */
    EPWM_EnableOutput(EPWM1, BIT1);

    /* Start BPWM1 counter */
    EPWM_Start(EPWM1, BIT1);

        while(1)
        {
                for(i=0;i<100;i++)
                {
                        EPWM_ConfigOutputChannel(EPWM1, 1, 50000,i);
                        CLK_SysTickDelay(10000);
                }
                for(i=100;i>0;i--)
                {
                        EPWM_ConfigOutputChannel(EPWM1, 1, 50000, i);
                        CLK_SysTickDelay(10000);
                }
        }
       
       

}


使用特权

评论回复
沙发
xuanhuanzi|  楼主 | 2021-9-8 22:06 | 只看该作者
我用的板子是开发板,上面有个LED在PB14管脚。EPWM1_CH1

因此我们调用库函数配置它

使用特权

评论回复
板凳
xuanhuanzi|  楼主 | 2021-9-8 22:08 | 只看该作者
SYS->GPB_MFPH=(SYS->GPB_MFPH&(~SYS_GPB_MFPH_PB14MFP_Msk))|SYS_GPB_MFPH_PB14MFP_EPWM1_CH1;
参考例子通过这句实现管脚的PWM功能选择
然后就是调用库函数了,使能模块的时钟与时钟源设置。
使能输出开始,然后就是定时修改占空比。

使用特权

评论回复
地板
xuanhuanzi|  楼主 | 2021-9-9 08:40 | 只看该作者
有人说要搞伽马校正,我试了,效果不明显,主要是库函数只能占空比1%的步长调整,新手,官方的BSP没提供寄存器操作的例子,怎么可以16BIT调整?

使用特权

评论回复
5
tail066| | 2021-9-10 13:34 | 只看该作者
呼吸灯就是pwm的应用

使用特权

评论回复
6
xuanhuanzi|  楼主 | 2021-9-10 16:10 | 只看该作者
tail066 发表于 2021-9-10 13:34
呼吸灯就是pwm的应用

是的啊,还行吧。

使用特权

评论回复
7
小明的同学| | 2021-9-12 19:31 | 只看该作者
整的挺好。

使用特权

评论回复
8
yangjiaxu| | 2021-9-12 22:47 | 只看该作者
挺好,呼吸灯用PWM做很耐斯

使用特权

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

本版积分规则

173

主题

2211

帖子

3

粉丝