F767串口程序求助!更改了原子的串口例程,可以通过串口助手控制灯的开关,但是有一个问题,不知道怎么解决!

2019-07-20 09:22发布

本帖最后由 天人一口12 于 2018-2-4 15:31 编辑

先说一下我的思路,为了方便看到效果,所以选择控制IO口是开发板上带的两个灯对应的IO口。PB0口对应的灯是的亮灭是我定义的数组里面的数字来决定的,而且我需要的是这个数组一直传输数据,所以把传输数组的那行代码放到了一个while(1)循环之中,但是我又需要在一定的情况下结束这个while(1)循环,所以在里面加了一个判断if语句,接了一个break,而问题就出在这里。我想要通过串口来实现while循环的结束,但是我在串口助手里面发送指令的时候,并没有实现while的结束循环,灯PB0还是一直亮灭,由于循环结束不了,所以我通过串口助手发其他的指令也没办法直接控制另一个灯PB1的状态。u32 SendBuffer[10]={0x00000,0x00000,0x00000,0x00000,0x00000,
                                0xFFFFF,0xFFFFF,0xFFFFF,0xFFFFF,0xFFFFF                                                                           
                               };//y为0

void Sendxy(u32 *p,u32 s_long);

void Sendxy(u32 *p,u32 s_long)
{
                  u32 i,j,tempx,datax;
                 for(i=0;i<s_long;i++)
         {
                 datax=*(p+i);
                 for(j=0;j<20;j++)
               {
                    tempx=(datax<<j)&0x80000;
                        
              if(tempx)                                                 //传输1
             {
                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);  //传输1时
              delay_ms(1);
             }                                                    //
            else                                                 //
            {
                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);  //传输0
                delay_ms(1);
             }
            }

        }
      }

int main(void)
{
       Cache_Enable();                 //打开L1-Cache
          HAL_Init();                                        //初始化HAL库
        Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
       delay_init(216);                //延时初始化
       uart_init(115200);                        //串口初始化
      LED_Init();                     //初始化LED
     while(1)
     {
       if(USART_RX_STA&0x8000)
        {
          if(aRxBuffer[0]=='0')
         {
                 USART_RX_STA=0;
                  while(1)
               {
                  Sendxy(SendBuffer,10);   //闪烁
                  if(aRxBuffer[0]=='B')        
                  break;        

                // HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);//也试过用这一行代码代替break,结果是串口助手发B,灯PB1没有亮
                 }
            }
          if(aRxBuffer[0]=='1')
             {
              HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
             HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
              }
              if(aRxBuffer[0]=='2')
                  {
                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
             }
      }
   }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。