UART modified and added header file
This commit is contained in:
parent
e6a1ad36c2
commit
93c44a6f13
@ -28,7 +28,7 @@ void UART_send(uint8_t* data, size_t length) {
|
|||||||
UCSR0B |= (1 << UDRIE0); // Включаем прерывание по опустошению буфера
|
UCSR0B |= (1 << UDRIE0); // Включаем прерывание по опустошению буфера
|
||||||
}
|
}
|
||||||
|
|
||||||
void USART_put_char(unsigned char sym) {
|
void UART_put_char(unsigned char sym) {
|
||||||
if (((UCSR0A & (1 << UDRE0)) != 0) && buffer_empty(&usartTxBuffer)) {
|
if (((UCSR0A & (1 << UDRE0)) != 0) && buffer_empty(&usartTxBuffer)) {
|
||||||
UDR0 = sym;
|
UDR0 = sym;
|
||||||
} else {
|
} else {
|
||||||
@ -40,38 +40,42 @@ void USART_put_char(unsigned char sym) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_char(unsigned char* sym) {
|
int UART_get_char(unsigned char* sym) {
|
||||||
if (!buffer_empty(&usartTxBuffer)) {
|
if (!buffer_empty(&usartRxBuffer)) {
|
||||||
*sym = read_buffer(&usartTxBuffer);
|
*sym = read_buffer(&usartRxBuffer);
|
||||||
return 1; // Символ успешно прочитан
|
return 1; // Символ успешно прочитан
|
||||||
} else {
|
} else {
|
||||||
return 0; // Буфер пуст, ошибка чтения
|
return 0; // Буфер пуст, ошибка чтения
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void USART_send_str(const unsigned char* data) {
|
void UART_send_str(const unsigned char* data) {
|
||||||
while (*data) {
|
while (*data) {
|
||||||
USART_put_char(*data++);
|
USART_put_char(*data++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t receivedByteCount = 0;
|
//uint32_t receivedByteCount = 0;
|
||||||
|
|
||||||
// Получение данных из буфера
|
// Получение данных из буфера
|
||||||
int UART_receive(uint8_t* data, size_t length) {
|
int UART_receive(uint8_t* data, size_t length) {
|
||||||
char overflow=0;
|
char overflow=0; // Флаг переполнения, который устанавливается, если превышен размер массива
|
||||||
uint32_t byteCount=0;
|
uint32_t byteCount=0; // Счетчик байтов, принятых из буфера приема
|
||||||
uint32_t timeout_ms_mb = 100;
|
uint32_t timeout_ms_mb = 100; // Таймаут в миллисекундах для ожидания первого байта в буфере приема
|
||||||
uint32_t timeout_ms = 4;
|
uint32_t timeout_ms = 4; // Таймаут в миллисекундах для общего времени приема данных
|
||||||
uint32_t start_time = millis();
|
uint32_t start_time = millis();
|
||||||
|
// Цикл ожидания первого байта в буфере приема с учетом таймаута
|
||||||
while (buffer_empty(&usartRxBuffer)) {
|
while (buffer_empty(&usartRxBuffer)) {
|
||||||
if ((millis() - start_time) > timeout_ms_mb) {
|
if ((millis() - start_time) > timeout_ms_mb) {
|
||||||
// Обработка ошибки или таймаута
|
// Обработка таймаута
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Цикл приема данных с таймаутом
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
// Пока буфер приема не пуст и не истек таймаут общего времени,
|
||||||
|
// функция продолжает читать байты из буфера и сохранять их в массив data.
|
||||||
while (!buffer_empty(&usartRxBuffer)) {
|
while (!buffer_empty(&usartRxBuffer)) {
|
||||||
int reader = read_buffer(&usartRxBuffer);//прием и запись символа в переменную
|
int reader = read_buffer(&usartRxBuffer);//прием и запись символа в переменную
|
||||||
if(byteCount<=length){
|
if(byteCount<=length){
|
||||||
@ -89,7 +93,7 @@ int UART_receive(uint8_t* data, size_t length) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return overflow?-1:byteCount;
|
return overflow?-1:byteCount; // возвращает количество успешно принятых байт или -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -108,7 +112,6 @@ int main(void) {
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
//unsigned long currentTime = millis();
|
//unsigned long currentTime = millis();
|
||||||
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -120,4 +123,3 @@ ISR(USART_RX_vect) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//перезаписать чтоб освободитть байт, из udr0
|
|
12
UART/uart.h
Normal file
12
UART/uart.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef UART_H
|
||||||
|
#define UART_H
|
||||||
|
|
||||||
|
void UART_init(void);
|
||||||
|
void UART_send(uint8_t* data, size_t length);
|
||||||
|
void UART_put_char(unsigned char sym);
|
||||||
|
int UART_get_char(unsigned char* sym);
|
||||||
|
void UART_send_str(const unsigned char* data);
|
||||||
|
int UART_receive(uint8_t* data, size_t length);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* UART_H */
|
Loading…
Reference in New Issue
Block a user