[DemoCode下载] M471写个呼吸灯

[复制链接]
2256|7
 楼主| xuanhuanzi 发表于 2021-9-8 22:04 | 显示全部楼层 |阅读模式
呼吸灯就是慢慢的亮,慢慢的灭,如此循环像出气一样。。。。
这里用库函数说,就是要设置PWM,然后启动它,定时的修改占空比。
  1. #include"NuMicro.h"
  2. #include<stdio.h>




  3. void SYS_Init(void)
  4. {
  5.     /*---------------------------------------------------------------------------------------------------------*/
  6.     /* Init System Clock                                                                                       */
  7.     /*---------------------------------------------------------------------------------------------------------*/
  8.     /* Unlock protected registers */
  9.     SYS_UnlockReg();

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

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

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

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

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

  20.     /* Enable UART clock */
  21.     CLK_EnableModuleClock(UART0_MODULE);
  22.     /* Enable EPWM1 module clock */
  23.     CLK_EnableModuleClock(EPWM1_MODULE);
  24.                
  25.                
  26.     /* Select UART clock source from HIRC */
  27.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));

  28.     /*---------------------------------------------------------------------------------------------------------*/
  29.     /* EPWM clock frequency configuration                                                                      */
  30.     /*---------------------------------------------------------------------------------------------------------*/
  31.     CLK_SetModuleClock(EPWM1_MODULE, CLK_CLKSEL2_EPWM1SEL_PCLK1, 0);

  32.                 CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HIRC_DIV2);

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



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

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


  40. /* Lock protected registers */
  41.     SYS_LockReg();
  42. }


  43. int main(void)
  44. {
  45.                 int i=0;

  46.                 SYS_Init();

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

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

  54.         while(1)
  55.         {
  56.                 for(i=0;i<100;i++)
  57.                 {
  58.                         EPWM_ConfigOutputChannel(EPWM1, 1, 50000,i);
  59.                         CLK_SysTickDelay(10000);
  60.                 }
  61.                 for(i=100;i>0;i--)
  62.                 {
  63.                         EPWM_ConfigOutputChannel(EPWM1, 1, 50000, i);
  64.                         CLK_SysTickDelay(10000);
  65.                 }
  66.         }
  67.        
  68.        

  69. }


 楼主| xuanhuanzi 发表于 2021-9-8 22:06 | 显示全部楼层
我用的板子是开发板,上面有个LED在PB14管脚。EPWM1_CH1
294696138c353ef40f.png
因此我们调用库函数配置它
 楼主| 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调整?
tail066 发表于 2021-9-10 13:34 | 显示全部楼层
呼吸灯就是pwm的应用
 楼主| xuanhuanzi 发表于 2021-9-10 16:10 | 显示全部楼层
tail066 发表于 2021-9-10 13:34
呼吸灯就是pwm的应用

是的啊,还行吧。
小明的同学 发表于 2021-9-12 19:31 | 显示全部楼层
整的挺好。
yangjiaxu 发表于 2021-9-12 22:47 | 显示全部楼层
挺好,呼吸灯用PWM做很耐斯
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

2331

帖子

3

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