不知道怎么了,串口发不出数据了

2019-07-21 07:14发布

串口1接收16进制数据01 02 03 04 05,然后发送到串口助手中,但是接收到的都是00 00 00,这是什么情况?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
支持者2400
1楼-- · 2019-07-21 09:52
[mw_shl_code=applescript,true]void uart_init(u32 bound){
  //GPIO¶Ë¿úéèÖÃ
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //ê1ÄüUSART1£¬GPIOAê±Öó
  
        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸′óÃíÆíìêä3ö
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIOA.9
   
  //USART1_RX          GPIOA.103õê¼»ˉ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIOA.10  

  //Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//ÇàÕ¼óÅÏ輶3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×óóÅÏ輶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷
  
   //USART 3õê¼»ˉéèÖÃ

        USART_InitStructure.USART_BaudRate = bound;//′®¿ú2¨ìØÂê
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
        USART_InitStructure.USART_Parity = USART_Parity_No;//ÎTÆæżD£Ñéλ
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //êÕ·¢Ä£ê½

  USART_Init(USART1, &USART_InitStructure); //3õê¼»ˉ′®¿ú1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿aÆô′®¿ú½óêüÖD¶Ï
  USART_Cmd(USART1, ENABLE);                    //ê1Äü′®¿ú1

}

void USART1_IRQHandler(void)
{
         u8 res;          
   
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // ½óêÕμ½êy¾Y   
        {                
                  res =USART_ReceiveData(USART1);                //¶á衽óêÕμ½μÄêy¾YUSART1->DR
       
      USART_SendData(USART1,res);
       
}
}[/mw_shl_code]
szczyb1314
2楼-- · 2019-07-21 15:22
 精彩回答 2  元偷偷看……
支持者2400
3楼-- · 2019-07-21 15:56
szczyb1314 发表于 2018-12-4 11:16
USART_SendData(USART1,res);后面要有判断数据发送完成的

void USART1_IRQHandler(void)
{
         u8 res;          
   
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // ½óêÕμ½êy¾Y   
        {                
                  res =USART_ReceiveData(USART1);                //¶á衽óêÕμ½μÄêy¾YUSART1->DR
       
      USART_SendData(USART1,res);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
               
}
}
还是00
szczyb1314
4楼-- · 2019-07-21 21:25
支持者2400 发表于 2018-12-4 11:17
void USART1_IRQHandler(void)
{
         u8 res;          

那就仿真打个断点看看吧
高山仰止
5楼-- · 2019-07-21 22:11
检查一下硬件电路有没有问题,两端电平是否一致,没问题的话再检查软件
支持者2400
6楼-- · 2019-07-22 01:36
高山仰止 发表于 2018-12-4 11:20
检查一下硬件电路有没有问题,两端电平是否一致,没问题的话再检查软件

就是一块c8t6的最小板,两根杜邦线,一个串口调试助手

一周热门 更多>