OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5196|回复: 4

用MINISTM32板来作串口通讯,和上位机进行串口通讯,波特率为500000传输数据,然而加了LCD显示几个变量,速度变得好慢好慢

[复制链接]

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-7-23
在线时间
0 小时
发表于 2015-8-20 00:18:52 | 显示全部楼层 |阅读模式
5金钱
从上位机的RX端收到的数据来看,不加LCD_ShowString和sprint那几个函数,速度还是好快。但是加了以后,数据的准确性没问题,LCD也能跑,但是就是慢,RX端收到数据的速度和9600波特率差不多。下面附上我的主要程序,用的硬件是NRF模块来接收另一块单片机的数据,然后通过串口传输给PC上位机。






#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "key.h"
#include "spi.h"
#include "24l01.h"   
#include "data_transfer.h"
#include "24l02.h"
#include "spi2.h"
#define BYTE0(dwTemp)       (*(char *)(&dwTemp))
#define BYTE1(dwTemp)       (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp)       (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp)       (*((char *)(&dwTemp) + 3))

//ALIENTEK Mini STM32??·?°?·????ú??24
//?????¨?????é  
//?????§????www.openedv.com
//?????????í??×?????????????  
float a[3],w[3],angle[3],T;
extern u8 d;
u8 tmp_buf[33]; 
u8 tmp_buf_Tx[32];
u8 NRF24L01_Mode=1;//0??·?????1??????
u8 NRF24L01_Mode_Temp=0;
u8 tmp_buf_Rx[32];

 int main(void)
 { 
//u8 key,mode;
//u16 t=0;  

delay_init();     //???±??????????
NVIC_Configuration();  
uart_init(500000); //?®??????????9600
LED_Init();   //????????LED??????????????
LCD_Init();   //??????LCD
  KEY_Init(); //°??ü??????
  NRF24L01_Init();     //??????NRF24L01  
NRF24L01_Init2();
  POINT_COLOR=RED;//?è??×??????ì?? 
LCD_ShowString(60,50,200,16,16,"Mini STM32");
LCD_ShowString(60,70,200,16,16,"NRF24L01 TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2014/3/12");  
  while(NRF24L01_Check()) //?ì?éNRF24L01??·?????.
{
LCD_ShowString(60,130,200,16,16,"NRF24L01 Error");
delay_ms(200);
LCD_Fill(60,130,239,130+16,WHITE);
  delay_ms(200);
}   
 LCD_ShowString(60,130,200,16,16,"NRF24L01 OK");

while(NRF24L01_Check2()) //?ì?éNRF24L01??·?????.
{
LCD_ShowString(60,130,200,16,16,"NRF24L02 Error");
delay_ms(200);
LCD_Fill(60,130,239,130+16,WHITE);
  delay_ms(200);
}
LCD_ShowString(60,150,200,16,16,"NRF24L02 OK");
 NRF24L01_RX_Mode();
 TX_Mode2();
 

while(1)//??????·??·?¨????????????!
{
    u8 Switch,t=0;
    u8 lcd_id_0[1];
u8 lcd_id_1[1];
u8 lcd_id_2[1];
u8 lcd_id_3[1];
    POINT_COLOR=RED;  
    sprintf((char*)lcd_id_0,"PID_ROLL_KP:%d",PID_ROLL_KP);//??LCD ID?ò????lcd_id??×é??
    LCD_ShowString(60,210,200,16,16,lcd_id_0); //????LCD ID  
    sprintf((char*)lcd_id_1,"PID_ROLL_KI:%d",PID_ROLL_KI);//??LCD ID?ò????lcd_id??×é??
    LCD_ShowString(60,230,200,16,16,lcd_id_1); //????LCD ID  
    sprintf((char*)lcd_id_2,"PID_ROLL_KD:%d",PID_ROLL_KD);//??LCD ID?ò????lcd_id??×é??
    LCD_ShowString(60,250,200,16,16,lcd_id_2); //????LCD ID  
    sprintf((char*)lcd_id_3,"PID_PITCH_KP:%d",PID_PITCH_KP);//??LCD ID?ò????lcd_id??×é??
    LCD_ShowString(60,270,200,16,16,lcd_id_3); //????LCD ID  
/*******************************************************************************************************************************/
    t=KEY_Scan(0); //?????ü?? 
    switch(t)
   {  
   case KEY0_PRES:
    LED0=!LED0;
  Switch=0;
    break;
   case KEY1_PRES:
    LED1=!LED1;
  Switch=5;
    break;
   case WKUP_PRES:
    LED0=!LED0;
    LED1=!LED1;
  Switch=6;
    break;
     default:
   delay_ms(1);
        }
/*****************************************************************************************************************************/
           
          if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=RESET)
               {
                 Switch=USART_ReceiveData(USART1);
 
          }

 
 
if(NRF24L01_TxPacket2(tmp_buf_Tx)==TX_OK)
{
LCD_ShowString(60,170,200,16,16,"02OK");
LED1=!LED1;
tmp_buf_Tx[0]=BYTE1(PID_ROLL_KP); 
tmp_buf_Tx[1]=BYTE0(PID_ROLL_KP); 
tmp_buf_Tx[2]=BYTE1(PID_ROLL_KI); 
tmp_buf_Tx[3]=BYTE0(PID_ROLL_KI); 
tmp_buf_Tx[4]=BYTE1(PID_ROLL_KD); 
tmp_buf_Tx[5]=BYTE0(PID_ROLL_KD); 
tmp_buf_Tx[6]=BYTE1(PID_PITCH_KP); 
tmp_buf_Tx[7]=BYTE0(PID_PITCH_KP); 
tmp_buf_Tx[8]=BYTE1(PID_PITCH_KI); 
tmp_buf_Tx[9]=BYTE0(PID_PITCH_KI); 
tmp_buf_Tx[10]=BYTE1(PID_PITCH_KD); 
tmp_buf_Tx[11]=BYTE0(PID_PITCH_KD); 
tmp_buf_Tx[12]=Switch; 


   /*
tmp_buf_Tx[1]=RAP_P; 
 tmp_buf_Tx[2]=RAP_I;
 tmp_buf_Tx[3]=RAP_D;
 tmp_buf_Tx[4]=YAW_P;
 tmp_buf_Tx[5]=YAW_I;
  tmp_buf_Tx[6]=YAW_D;
  tmp_buf_Tx[7]=(Throttle>>8);//??????8??
 tmp_buf_Tx[8]=Throttle; //??????8??
  tmp_buf_Tx[9]=(key_angx>>8);
 tmp_buf_Tx[10]=key_angx;
  tmp_buf_Tx[11]=(key_angy>>8);
  tmp_buf_Tx[12]=key_angy;
 tmp_buf_Tx[13]=(key_angz>>8);
 tmp_buf_Tx[14]=key_angz;
   */
}

       if(NRF24L01_RxPacket(tmp_buf_Rx)==0)
{
LED0=!LED0;


      if(tmp_buf_Rx[0]==00)//???©??????????,?ò????????.
          {
     Data_Send_Senser();

     //Data_Send_Status();

     LCD_ShowString(60,190,200,16,16,"01OK");

          }
      if(tmp_buf_Rx[0]==01)//???©??????????,?ò????????.
          {
 
    LCD_ShowString(60,190,200,16,16,"01OK");

          }
      }
  }
}


























