STM32 USart串口通信收发数据,怎么只能发送乱码,麻烦哪位大神给指点一下

2019-07-14 19:10发布

#include"STM32f10x.h"
#include"string.h"
//#include"stm32f10x_it.h"

                void RCC_Config();
                void GPIO_Config();
                void USART_Config();
                void NVIC_Config();
                //void Tx_string(u8*str);

                //u8 buffer[]="nihao";
                 u8 Txdata[100]={0xaa, 0x55 ,0x77 ,0x9a ,0x76 ,0x79 ,0x88};
                 u8 length;
                 u8 i;
                int main(void)
                {
                        
                        RCC_Config();
                        GPIO_Config();
                        
                        NVIC_Config();
                        USART_Config();
                        //Tx_string(buffer);
                        
                        
                         length=strlen(Txdata);
                        
                         while(length--){
                                 if (USART_GetiTStatus(USART2, USART_IT_TXE) == SET)
                                        {
                USART_ClearITPendingBit(USART2,USART_IT_TXE);
                                                                USART_SendData(USART2,Txdata[i++]);
                                                                while(USART_GetFlagStatus(USART2,USART_FLAG_TC )==1);
                                       
                                        }
                                }
                        while (1);         //µÈ´ýÖжÏ
               

                        
                }
               
        /*        void  Tx_string(u8*str)
                {
      u8 i;
                        u8 long;
                        long=strlen(buffer);
                        
                        for(i=0;i<long;i++)
                        {
                                USART_SendData(USART2,*str++);
               
                                

                        
                        
                        //while((USART2->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   
            //USART2->DR = *str++;
                        
                                GPIO_SetBits(GPIOB,GPIO_Pin_9);
                        }
                }*/

                void   RCC_Config()
                {
                                //RCC_TypeDef RCC_InitStructure;
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);     //ʹÄÜLED4/5
                                
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
                          GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);   

                }
               
                void  GPIO_Config()
                {
                                        GPIO_InitTypeDef    GPIO_InitStructure;
                        
                                        //ÅäÖÃLED->D4/D5
                                        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_8;
                                        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
                                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;         //ÅäÖÃÍÆÍìÊä³ö
                                        GPIO_Init(GPIOB,&GPIO_InitStructure);
                        
                                        //ÅäÖÃTX
                                        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
                                        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
                                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;         //ÅäÖÃÍÆÍìÊä³ö
                                        GPIO_Init(GPIOB,&GPIO_InitStructure);
                        
                                        //ÅäÖÃRX
                                        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
                                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;         //ÅäÖø¡¿ÕÊäÈë
                                        GPIO_Init(GPIOB,&GPIO_InitStructure);
               
                                       
                }
                void NVIC_Config()
                {
                                
                                NVIC_InitTypeDef  NVIC_InitStructure;
                                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                                //°´¼ü1ÖжÏÅäÖÃKEY1->PA0
                                NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
                                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
                                NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
                                NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
                                NVIC_Init(&NVIC_InitStructure);
                                       

                        }
                        
               
                void USART_Config()
                {
               
                                USART_InitTypeDef   USART_InitStructure;
                                
                                USART_InitStructure.USART_BaudRate=9600;
                                USART_InitStructure.USART_WordLength=USART_WordLength_8b;
                                USART_InitStructure.USART_StopBits=USART_StopBits_1;
                                USART_InitStructure.USART_Parity=USART_Parity_No;
                                USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
                                USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
                                
                                USART_Init(USART1,&USART_InitStructure);
                                USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
                                USART_Cmd(USART1,ENABLE);                      //ÏÈʹÄÜ´®¿Ú»¹ÊÇÏÈ´ò¿ªÖжϣ¿
               
                }
               
        
                 
               
                        void  USART_IRQHandle()
                        {
                                  u8 Rxdata[100];
                                  u8  data,flag;
                                       
                                        if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
                                        {
                                                 USART_ClearITPendingBit(USART2, USART_IT_RXNE);
             Rxdata[data++]=USART_ReceiveData(USART2);
                                                 GPIO_SetBits(GPIOB,GPIO_Pin_9);
                                                
                                                 if(flag==1)      //µÚ¶þ´Î½ÓÊÜÊý¾ÝµÆÁÁ
                                                 {
                                                         
                                                         if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
                                                                 
                                                                        {
                                                                                         USART_ClearITPendingBit(USART2, USART_IT_RXNE);
                                                                                         Rxdata[data++]=USART_ReceiveData(USART2);
                                                                                         GPIO_ResetBits(GPIOB,GPIO_Pin_9);

                                                                                }
                                            }
                                       
                               flag++;
                                        }
                        

                                }                        


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
qianrushikaifa
1楼-- · 2019-07-14 21:28
改了一下还是不行,串口调试助手没反应
qianrushikaifa
2楼-- · 2019-07-15 01:08
#include"stm32f10x.h"
#include"string.h"
//#include"stm32f10x_it.h"

                void RCC_Config();
                void GPIO_Config();
                void USART_Config();
                void NVIC_Config();
                //void Tx_string(u8*str);

                //u8 buffer[]="nihao";
                 u8 Txdata[100]={'0xaa', '0x55' ,'0x77' ,'0x9a' ,'0x76' ,'0x79' ,'0x88'};
                 u8 length;
                 u8 i;
                int main(void)
                {
                       
                        RCC_Config();
                        GPIO_Config();
                       
                        NVIC_Config();
                        USART_Config();
                        //Tx_string(buffer);
                       
                       
                        length=strlen(Txdata);
                         
                       
                                 if (USART_GetFlagStatus(USART1, USART_IT_TXE) == SET)
                                        {
                //USART_ClearITPendingBit(USART2,USART_IT_TXE);
                                                    while(length--)
                                                                {
                                                                        USART_SendData(USART2,Txdata[length]);
                                                                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE )==1);
                                                                        //GPIO_ResetBits(GPIOC,GPIO_Pin_2);
                                                                }
                                       
                                        }
                               
                        while (1);         //µÈ´ýÖжÏ
               

                       
                }
               
        /*        void  Tx_string(u8*str)
                {
      u8 i;
                        u8 long;
                        long=strlen(buffer);
                       
                        for(i=0;i<long;i++)
                        {
                                USART_SendData(USART2,*str++);
               
                               

                       
                       
                        //while((USART2->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   
            //USART2->DR = *str++;
                       
                                GPIO_SetBits(GPIOB,GPIO_Pin_9);
                        }
                }*/

                void   RCC_Config()
                {
                                //RCC_TypeDef RCC_InitStructure;
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);     //ʹÄÜLED4/5
                               
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
                          //GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
                                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);   

                }
               
                void  GPIO_Config()
                {
                                        GPIO_InitTypeDef    GPIO_InitStructure;
                       
                                        //ÅäÖÃLED->D4/D5
                                        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
                                        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
                                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;         //ÅäÖÃÍÆÍìÊä³ö
                                        GPIO_Init(GPIOC,&GPIO_InitStructure);
                       
                                        //ÅäÖÃTX
                                        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
                                        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
                                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;         //ÅäÖÃÍÆÍìÊä³ö
                                        GPIO_Init(GPIOA,&GPIO_InitStructure);
                       
                                        //ÅäÖÃRX
                                        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
                                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;         //ÅäÖø¡¿ÕÊäÈë
                                        GPIO_Init(GPIOA,&GPIO_InitStructure);
               
                                       
                }
                void NVIC_Config()
                {
                               
                                NVIC_InitTypeDef  NVIC_InitStructure;
                                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                                //°´¼ü1ÖжÏÅäÖÃKEY1->PA0
                                NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
                                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
                                NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
                                NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
                                NVIC_Init(&NVIC_InitStructure);
                                       

                        }
                       
               
                void USART_Config()
                {
               
                                USART_InitTypeDef   USART_InitStructure;
                               
                                USART_InitStructure.USART_BaudRate=9600;
                                USART_InitStructure.USART_WordLength=USART_WordLength_8b;
                                USART_InitStructure.USART_StopBits=USART_StopBits_1;
                                USART_InitStructure.USART_Parity=USART_Parity_No;
                                USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
                                USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
                               
                                USART_Init(USART1,&USART_InitStructure);
                                USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
                                USART_Cmd(USART1,ENABLE);                      //ÏÈʹÄÜ´®¿Ú»¹ÊÇÏÈ´ò¿ªÖжϣ¿
               
                }
               
       
                 
               
                        void  USART_IRQHandle()
                        {
                                  u8 Rxdata[100];
                                  u8  data,flag;
                                       
                                        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
                                        {
                                                 //USART_ClearITPendingBit(USART2, USART_IT_RXNE);
             Rxdata[data++]=USART_ReceiveData(USART1);
                                                 GPIO_SetBits(GPIOC,GPIO_Pin_2);
                                               
                                                 if(flag==1)      //µÚ¶þ´Î½ÓÊÜÊý¾ÝµÆÁÁ
                                                 {
                                                         
                                                         if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
                                                                 
                                                                        {
                                                                                        // USART_ClearITPendingBit(USART2, USART_IT_RXNE);
                                                                                         Rxdata[data++]=USART_ReceiveData(USART1);
                                                                                         GPIO_ResetBits(GPIOC,GPIO_Pin_2);
                 
                                                                                }
                                            }
                                       
                               flag++;
                                        }
                       

                                }                       
liu_z-w
3楼-- · 2019-07-15 01:32
 精彩回答 2  元偷偷看……

一周热门 更多>