串口2初始化后一直会输出00 00 00这样的字符

2019-07-20 19:37发布

按照串口1的教程初始化了串口2,串口2发送数据,电脑的串口调试助手在十六进制显示时会一直显示有00 00 00 00 00 从串口2发出,查找了很久一直没有找到原因,求大家帮忙看看
void My_USART2_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
        USART_DeInit(USART2);
       
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2);
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_USART2);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
       
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate=115200;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_Init(USART2,&USART_InitStructure);
       
        USART_Cmd(USART2 ,ENABLE);

        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
       
        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);
}

void USART2_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART2,USART_IT_RXNE)){
               
                res=USART_ReceiveData(USART2);
                USART_SendData(USART2,res);
        }

}


/*****************  发送一个字符 **********************/
static void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch )
{
        /* 发送一个字节数据到USART1 */
        USART_SendData(pUSARTx,ch);
               
        /* 等待发送完毕 */
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}

/*****************  发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, uint8_t *str)
{
        unsigned int k=0;
    do
    {
        Usart_SendByte( pUSARTx, *(str + k) );
        k++;
    } while(*(str + k)!='');
}

int main(void)
{
        u8 times=0;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        My_USART2_Init();

        while(1)
        {
                if(times<=10)
                {
                        Usart_SendString( USART2, (uint8_t *)"ATD18868875103; " );
                        times++;
                }
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
天涯水乡
1楼-- · 2019-07-20 22:38
接收端外加上拉电阻,或者设置为上拉输入模式,可解决。
taizonglai
2楼-- · 2019-07-21 03:28
 精彩回答 2  元偷偷看……
袁小远
3楼-- · 2019-07-21 06:20
zuozhongkai 发表于 2016-6-27 16:43
如果用的开发板的看一下串口2的跳线帽有没有设置正确

跳线帽应该没问题,因为串口2能输出字符,但是除了输出设定的字符外,它还会自动输出00 00
袁小远
4楼-- · 2019-07-21 10:57
大神帮我看看我的串口2初始化有没有错误。。万分感谢
正点原子
5楼-- · 2019-07-21 15:51
 精彩回答 2  元偷偷看……
袁小远
6楼-- · 2019-07-21 18:54
正点原子 发表于 2016-6-27 23:30
我们开发板就有串口2的例子啊,你买的哪个开发板?

我没找到F407有串口2的教程?麻烦能给我一个连接吗

一周热门 更多>