///////////////////////////////////////////////////////////////////////USART5.c
#include "sys.h"
#include "usart5.h"
u8 USART5_RX_BUF[USART5_REC_LEN];
u16 USART5_RX_STA=0;
void uart5_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
USART_DeInit(UART5);
//USART5_TX PC.12
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//USART5_RX PD.2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//Usart5 NVIC ÅäÖÃ
NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//USART5 ³õʼ»¯ÉèÖÃ
USART_InitStructure.USART_BaudRate = bound;//ÉèÖÃΪ9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
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(UART5, &USART_InitStructure); //³õʼ»¯´®¿Ú
USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);//¿ªÆôÖжÏ
USART_Cmd(UART5, ENABLE); //ʹÄÜ´®¿Ú5
}
#if EN_USART5_RX //Èç¹ûʹÄÜÁË´®¿Ú5½ÓÊÕ
void USART5_IRQHandler(void)
{
u8 res;
if (USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)//½ÓÊÕµ½Êý¾Ý
{
res = USART_ReceiveData(USART2);//¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý
if (USART5_RX_STA <24 )//½ÓÊÕûÓÐÍê³É
{
USART5_RX_BUF[USART5_RX_STA] = res; //¼Ç¼½ÓÊÕµ½µÄÖµ
USART5_RX_STA++;
}
}
}
#endif
///////////////////////////////////////////////////////////////////////////数据传输函数
u8 RETURN_DATA_COMMAND[7]={0x5A,0xA5,0x20,0xF0,0x01,0x03,0x00};//ͨѶЭÒ飬»Ø´«Êý¾ÝÃüÁî
u8 num_data=0;
u8 Show_Data_1[30] = { 0 };//LCDÏÔʾÊý×é1
u8 Show_Data_2[30] = { 0 };//LCDÏÔʾÊý×é2
u8 Tran_data[2];
void LoRa_SendData(void)
{
u16 adcx; //ADC¶ÁÈ¡ÊýÖµ
u16 pull; //À­Á¦
u8 i,j=0;
u8 angle;
uart5_init(9600); //´®¿Ú5³õʼ»¯Îª9600
USART5_RX_STA=0;
for(i=0;i<7;i++) //·¢ËÍÊý¾ÝÃüÁî
{
while(USART_GetFlagStatus(UART5,USART_FLAG_TC)==RESET);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
USART_SendData(UART5,RETURN_DATA_COMMAND
);
}
while(USART_GetFlagStatus(UART5,USART_FLAG_TC)==RESET);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
while(USART5_RX_STA != 24);
angle = USART5_RX_BUF[14],LED0=0;
USART5_RX_STA = 0;
Tran_data[0]=angle; //½«½Ç¶È·ÅÈëÊý×é
adcx=Get_Adc_Average(ADC_Channel_1,10);
pull=(u16)(adcx*29400/4096);
Tran_data[1]=pull; //½«À­Á¦·ÅÈëÊý×é
for(i=0;i<2;i++)
{
USART_SendData(USART2,Tran_data);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
}
//LCDÏÔʾ
sprintf((char*)Show_Data_1, "EXCAVATOR PULL:%5d N", pull);//½«×Ö·û´®·ÅÈëTran_Data_1Êý×éÖÐ
sprintf((char*)Show_Data_2, "CABLE ANGLE:%5d D", angle);//½«×Ö·û´®·ÅÈëTran_Data_2Êý×éÖÐ
POINT_COLOR=BLUE;
j=num_data%7;
switch(j)
{
case 0
CD_ShowString(20,190,200,16,16,"DATA TRANSIMISSTION ");num_data++;break;
case 1
CD_ShowString(20,190,200,16,16,"DATA TRANSIMISSTION>");num_data++;break;
case 2
CD_ShowString(20,190,200,16,16,"DATA TRANSIMISSTION>>");num_data++;break;
case 3
CD_ShowString(20,190,200,16,16,"DATA TRANSIMISSTION>>>");num_data++;break;
case 4
CD_ShowString(20,190,200,16,16,"DATA TRANSIMISSTION>>>>");num_data++;break;
case 5
CD_ShowString(20,190,200,16,16,"DATA TRANSIMISSTION>>>>>");num_data++;break;
case 6
CD_ShowString(20,190,200,16,16,"DATA TRANSIMISSTION>>>>>>");num_data++;break;
}
if (num_data==7)
num_data=0;
LCD_Fill(0, 210, 240, 280, WHITE); //Çå³ýÏÔʾ
LCD_ShowString(25,230,320,16,16,Show_Data_1);//ÏÔʾÀ­Á¦Êý¾Ý
LCD_ShowString(25,250,320,16,16,Show_Data_2);//ÏÔʾ½Ç¶ÈÊý¾Ý
memset((char*)USART5_RX_BUF, 0x00, 24);//´®¿Ú5½ÓÊÕ»º³åÇøÇå0
delay_ms(500);
}
单片机将通信命令发送给传感器,传感器只能传回一次数据,但是程序就停止了,到底是什么问题?
一周热门 更多>