Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f10x.h"
- #include "stdio.h"
- #include "stdlib.h"
- #include "config.h"
- #include "string.h"
- #include "onewire_comunication.h"
- // zmienne buffora USART
- #define USART_TXBUF_LEN 128 //długosc bufora transmisji
- #define USART_RXBUF_LEN 128 //długosc bufora odbioru
- uint16_t count = 1 * 86; //wartos do ktorej bedzie zliczal systick zeby wykonac pomiar (okolo 10 sekund)
- uint16_t counter; //licznik ktory systick bedzie inkremntowal
- uint16_t USART_TxBuf[USART_TXBUF_LEN]; //bufor transmisji
- uint16_t USART_RxBuf[USART_RXBUF_LEN]; //bufor odbioru
- uint16_t USART_TX_Empty = 0; //wskaźnik na pusty element bufora transmisji
- uint16_t USART_TX_Busy = 0; //wskaźnik na zajęty element bufora transmisji
- uint16_t USART_RX_Empty = 0; //wskaźnik na pusty element bufora odbioru
- uint16_t USART_RX_Busy = 0; //wskaźnik na zajęty element bufora odbioru
- uint16_t temporary_array[50]; //bufor tymczasowy - przygotowanie do transmisji
- uint16_t temp; //wskaźnik bufora tymczasowego
- uint16_t string_buff[50]; //bufor tymczasowy do przetworzenia komunikatów
- int main(void)
- {
- counter = count; // przypisuje licznikowi wartos do ktorej ma liczyc, zeby za kazdym ponownym uruchomieniem ukladu zrobic pomiar na start
- Config(); //wywoluje funkcje ktora inicjuje wszystkie niezbedne uklady plytki
- send_string("Dostepne komendy:\n", 18);
- send_string("help -----> Wyswietla liste dostepnych komend\n", 46);
- send_string("temp -----> Wyswietla najnowsza zmierzona temperature\n", 54);
- send_string("clear ----> Czysci ekran konsoli\n\r", 34); //wyswietlanie dostepnych polecen na start
- while (1)
- {
- if (USART_RX_Busy != USART_RX_Empty) {//sprawdzenie bufora w pojawieniu się nowych danych
- if (USART_RxBuf[USART_RX_Busy] == ';') {//warunek sprawdzający znak przyjścia komunikatu
- if (strcmp(temporary_array, "help")) { //warunek na komunikat "start"
- send_string("Dostepne komendy:\n", 18);
- send_string("help -----> Wyswietla liste dostepnych komend\n", 46);
- send_string("temp -----> Wyswietla najnowsza zmierzona temperature\n", 54);
- send_string("clear ----> Czysci ekran konsoli\n\r", 34);
- } else if (strcmp(temporary_array, "temp")) { //warunek na komunikat "stop"
- if (now_temperature != -1000){
- sprintf(string_buff, "Aktualna temperatura: %.1f °C\n\r", now_temperature);
- send_string(string_buff);
- } else {
- send_string("Aktualna temperatura: **** °C\n\r", 31);
- }
- } else if (strcmp(temporary_array, "clear")) { //warunek na komunikat "results"
- send_string("\033[2J\n\033[0;0H\r", 18); //komenda czyszczaca teraterm i komenda ustawiajaca kursor w teraterm na samej gorze
- } else {
- send_string("Bledne polecenie\n\r", 18); //warunek na komunikaty nieprawidłowe
- }
- temp = 0;
- } else {
- //zapis danych do tymczasowego bufora z bufora odbioru w oczekiwaniu na znak ";"
- temporary_array[temp] = USART_RxBuf[USART_RX_Busy];
- temp++;
- }
- USART_RX_Busy++;
- if (USART_RX_Busy >= 128) //obsługa przepełnienia bufora
- USART_RX_Busy = 0;
- }
- }
- void send_string(char *array_data, uint16_t length) {
- __disable_irq();
- for (int i = 0; i < length; i++) {
- USART_TxBuf[USART_TX_Empty] = *array_data++;
- USART_TX_Empty++;
- if (USART_TX_Empty >= USART_TXBUF_LEN)
- USART_TX_Empty = 0;
- }
- USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
- __enable_irq();
- }
- void USART2_IRQHandler(void){ //funkcja obslugujaca przerwanie od usarta
- if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {
- USART_RxBuf[USART_RX_Empty] = USART_ReceiveData(USART2);
- USART_RX_Empty++;
- if (USART_RX_Empty == USART_RXBUF_LEN)
- USART_RX_Empty = 0;
- }
- if (USART_GetITStatus(USART2, USART_IT_TXE) != RESET) {
- if (USART_TX_Busy != USART_TX_Empty) {
- USART_SendData(USART2, USART_TxBuf[USART_TX_Busy]);
- USART_TX_Busy++;
- if (USART_TX_Busy == USART_TXBUF_LEN)
- USART_TX_Busy = 0;
- } else {
- USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement