STM32F103USART1和USART2能不能同时使用同时使用时要注意哪些

2019-07-21 02:40发布

/*LCD_INIT()函数使用了printf函数,所以想使用串口1点亮屏幕,然后想用串口2收发数据。
未加串口2时屏幕可以正常显示,加了串口2程序之后屏幕无法显示了*/


#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "ser.h"
#include "usart.h"
/*LCD_init()oˉêyμ÷óÃáËprintf£¬ËùòÔ′®¿ú1±ØDëê1óÃ
*/
u8  usa3_buf[6]={0,0,0,0,0,0};
u8 a,TEMP,start_flag;


void        USART_Hand(void);

int main(void)
{         
        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //éèÖÃNVICÖD¶Ï·Ö×é2:2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶
                usart2_init(9600);
         uart_init(115200);                 //′®¿ú3õê¼»ˉ
//
        LED_Init();                             //LED¶Ë¿ú3õê¼»ˉ
        LCD_Init();
         LCD_Clear(WHITE);
                POINT_COLOR=RED;          
         LCD_ShowString(30,40,210,24,16,"TEMP: ");
          while(1)
        {                 
                                USART_Hand();

                 if(start_flag==1)   
                 {
                         USART_Cmd(USART1,DISABLE);
                         start_flag=0;
//                         TEMP= usa3_buf[2]+usa3_buf[3]+usa3_buf[4];
//                                if((usa3_buf[0] == 0xaa) && (usa3_buf[1] == 0x55))
//                {               
                          LED0=0;
//                        if(usa3_buf[5]==0x06)
//                        {
                        LCD_ShowxNum(70,40,usa3_buf[2],3,16,0);
                        LCD_ShowxNum(70,56,usa3_buf[0],3,16,0);
      LCD_ShowxNum(70,72,usa3_buf[1],3,16,0);
      LCD_ShowxNum(70,88,usa3_buf[3],3,16,0);
      LCD_ShowxNum(70,104,usa3_buf[4],3,16,0);
      LCD_ShowxNum(70,120,55,3,16,0);               
//            }
//                 }
                          USART_Cmd(USART1,ENABLE);
                 }
        }
}


void        USART_Hand(void)
{         
                         u32 i;

    if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
    {                     
        usa3_buf[0] = USART_ReceiveData(USART1);       
                                      i = 1;                                                                         
                                  while(1)
             {   
                                                          
                 if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
                                       {         
                                                                                          
                        usa3_buf[i] = USART_ReceiveData(USART1);
                                 i++;
                              if(i > 5)
                                {    LED1=0;
                                    i = 0;
                                                                                         start_flag=1;
                                                                                       break;
                                                                     }
                                                                                 }
                                                  }
                                        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
猎人123
1楼-- · 2019-07-21 05:02
你串口2的驱动里面是否开了中断,中断处理函数里面又是否清掉它?
atalanta
2楼-- · 2019-07-21 07:49
 精彩回答 2  元偷偷看……
yklstudent
3楼-- · 2019-07-21 12:20
串口我都是直接USART+DMA+IDLE配合使用,感觉目前没用遇到什么问题,都挺稳定好用的

一周热门 更多>