USART6卡死在USART_GetFlagStatus语句

2019-07-20 07:58发布

我用的原子哥的USART2的485程序修改为USART6的485程序,可是程序执行时,卡死在while(USART_GetFlagStatus(USART6,USART_FLAG_TXE)==RESET); 请问各位老师们,到底是什么原因呢?非常感谢。
下面贴的程序,一个是发送数据的子程序,一个是USART6口设置的子程序,就卡死在发送数据子程序的“while(USART_GetFlagStatus(USART6,USART_FLAG_TXE)==RESET)”语句。
再次非常感谢。



void RS485_1_Send_Data(u8 *buf,u8 len)
{
        u8 t;
        RS485_1_TX_EN=1;                        //éèÖÃÎa·¢ËíÄ£ê½
  for(t=0;t<len;t++)                //&#209;-&#187;··¢&#203;íêy&#190;Y
        {
          while(USART_GetFlagStatus(USART6,USART_FLAG_TXE)==RESET); //μè′y·¢&#203;í&#189;áê&#248;               
    USART_SendData(USART6,buf[t]); //·¢&#203;íêy&#190;Y
        }         
        while(USART_GetFlagStatus(USART6,USART_FLAG_TC)==RESET); //μè′y·¢&#203;í&#189;áê&#248;               
        RS485_1_RX_CNT=0;          
        RS485_1_TX_EN=0;                                //éè&#214;&#195;&#206;a&#189;óê&#213;&#196;£ê&#189;       
}

void RS485_1_Init(u32 bound)
{           
       
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //ê1&#196;üGPIOAê±&#214;ó
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //ê1&#196;üGPIOBê±&#214;ó
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE); //ê1&#196;üGPIOBê±&#214;ó
        RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE);//ê1&#196;üUSART2ê±&#214;ó
       
  //′&#174;&#191;ú2òy&#189;&#197;&#184;′ó&#195;ó3é&#228;
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_USART6); //GPIOA2&#184;′ó&#195;&#206;aUSART2
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_USART6); //GPIOA3&#184;′ó&#195;&#206;aUSART2
       
        //USART2   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //GPIOA2ó&#235;GPIOA3
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//&#184;′ó&#195;1|&#196;ü
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //&#203;ù&#182;è100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //í&#198;íì&#184;′ó&#195;ê&#228;3&#246;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //é&#207;à-
        GPIO_Init(GPIOC,&GPIO_InitStructure); //3&#245;ê&#188;&#187;ˉPA2£&#172A3
       
        //PB0í&#198;íìê&#228;3&#246;£&#172;485_1&#196;£ê&#189;&#191;&#216;&#214;&#198;  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIOB0
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //&#203;ù&#182;è100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //é&#207;à-
        GPIO_Init(GPIOC,&GPIO_InitStructure); //3&#245;ê&#188;&#187;ˉPG8
       

   //USART6 3&#245;ê&#188;&#187;ˉéè&#214;&#195;
        USART_InitStructure.USART_BaudRate = bound;//2¨ì&#216;&#194;êéè&#214;&#195;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;
  USART_Init(USART6, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú2
       
  USART_Cmd(USART6, ENABLE);  //ê1&#196;ü′&#174;&#191;ú 2
       
        USART_ClearFlag(USART6, USART_FLAG_TC);
       
#if EN_USART6_RX       
        USART_ITConfig(USART6, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;&#189;óêü&#214;D&#182;&#207;

        //Usart2 NVIC &#197;&#228;&#214;&#195;
  NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //×óó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷&#161;¢

#endif       
       
        RS485_1_TX_EN=0;                                //&#196;&#172;è&#207;&#206;a&#189;óê&#213;&#196;£ê&#189;       
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-20 10:05
  RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE);//
时钟都开错了!!
APB1的时钟开启函数,用来开APB2的外设....
细心点啊。
主战坦克
2楼-- · 2019-07-20 10:54
 精彩回答 2  元偷偷看……

一周热门 更多>