初级会员

- 积分
- 53
- 金钱
- 53
- 注册时间
- 2015-7-23
- 在线时间
- 0 小时
|
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");
}
}
}
}
|
|