UART_Init(baud_rate);
UARTx_Init_Advanced(baud_rate, data_bits, parity, stop_bits);
UARTx_Write(unsigned int _data); UARTx_Write(char _data);
UARTx_Write_Text(char * UART_text);
char ourtext[] = "Hellow world"; char *txt_pnt; void main() { UART1_INIT (19200); delay_ms (5); // 5 txt_pnt = &ourtext; UART1_Write_Text(txt_pnt); while (1) { } {
char UARTx_READ()
UART_Data_Ready()
returning 1 if the received byte is in the buffer and 0 if it is not there. In this case, we need to constantly monitor whether the UART has received something from our controller. Let's try when receiving, for example, the letter "A" (ASCII code 65) to light the LED on the board: void main() { GPIO_Digital_Output(&GPIOb_BASE, _GPIO_PINMASK_1); UART1_INIT (19200); delay_ms (5); UART1_Write_Text("WAIT CHAR A"); while(1) { if (UART1_Data_Ready()) // UART { if (UART1_READ()== 65) // 65 { GPIOb_ODR.b1 = 1; // } } } }
UART1_init (19200); NVIC_IntEnable(IVT_INT_USART1); // IVT_INT_USART1 EnableInterrupts(); // USART1_CR1bits.RXNEIE = 1; // delay_ms (5);
void our_int() iv IVT_INT_USART1 { if (UART1_READ()== 65) GPIOb_ODR.b1 = 1; // A = if (UART1_READ()== 66) GPIOb_ODR.b1 = 0; // B = }
void main() { UART1_init (19200); // UART UART3_init (19200); // UART GSM NVIC_IntEnable(IVT_INT_USART1); // GSM USART1_CR1bits.RXNEIE = 1; EnableInterrupts(); delay_ms(200); while (1) { } }
#include "GSM_SIM800L."
static char GSM_TEMP[256]; // GSM unsigned short com_status; // 0 - , 1 - , 2 - ( ) unsigned short com_mode = 0; 0 - , 1 - void Clear_GSM_Bufer () // GSM { unsigned int cnt; for (cnt=0; cnt<256; cnt++) GSM_TEMP[cnt] = 0; cntas = 0; } short int gsm_send_at (char *at_cmd) // AT , MicroC { unsigned int brk; // Clear_GSM_Bufer (); // com_status = 2; // " " com_mode = 0; // UART1_Write_Text (at_cmd); // AT - while (com_status == 2 && brk < 50000) // com_status 1 0 { brk++; delay_us(2); } com_mode = 1; // , return com_status; // } void gsm_read() iv IVT_INT_USART1 { GSM_TEMP[cntas] = UART1_READ(); // UART GSM_TEMP if (cntas> 255) cntas = 0; else cntas++; // if (com_mode == 0) // { if (strstr(GSM_TEMP, "OK\r\n") != 0) com_status = 1; // - com_status = 1 if (strstr(GSM_TEMP, "ERROR\r\n") != 0) com_status = 0; //Error - com_status = 0 } }
char *strstr(char *s1, char *s2);
gsm_send_at ("AT\r"); gsm_send_at ("ATE0\r"); gsm_send_at ("AT+CMGD=1,4\r"); gsm_send_at ("AT+CMGF=1\r"); gsm_send_at ("AT+DDET=1\r");
char *gsm_at_parse (char *at_cmd, char *beg_str, char *end_str) // *at_cmd = // *beg_str = // *beg_str = { char *tempchar; if (gsm_send_at (at_cmd) == 1) // { tempchar = strstr (GSM_TEMP, beg_str); // beg_str tempchar = tempchar + strlen(beg_str); *(strstr (tempchar, end_str)) = 0; // NULL end_str return tempchar; } }
UART3_Write_Text (gsm_at_parse("AT+GMM\r", "\r\n", "\r\n\r\nOK\r\n")); \\ UART3 ( , ) UART3_Write_Text ("\r\n"); UART3_Write_Text (gsm_at_parse("AT+CCLK?\r", ",", "+")); \\ UART3_Write_Text ("\r\n"); UART3_Write_Text (gsm_at_parse("AT+CSPN?\r", ": \"", "\""); \\ GSM. UART3_Write_Text ("\r\n");
short int gsm_net_status () { char *tempchar[7]; // int sgr; // dBi if ( gsm_send_at("AT+CREG?\r") == 1) // { if (strstr(GSM_TEMP, "0,1")) // - "+CREG: 0,1" { tempchar = GSM_AT_PARSE ("AT+CSQ\r",": ","," ); // , +CSQ: 17,0, : , sgr = atoi(tempchar); // sgr = -115 + (sgr * 2); // dBi return sgr; // } } return 0; // 0 - . }
char *eol // , "\r\n" char callingnumber[14]; // , 13 NULL char last_sms[4]; // char dtmf_in[2]; // DTMF unsigned short callnow; // unsigned short active_call; // unsigned short sms; // void gsm_read() iv IVT_INT_USART1 { GSM_TEMP[cntas] = UART1_READ(); if (cntas> 255) cntas = 0; else cntas++; if (com_mode == 0) { if (strstr(GSM_TEMP, "OK\r\n") != 0) com_status = 1; if (strstr(GSM_TEMP, "ERROR\r\n") != 0) com_status = 0; } // if (com_mode == 1) { if (cntas> 2) eol = strstr(&GSM_TEMP[2], "\r\n"); else eol = 0; // if (eol != 0) // { if (strstr(&GSM_TEMP, "+CLIP") != 0) // "+CLIP" { callnow=1; // temp = strstr(GSM_TEMP, "\"+"); // + - strncpy (callingnumber, temp+1, 13); // callingnumber[] , 13 } if (strstr(&GSM_TEMP, "CARRIER") != 0) // "NO CARRIER" { *callingnumber=0; // ( NULL ) callnow=0; // active_call=0; } if (strstr(&GSM_TEMP, "DTMF") != 0) { temp = strstr(GSM_TEMP, " "); //SIM800 DTMF , DTMF . strncpy(dtmf_in,temp+1,1); // dtmf_in[] } if (strstr(GSM_TEMP, "CMTI")!=0) // { temp = strstr(GSM_TEMP, ","); // ",", strncpy (last_sms, temp + 1, eol - (temp + 1)); // last_sms[] sms=1; // } Clear_GSM_Bufer (); // } } }
har *nashomer[14] = "+380931234567" if (callnow == 1) { if (strcmp(&callingnumber, "nashomer")==0) // strcmp (*s1, *s2) - 2 , 0 s1 = s2 { gsm_send_at ("ATA\r"); // AT " " active_call = 1; // . } else { gsm_send_at ("ATH0\r"); // AT " " callnow = 0; // } }
char *gsm_read_sms (char *sms_num, unsigned short int sms_field) // ( ) ( ), //1 - , //2 - , //3 - { char sms_at[30]; short int res_at; strcat (sms_at, "AT+CMGR="); strcat (sms_at, sms_num); strcat (sms_at, "\r"); res_at = gsm_send_at (sms_at); if (res_at == 1 && sms_field == 1) { *(strstr (GSM_TEMP, "\",\"\",\"")) = 0; sms = 0; return strstr(GSM_TEMP, "\"+") + 1; } if (res_at == 1 && sms_field == 2) { *(strstr(strstr(GSM_TEMP, "\",\"\",\"") + 6, "+")) = 0; sms = 0; return strstr(GSM_TEMP, "\",\"\",\"") + 6; } if (res_at == 1 && sms_field == 3) { *(strstr (GSM_TEMP, "\r\n\r\nOK\r\n")) = 0; sms = 0; return strstr(GSM_TEMP, "\"\r\n") + 3; } return 0; // 0 }
UART3_Write_Text (gsm_read_sms("5",1)); // 5 UART3_Write_Text (gsm_read_sms("2",3)); // 2
UART1_Write_Text ("AT+CMGS=\""); UART1_Write_Text (nomer); // UART1_Write_Text ("\"\r"); Delay_ms (100); UART1_Write_Text (text); // UART1_Write (26);
Source: https://habr.com/ru/post/321056/
All Articles