24小时热门版块排行榜    

查看: 322  |  回复: 0

ghdnui

铜虫 (小有名气)

[求助] 串口中断接收数据 求助 感谢感谢

我想用串口中断控制舵机机械臂做动作,总的有4个舵机。有几种状态,分别是 默认姿式, 抓东西,放东西 ,回位。

我用的是串口中断来接收数据来控制舵机的角度,ox01对应默认姿式,ox02对应抓东西,ox03对应放东西,ox04对应回位。

但我写的程序有问题,主要就是我发一个指令后舵机有响应,但响应一点点,也就是说我要连发几十次的相同指令才能完整的做写一个动作。我用示波器看过波形,控制舵机的波形只有一闪而过的脉冲。结合我的程序说明在switch中假设是0x01指令,对应的case在执行的时候就被打断了。具体程序如下:哪个高人指点,新人求照。


void NVIC_Configration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQChannel;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}


void USART1_Configuration(void)       
{
       
        USART_InitTypeDef        USART_InitStructure;
        GPIO_InitTypeDef        GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1| RCC_APB2Periph_GPIOA , ENABLE);         //开启串口功能

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                                                          //复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA , &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                                                        //浮空输入
    GPIO_Init(GPIOA , &GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate = 9600;                                                          //波特率为9600
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                        //8位数据长度
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                                //停止位1位
        USART_InitStructure.USART_Parity = USART_Parity_No;                                        //无奇偶校验
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;                //禁用硬件流控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;                 //接收和发送模式
        USART_Init(USART1,&USART_InitStructure);

        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);         //中断方式接收数据
//        USART_ITConfig(USART1, USART_IT_TXE, ENABLE);         //中断方式发送数据
//        USART_ClearFlag(USART1,USART_FLAG_TXE);                          //采用查询方式发送数据
//        USART_ClearFlag(USART1,USART_FLAG_TC);
//        USART_ClearFlag(USART1,USART_FLAG_RXNE);        //采用查询方式接收数据

        USART_Cmd(USART1,ENABLE);                                                                                        //使能串口1
}


void morenweizi(void)
{
         SetJointAngle(0,0);
         SetJointAngle(1,180);
         SetJointAngle(2,-150);
         SetJointAngle(3,-90);

}

void GripperControl(u8 open)
{
        float angle;
        angle=(u16)(249.0+ 6.5 *(float)open);
        TIM_SetCompare4(TIM4,angle);                                          //TIM4和通道4控制机械爪
}

int main(void)
{

        RCC_Configuration();
        TIM_Configuration();
        SysTick_Configuration();
        NVIC_Configration();
        USART1_Configuration();
        SteppingMotor_Config();
        while(1);
       

  }


void USART1_IRQHandler(void)
{       
    if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
    {               
        CommandNowData = USART_ReceiveData(USART1);
                switch(CommandNowData)
                {                 
                         case 0x01:
                         {
                                morenweizi();                //初始姿态
                                USART_ClearFlag(USART1,USART_FLAG_TC);
                                USART_SendData(USART1,0x01);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                       
                                break;
                        }
                        case 0x02:
                         {
                                 GripperControl(100); //抓子打开
                                zhuaidongxi();                 //伸直机械臂
                                USART_SendData(USART1,0x02);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                                break;
                        }
                        case 0x03:
                         {
                                GripperControl(50) //关抓子
                                USART_SendData(USART1,0x03);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                                break;
                        }
                        case 0x04:
                         {
                                huiwei();                //返回等待松抓
                                USART_SendData(USART1,0x04);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                                break;
                        }
                        case 0x05:
                         {
                                GripperControl(100); //放开抓子
                                morenweizi();                //默认
                                USART_SendData(USART1,0x05);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                                break;
                        }
               
                        default:        break;

                        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
                   }
        }
          
}

我尝试过把中断函数里面的switch放在main里面,但效果是一样的,求哪个老大相助。
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 机械臂舵机测试2.rar
  • 2013-11-07 19:45:47, 500.83 K

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 ghdnui 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0854人工智能方向招收调剂 +3 章小鱼567 2026-03-24 3/150 2026-03-24 19:46 by zhouxuan..
[考研] 材料学硕333求调剂 +3 北道巷 2026-03-24 3/150 2026-03-24 19:17 by pswait
[考研] 资源与环境 调剂申请(333分) +7 holy J 2026-03-21 7/350 2026-03-24 17:24 by xiaohai104
[考研] 321求调剂 +4 Ymlll 2026-03-24 4/200 2026-03-24 14:44 by sprinining
[考研] 一志愿华东理工大学081700,初试分数271 +5 kotoko_ik 2026-03-23 6/300 2026-03-24 10:29 by 学术搬砖er
[考研] 344求调剂 +3 desto 2026-03-24 3/150 2026-03-24 10:09 by 搏击518
[考研] 一志愿上海交大生物与医药专硕324分,求调剂 +5 jiajunX 2026-03-22 5/250 2026-03-23 18:07 by YMU施老师
[论文投稿] 急发核心期刊论文 +3 贤达问津 2026-03-23 5/250 2026-03-23 17:13 by 妹子不好惹
[考研] 276求调剂 +3 YNRYG 2026-03-21 4/200 2026-03-23 08:31 by 醉在风里
[考研] 一志愿 西北大学 ,070300化学学硕,总分287,双非一本,求调剂。 +3 晨昏线与星海 2026-03-20 3/150 2026-03-22 16:00 by ColorlessPI
[考博] 招收博士1-2人 +3 QGZDSYS 2026-03-18 4/200 2026-03-22 10:25 by QGZDSYS
[考研] 材料求调剂 +5 @taotao 2026-03-21 5/250 2026-03-21 20:55 by lbsjt
[考研] 材料与化工(0856)304求B区调剂 +3 邱gl 2026-03-20 7/350 2026-03-21 19:05 by 15709483992
[考研] 279求调剂 +5 红衣隐官 2026-03-21 5/250 2026-03-21 14:59 by lature00
[考研] 304求调剂 +7 司空. 2026-03-18 7/350 2026-03-20 23:08 by JourneyLucky
[考研] 329求调剂 +9 想上学吖吖 2026-03-19 9/450 2026-03-20 22:01 by luoyongfeng
[考研] 295复试调剂 +8 简木ChuFront 2026-03-19 8/400 2026-03-20 20:44 by zhukairuo
[考研] 一志愿南理工085701环境302求调剂院校 +3 葵梓卫队 2026-03-20 3/150 2026-03-20 19:28 by zhukairuo
[考研] 招收调剂硕士 +4 lidianxing 2026-03-19 12/600 2026-03-20 12:25 by lidianxing
[考研] 320求调剂0856 +3 不想起名字112 2026-03-19 3/150 2026-03-19 22:53 by 学员8dgXkO
信息提示
请填处理意见