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);
             }
      }
   }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
NbwBible
1楼-- · 2019-07-21 02:35
 精彩回答 2  元偷偷看……
a496298685
2楼-- · 2019-07-21 07:04
NbwBible 发表于 2018-2-10 13:18
新人请教一下,我昨天板子刚到手,送的光盘里面的教程说,目前f767还不能用串口下载程序,只能是用仿真器 ...

一派胡言,这是他支持的所有Bootloader下载方式。包括CAN、UART、USBdfu、SPI、I2C。

TIM截图20180210132137.png
TIM截图20180210132156.png
TIM截图20180210132214.png
NbwBible
3楼-- · 2019-07-21 10:54
a496298685 发表于 2018-2-10 13:26
一派胡言,这是他支持的所有Bootloader下载方式。包括CAN、UART、USBdfu、SPI、I2C。

也就是说不用stlink仿真器也可以烧录程序是吗?如果可以的话可否指点一下该怎么操作?
天人一口12
4楼-- · 2019-07-21 14:56
 精彩回答 2  元偷偷看……
NbwBible
5楼-- · 2019-07-21 18:22
天人一口12 发表于 2018-2-10 14:38
没办法用串口下吧,用stlink下程序,用串口调串口助手

额…楼主你是用的仿真器下载的嘛?
天人一口12
6楼-- · 2019-07-21 23:04
NbwBible 发表于 2018-2-10 14:43
额…楼主你是用的仿真器下载的嘛?

是用仿真器下载的

一周热门 更多>