1回答

0收藏

STM32串口通信

STMCU STMCU 3027 人阅读 | 1 人回复 | 2017-05-20

因为做毕设写了一个串口通信程序,原本数据接收很正常,但是如果PC给串口发送数据,然后单片机这边的程序进入接收中断,功能都可以正常执行,但是每次进入接收中断都会莫名其妙单片机这端自动的给PC发送了一个数据,我并没有在接收中断处理函数里边写发送数据的代码,请问一下这是哪里出了问题?为什么会有多出来的数据出现?
这是我串口通信的代码:
void usart_init()
{
        GPIO_InitTypeDef GPIO_InitStructure;       

        USART_InitTypeDef  USART_InitStructure;         

        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);       
       
        /*  ????GPIO????????IO?? */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//TX                       
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;          
        GPIO_Init(GPIOB,&GPIO_InitStructure);  
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//RX               
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;                  
        GPIO_Init(GPIOB,&GPIO_InitStructure);


        USART_InitStructure.USART_BaudRate=38400;   
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;               
        USART_InitStructure.USART_StopBits=USART_StopBits_2;               
        USART_InitStructure.USART_Parity=USART_Parity_No;                               
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_Init(USART3,&USART_InitStructure);       
        USART_Cmd(USART3, ENABLE);                 
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
        USART_ClearFlag(USART3,USART_FLAG_TC);



        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);   
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;           
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        
        NVIC_Init(&NVIC_InitStructure);

}

void USART3_IRQHandler()       

{
        static uint8_t k;
        USART_ClearFlag(USART3,USART_FLAG_TC);//????????±ê????

        if(USART_GetITStatus(USART3,USART_IT_RXNE)!=Bit_RESET)//?ì?é???¨??USART????·??ú??·?
        {
       

                k=USART_ReceiveData(USART3);
                k=k-48;
                if(k==0x00)
                {
                sound1();
                }
                else
                {
                led_on();
                }
                       
                while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==Bit_RESET)
                {
       
                };       

        }
}





无标题.png (52.55 KB, 下载次数: 42)

这是串口调试的图片,圈出来的是多余的数

这是串口调试的图片,圈出来的是多余的数
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

654576555ZZ

发表于 2017-5-20 01:20:34 | 只看该作者

数据是另外一个程序默认发送的,每次都自动发9个数,然后接受中断里边只根据接收到的数据做不同的动作,不另外发送数据
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条