OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4372|回复: 13

TIM14 PWM输出,为什么我的灯不呼吸啊?

[复制链接]

1

主题

18

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-15
在线时间
11 小时
发表于 2019-8-5 20:00:25 | 显示全部楼层 |阅读模式
1金钱
      超级小白,呼救!!!!!!!!!
      ATK-ESP8266WIFI模块 实验控制LED0呼吸






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-15
在线时间
11 小时
 楼主| 发表于 2019-8-6 12:25:03 | 显示全部楼层

不太会用,所以图片倒过来放了,我再发一次



1.png 2.png 3.png 4.png 5.png




回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-15
在线时间
11 小时
 楼主| 发表于 2019-8-6 12:30:55 | 显示全部楼层
正点原子 发表于 2019-8-6 01:42
问题很多,慢慢找

只能控制LED0开关,不能进行呼吸,这是为什么啊,我搞了半个多月了,现在都还没有搞出来

  1. u8 atk_8266_wifiap_test(void)
  2. {
  3.         u8 data=1;
  4.   u16 num=1;
  5.   static u16 led1pwmval=0;   
  6.   static u8 dir=1;
  7.         u8 netpro=0;        //ÍøÂçģʽ
  8.         u8 key;
  9.         u8 timex=0;
  10.         u8 ipbuf[16];         //IP»º´æ
  11.         u8 *p;
  12.         u16 t=999;                //¼ÓËÙµÚÒ»´Î»ñÈ¡Á´½Ó״̬
  13.         u8 res=0;
  14.         u16 rlen=0;
  15.         u8 constate=0;        //Á¬½Ó״̬
  16.         uart_init(84,115200);                     //´¿Ú³õʼ»¯Îª115200
  17.   LED_Init();                            //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú  
  18.   Stm32_Clock_Init(336,8,2,7);              //ÉèÖÃʱÖÓ,168Mhz
  19.   delay_init(168);               //ÑÓʱ³õʼ»¯   
  20.   TIM14_PWM_Init(500-1,84-1);        //1MhzµÄ¼ÆÊýƵÂÊ,2KhzµÄPWM.
  21.         usart3_init(42,115200);  //´®¿Ú3³õʼ»¯
  22.   TIM3_Int_Init(5000-1,8400-1);
  23.         p=mymalloc(SRAMIN,32);                                                        //ÉêÇë32×Ö½ÚÄÚ´æ
  24. PRESTA:
  25.         netpro=atk_8266_netpro_sel(50,30,(u8*)ATK_ESP8266_CWMODE_TBL[1]);        //Ñ¡ÔñÍøÂçģʽ
  26.         if(netpro&0X02)   //UDP
  27.         {
  28.                                 LCD_Clear(WHITE);
  29.                                 POINT_COLOR=RED;
  30.                                 Show_Str_Mid(0,30,"ATK-ESP WIFI-AP ²âÊÔ",16,240);
  31.                                 Show_Str(30,50,200,16,"ÕýÔÚÅäÖÃATK-ESPÄ£¿é,ÇëÉÔµÈ...",12,0);
  32.                                 if(atk_8266_ip_set("WIFI-AP Ô¶¶ËUDP IPÉèÖÃ",(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA;        //IPÊäÈë
  33.                                 sprintf((char*)p,"AT+CIPSTART="UDP","%s",%s",ipbuf,(u8*)portnum);    //ÅäÖÃÄ¿±êUDP·þÎñÆ÷
  34.                                 atk_8266_send_cmd("AT+CIPMUX=0","OK",100);  //µ¥Á´½Óģʽ
  35.                                 LCD_Clear(WHITE);
  36.                                 while(atk_8266_send_cmd(p,"OK",500));
  37.                        
  38.         }
  39.         else     //TCP
  40.         {
  41.                 if(netpro&0X01)     //TCP Client    ͸´«Ä£Ê½²âÊÔ
  42.                 {
  43.                         LCD_Clear(WHITE);
  44.                         POINT_COLOR=RED;
  45.                         Show_Str_Mid(0,30,"ATK-ESP WIFI-AP ²âÊÔ",16,240);
  46.                         Show_Str(30,50,200,16,"ÕýÔÚÅäÖÃATK-ESPÄ£¿é,ÇëÉÔµÈ...",12,0);
  47.                         if(atk_8266_ip_set("WIFI-AP Ô¶¶ËIPÉèÖÃ",(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA;        //IPÊäÈë
  48.                         atk_8266_send_cmd("AT+CIPMUX=0","OK",20);   //0£ºµ¥Á¬½Ó£¬1£º¶àÁ¬½Ó
  49.                         sprintf((char*)p,"AT+CIPSTART="TCP","%s",%s",ipbuf,(u8*)portnum);    //ÅäÖÃÄ¿±êTCP·þÎñÆ÷
  50.                         while(atk_8266_send_cmd(p,"OK",200))
  51.                         {
  52.                                 LCD_Clear(WHITE);
  53.                                 POINT_COLOR=RED;
  54.                                 Show_Str_Mid(0,40,"WK_UP:·µ»ØÖØÑ¡",16,240);
  55.                                 Show_Str_Mid(0,80,"ATK-ESP Á¬½ÓTCP Serverʧ°Ü",12,240); //Á¬½Óʧ°Ü                 
  56.                                 key=KEY_Scan(0);
  57.                                 if(key==WKUP_PRES)goto PRESTA;
  58.                         }       
  59.                         atk_8266_send_cmd("AT+CIPMODE=1","OK",200);      //´«ÊäģʽΪ£ºÍ¸´«               
  60.                         }
  61.                         else                                        //TCP Server
  62.                         {
  63.                                         LCD_Clear(WHITE);
  64.                                         POINT_COLOR=RED;
  65.                                         Show_Str_Mid(0,30,"ATK-ESP WIFI-AP ²âÊÔ",16,240);
  66.                                         Show_Str(30,50,200,16,"ÕýÔÚÅäÖÃATK-ESPÄ£¿é,ÇëÉÔµÈ...",12,0);
  67.                                         atk_8266_send_cmd("AT+CIPMUX=1","OK",20);   //0£ºµ¥Á¬½Ó£¬1£º¶àÁ¬½Ó
  68.                                         sprintf((char*)p,"AT+CIPSERVER=1,%s",(u8*)portnum);
  69.                                         atk_8266_send_cmd(p,"OK",20);     //¿ªÆôServerģʽ£¬¶Ë¿ÚºÅΪ8086
  70.                         }
  71.         }
  72.                         LCD_Clear(WHITE);
  73.                         POINT_COLOR=RED;
  74.                         Show_Str_Mid(0,30,"ATK-ESP WIFI-AP ²âÊÔ",16,240);
  75.                         Show_Str(30,50,200,16,"ÕýÔÚÅäÖÃATK-ESPÄ£¿é,ÇëÉÔµÈ...",12,0);                       
  76.                         LCD_Fill(30,50,239,50+12,WHITE);                        //Çå³ý֮ǰµÄÏÔʾ
  77.                         Show_Str(30,50,200,16,"ÅäÖÃATK-ESPÄ£¿é³É¹¦!",12,0);
  78.                         delay_ms(200);
  79.                         Show_Str(30,50,200,16,"WK_UP:Í˳ö²âÊÔ  KEY0:·¢ËÍÊý¾Ý",12,0);
  80.                         LCD_Fill(30,80,239,80+12,WHITE);
  81.                         atk_8266_get_wanip(ipbuf);//·þÎñÆ÷ģʽ,»ñÈ¡WAN IP
  82.                         sprintf((char*)p,"IPµØÖ·:%s ¶Ë¿Ú:%s",ipbuf,(u8*)portnum);
  83.                         Show_Str(30,65,200,12,p,12,0);                                //ÏÔʾIPµØÖ·ºÍ¶Ë¿Ú       
  84.                         Show_Str(30,80,200,12,"״̬:",12,0);                 //Á¬½Ó״̬
  85.                         Show_Str(120,80,200,12,"ģʽ:",12,0);                 //Á¬½Ó״̬
  86.                         Show_Str(30,100,200,12,"·¢ËÍÊý¾Ý:",12,0);         //·¢ËÍÊý¾Ý
  87.                         Show_Str(30,115,200,12,"½ÓÊÕÊý¾Ý:",12,0);        //½ÓÊÕÊý¾Ý
  88.                         atk_8266_wificonf_show(30,180,"ÇëÓÃÉ豸Á¬½ÓWIFIÈȵã:",(u8*)wifiap_ssid,(u8*)wifiap_encryption,(u8*)wifiap_password);
  89.                         POINT_COLOR=BLUE;
  90.                         Show_Str(120+30,80,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],12,0);                 //Á¬½Ó״̬
  91.                         USART3_RX_STA=0;
  92.        
  93.                         while(1)
  94.                         {
  95.                                 key=KEY_Scan(0);
  96.                                 if(key==WKUP_PRES)                        //WK_UP Í˳ö²âÊÔ                 
  97.                                 {  
  98.                                         res=0;
  99.                                         atk_8266_quit_trans();        //Í˳ö͸´«
  100.                                         atk_8266_send_cmd("AT+CIPMODE=0","OK",20);   //¹Ø±Õ͸´«Ä£Ê½
  101.                                         break;                                                                                                 
  102.                                 }
  103.                                 else if(key==KEY0_PRES)        //KEY0 ·¢ËÍÊý¾Ý
  104.                                 {
  105.                                
  106.                                         if((netpro==3)||(netpro==2))   //UDP
  107.                                         {
  108.                                                 sprintf((char*)p,"ATK-8266%s²âÊÔ%02d\r\n",ATK_ESP8266_WORKMODE_TBL[netpro],t/10);//²âÊÔÊý¾Ý
  109.                                                 Show_Str(30+54,100,200,12,p,12,0);
  110.                                                 atk_8266_send_cmd("AT+CIPSEND=25","OK",200);  //·¢ËÍÖ¸¶¨³¤¶ÈµÄÊý¾Ý
  111.                                                 delay_ms(200);
  112.                                                 atk_8266_send_data(p,"OK",100);  //·¢ËÍÖ¸¶¨³¤¶ÈµÄÊý¾Ý
  113.                                                 timex=100;
  114.                                         }
  115.                                         else if((netpro==1))   //TCP Client
  116.                                         {
  117.                                                 atk_8266_quit_trans();
  118.                                                 atk_8266_send_cmd("AT+CIPSEND","OK",20);       //¿ªÊ¼Í¸´«
  119.                                                 sprintf((char*)p,"ATK-8266%s²âÊÔ%02d\r\n",ATK_ESP8266_WORKMODE_TBL[netpro],t/10);//²âÊÔÊý¾Ý
  120.                                                 Show_Str(30+54,100,200,12,p,12,0);
  121.                                                 u3_printf("%s",p);
  122.                                                 timex=100;
  123.                                         }
  124.                                         else    //TCP Server
  125.                                         {
  126.                                                 sprintf((char*)p,"ATK-8266%s²âÊÔ%02d\r\n",ATK_ESP8266_WORKMODE_TBL[netpro],t/10);//²âÊÔÊý¾Ý
  127.                                                 Show_Str(30+54,100,200,12,p,12,0);
  128.                                                 atk_8266_send_cmd("AT+CIPSEND=0,25","OK",200);  //·¢ËÍÖ¸¶¨³¤¶ÈµÄÊý¾Ý
  129.                                                 delay_ms(200);
  130.                                                 atk_8266_send_data(p,"OK",100);  //·¢ËÍÖ¸¶¨³¤¶ÈµÄÊý¾Ý
  131.                                                 timex=100;
  132.                                         }
  133.                                 }
  134.                        
  135.               if(timex)timex--;
  136.               if(timex==1)LCD_Fill(30+54,100,239,112,WHITE);
  137.               t++;
  138.               delay_ms(5);
  139.                                
  140.                                         if(t==1000)//Á¬Ðø10ÃëÖÓûÓÐÊÕµ½ÈκÎÊý¾Ý,¼ì²éÁ¬½ÓÊDz»ÊÇ»¹´æÔÚ.
  141.         {
  142.                 constate=atk_8266_consta_check();//µÃµ½Á¬½Ó״̬
  143.                 if(constate=='+')Show_Str(30+30,80,200,12,"Á¬½Ó³É¹¦",12,0);  //Á¬½Ó״̬
  144.                 else Show_Str(30+30,80,200,12,"Á¬½Óʧ°Ü",12,0);                    
  145.                 t=0;
  146.         }
  147.           if((t%20)==0)LED0=!LED0;
  148.                 atk_8266_at_response(1);
  149.        
  150.     while(1)
  151. {                               
  152.               if(USART3_RX_STA&0X8000)                //½ÓÊÕµ½Ò»´ÎÊý¾ÝÁË
  153.     {        
  154.                             rlen=USART3_RX_STA&0x7FFF;                 //µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶
  155.                                         printf("%s",USART3_RX_BUF);        //·¢Ë͵½´®¿Ú   
  156.      for(t=0;t<rlen;t++)
  157.     {
  158.      USART3->DR=USART3_RX_BUF[t];      //·&cent;&Euml;&Iacute;&Ecirc;&yacute;&frac34;&Yacute;
  159.      while((USART3->SR&0X40)==0);     //&micro;&Egrave;&acute;&yacute;·&cent;&Euml;&Iacute;&frac12;á&Ecirc;&oslash;
  160.     }
  161.         data=USART3_RX_BUF[0];          //&micro;&Atilde;&micro;&frac12;&micro;&Uacute;&Ograve;&raquo;&cedil;&ouml;&Ecirc;&yacute;&frac34;&Yacute;
  162.         printf("\r\n\r\n");//&sup2;&aring;&Egrave;&euml;&raquo;&raquo;&ETH;&ETH;
  163.         USART3_RX_STA=0;
  164.   
  165.       
  166.     switch(data)
  167.    {
  168.      case 0x30: num=1;break;        //°&acute;0&sup1;&Oslash;±&Otilde;LDE1
  169.      case 0x31: num=2;break;        //°&acute;1LED1&micro;&Auml;&Aacute;&Aacute;&para;&Egrave;×&icirc;&acute;ó
  170.      case 0x32: num=3;break;        //°&acute;2LED1&iquest;&ordf;&Ecirc;&frac14;&ordm;&ocirc;&Icirc;ü
  171.      case 0x33: num=4;break;        //°&acute;3LED1±&pound;&sup3;&Ouml;&micro;±&Ccedil;°&Aacute;&Aacute;&para;&Egrave;
  172.    
  173.    }
  174.     switch(num)
  175.    {
  176.            
  177.      case 1: LED1_PWM_VAL=0;break;
  178.      case 2: LED1_PWM_VAL=400;break;
  179.      case 3:
  180.                 delay_ms(10);
  181.                 if(dir)led1pwmval++;
  182.                 else led1pwmval--;
  183.                 if(led1pwmval>400)dir=0;
  184.                 if(led1pwmval==0)dir=1;
  185.                 LED1_PWM_VAL=led1pwmval;
  186.                 break;
  187.      case 4:break;
  188.                         
  189.      }
  190.     }
  191.         }
  192. }
  193.                        
  194.         myfree(SRAMIN,p);                //&Ecirc;&Iacute;·&Aring;&Auml;&Uacute;&acute;&aelig;
  195.         return res;       

  196. }







复制代码
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-8-6 01:42:28 | 显示全部楼层
问题很多,慢慢找
回复

使用道具 举报

3

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
1070
注册时间
2018-12-24
在线时间
111 小时
发表于 2019-8-6 08:56:35 | 显示全部楼层
贴出代码看看
回复

使用道具 举报

3

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
1070
注册时间
2018-12-24
在线时间
111 小时
发表于 2019-8-6 09:15:05 | 显示全部楼层
相关代码贴出来看看?
回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-15
在线时间
11 小时
 楼主| 发表于 2019-8-6 12:18:18 | 显示全部楼层

我放在附件里面了

5.png
4.png
3.png
2.png
1.png
回复

使用道具 举报

3

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
1070
注册时间
2018-12-24
在线时间
111 小时
发表于 2019-8-6 14:08:18 | 显示全部楼层
代码一大波罗,不好看,我给你总结下可能出现的原因
(1)定时器PWM通道相应io口跟控制led的io口不匹配(看看芯片手册有没对应)
(2)PWM或者io端口重映射初始化搞错了(检查下初始化代码)
(3)PWM的频率不合适(调整一下定时器的溢出值跟分频)
(4)计算更新pwm比较值时没改到(通过串口打印看看计算值有没有改)
(5)pwm比较值没有改变
最好可以拿个示波器或者逻辑分析仪看看相应io的电平变化对不对
实现还是解决不了可以把工程发给我看看
回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-15
在线时间
11 小时
 楼主| 发表于 2019-8-6 15:22:12 | 显示全部楼层
本帖最后由 18219253139a 于 2019-8-6 15:39 编辑
小灰灰Veni 发表于 2019-8-6 14:08
代码一大波罗,不好看,我给你总结下可能出现的原因
(1)定时器PWM通道相应io口跟控制led的io口不匹配( ...

0.zip (6.2 MB, 下载次数: 2)
回复

使用道具 举报

3

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
1070
注册时间
2018-12-24
在线时间
111 小时
发表于 2019-8-6 16:54:50 | 显示全部楼层
看代码后不太懂你的问题,你是说这里面可以进入1,2进入不了3吗?
case 1: LED1_PWM_VAL=0;break;
case 2: LED1_PWM_VAL=400;break;
case 3:
                delay_ms(10);
                if(dir)led1pwmval++;
                else led1pwmval--;
                if(led1pwmval>400)dir=0;
                if(led1pwmval==0)dir=1;
                LED1_PWM_VAL=led1pwmval;
                break;
case 4:break;
回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-15
在线时间
11 小时
 楼主| 发表于 2019-8-6 17:23:26 | 显示全部楼层
小灰灰Veni 发表于 2019-8-6 16:54
看代码后不太懂你的问题,你是说这里面可以进入1,2进入不了3吗?
case 1: LED1_PWM_VAL=0;break;
case 2: ...

对,就是不能呼吸
回复

使用道具 举报

3

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
1070
注册时间
2018-12-24
在线时间
111 小时
发表于 2019-8-6 17:33:39 | 显示全部楼层
18219253139a 发表于 2019-8-6 17:23
对,就是不能呼吸

把num打印出来看看呗
回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-15
在线时间
11 小时
 楼主| 发表于 2019-8-6 21:16:35 | 显示全部楼层
小灰灰Veni 发表于 2019-8-6 17:33
把num打印出来看看呗

为什么打印num?
我已经快要实现
case 1: LED1_PWM_VAL=0;break;
case 2: LED1_PWM_VAL=400;break;
了,只是实现不了case 3。

大神
还有打印是怎么操作的
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-12-19
在线时间
2 小时
发表于 2019-8-23 23:16:38 | 显示全部楼层
小灰灰Veni 发表于 2019-8-6 14:08
代码一大波罗,不好看,我给你总结下可能出现的原因
(1)定时器PWM通道相应io口跟控制led的io口不匹配( ...

经验的分析,努力参考一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表