OpenEdv-开源电子网

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

stm32mini想实现蓝牙与按键部分同时控制舵机的转动,但出了一些问题

[复制链接]

3

主题

5

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2021-2-9
在线时间
5 小时
发表于 2021-5-28 15:58:13 | 显示全部楼层 |阅读模式
20金钱
stm32mini想实现蓝牙与按键部分同时控制舵机的转动
现在单独使用蓝牙控制舵机或者单独使用按键模块的转动都是正常运转的,但当把按键模块的代码与蓝牙模块的代码相结合时,舵机乱转,或者压根就不转。不知是哪里出现了问题呢?请各位大神帮忙解决一下这个疑惑,非常感激。

图1  蓝牙单独控制舵机的主程序部分#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
extern u8 res;       
       
int main(void)
{               
         int len;
         int t;
int i;         
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        My_USART2_Init();
        TIM1_PWM_Init(199,7199);         //不分频。T为20ms,这样的配置就是为了让输出的PWM信号达到舵机要求的20ms周期。
           while(1)
        {
                        if(res=='1'){TIM_SetCompare2(TIM3,175);delay_ms(1000);}
                        if(res=='2'){TIM_SetCompare2(TIM3,180);delay_ms(1000);}
                        if(res=='3'){TIM_SetCompare2(TIM3,185);delay_ms(1000);}
                        if(res=='4'){TIM_SetCompare2(TIM3,190);delay_ms(1000);}
                        if(res=='5'){TIM_SetCompare2(TIM3,195);delay_ms(1000);}
                       
                        if(res=='A'){TIM_SetCompare3(TIM3,175);delay_ms(1000);}
                        if(res=='B'){TIM_SetCompare3(TIM3,180);delay_ms(1000);}
                        if(res=='C'){TIM_SetCompare3(TIM3,185);delay_ms(1000);}
                        if(res=='D'){TIM_SetCompare3(TIM3,190);delay_ms(1000);}
                        if(res=='E'){TIM_SetCompare3(TIM3,195);delay_ms(1000);}                       
        }         
}

图2 单片机的按键模块单独控制两个舵机转动的主程序部分

#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "usart.h"
#include "stm32f10x.h"
#include "key.h"
#define key1 PCin(5)    //KEY1按键
#define key2 PAin(15)  //KEY0按键
#define key3 PAin(0)  //wk_up按键

u16 cout;
u16 couts;
  int main(void)
{               
          cout=50;
          couts=50;
         KEY_Init();
        delay_init();
         TIM3_PWM_Init(1999,719);
         
while(1)
        {         
       if(key3==0&&key1==0)   //key1??,????????
                         {  
                                 if(key1==0)
                           {  
                                         delay_ms(5);
                             cout+=5; }    }
                  else        if(key3==1&&key1==0)  //key1?key3????,??????
                           {  
                                         delay_ms(5);
                             cout-=5; }
                        if(key3==0&&key2==0)      //key2??,????????
                            {       
                                                        delay_ms(5);
                                couts+=5;}
                        else        if(key3==1&&key2==0)   //key2?key3????,??????
                           {  
                                         delay_ms(5);
                             couts-=5;          
                                 }
                                                                               
              TIM_SetCompare2(TIM3,cout); //PWM??
        TIM_SetCompare3(TIM3,couts);
              delay_ms(50);

                                 
         
}
                         
}



图3、4 按键部分与蓝牙部分相结合(无法实现)
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#define key1 PCin(5)
#define key2 PAin(15)
#define key3 PAin(0)  
extern u8 res;       
int main(void)
{                 
   u16 cout=50;
         u16 couts=50;
        KEY_Init();
        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //éèÖÃNVICÖD¶Ï·Ö×é2:2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
        uart_init(115200);         //′®¿ú3õê¼»ˉÎa115200
        My_USART2_Init();
        TIM1_PWM_Init(199,7199);         //2»·ÖÆμ¡£TÎa20ms£¬ÕaÑùμÄÅäÖþíêÇÎaáËèÃêä3öμ&#196WMDÅoÅ′ïμ½¶æ»úòaÇóμÄ20msÖüÆú¡£
           while(1)
        {
                 if(key3==0&&key1==0)   //key1??,????????
                         {   if(key1==0)
                           {   delay_ms(5);
                             cout+=5; } }
                  else        if(key3==1&&key1==0)  //key1?key3????,??????
                           {   delay_ms(5);
                             cout-=5; }
                        if(key3==0&&key2==0)      //key2??,????????
                            {        delay_ms(5);
                                couts+=5;}
                        else        if(key3==1&&key2==0)   //key2?key3????,??????
                           {  
                                         delay_ms(5);
                             couts-=5;           }                                                       
              TIM_SetCompare2(TIM3,cout); //PWM??
        TIM_SetCompare3(TIM3,couts);
              delay_ms(50);
}
                         
}

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

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-5-31 09:34:06 | 显示全部楼层
你的蓝牙控制是无法让定时器不输出PWM,只有按键通过count减小的方式让定时器比较值减小,你debug一下看看count在按键操作的时候有没有变化
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 05:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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