正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-7-23
在线时间
0 小时
 楼主| 发表于 2015-8-20 00:19:52 | 显示全部楼层
sprintf((char*)lcd_id_0,"PID_ROLL_KP:%d",PID_ROLL_KP);//??LCD ID?ò????lcd_id??×é?? 
    LCD_ShowString(60,210,200,16,16,lcd_id_0);  //????LCD ID   
    sprintf((char*)lcd_id_1,"PID_ROLL_KI:%d",PID_ROLL_KI);//??LCD ID?ò????lcd_id??×é?? 
    LCD_ShowString(60,230,200,16,16,lcd_id_1);  //????LCD ID   
    sprintf((char*)lcd_id_2,"PID_ROLL_KD:%d",PID_ROLL_KD);//??LCD ID?ò????lcd_id??×é?? 
    LCD_ShowString(60,250,200,16,16,lcd_id_2);  //????LCD ID   
    sprintf((char*)lcd_id_3,"PID_PITCH_KP:%d",PID_PITCH_KP);//??LCD ID?ò????lcd_id??×é?? 
    LCD_ShowString(60,270,200,16,16,lcd_id_3);  //????LCD ID  
这几个函数,就是令速度变慢几倍的原因, M3跑这几个用那么多资源?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-21 23:46:44 | 显示全部楼层
这里应该不会占用太多的时间。
你可以加入点灯,然后用示波器测量来确定具体时间。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-7-23
在线时间
0 小时
 楼主| 发表于 2015-8-22 00:08:28 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,没示波器怎么破
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-22 16:10:31 | 显示全部楼层
回复【4楼】飞翼:
---------------------------------
买一个。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 22:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表