Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дипломн.проект.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
813.34 Кб
Скачать
    1. Передача параметров настройки по usb

При передаче данных от ПО компьютера, оно открывает необходимый COM порт и передает все данные. Драйвер обеспечивающий связь COM порта с пакетами USB передаваемых контроллеру обеспечивает максимальный размер пакета данных 64 бита. Процесс получения данных выполняется через контрольную точку 0. В конце передачи пакета данных генерируется прерывание и вызывается функция обработки данных –

VCP_DataRx (uint8_t* Buf, uint32_t Len) в файле usbd_cdc_vcp.c. Чтобы не превысить лимит в 64 байта и избежать потери данных передача данных выполняется по каналам настроенным в пользовательском приложении. Например вначале передаем данные по строкам вначале строка №1 затем строка №2 и.т.д . Для строки №1 первое передаваемое сообщение будет N79529091812 –это номер телефона , вторым сообщением следует Hиванов Е.П.-это пользователь, С030001 –для этой строки используется четвертый канал который работает с телефонами под индексами 00 и 01 в массиве телефонов и.т.д. Все передаваемые сообщения обрабатываются по первому символу и записываются в соответствующую структуру данных.

Структура получаемых данных описана в файле StructUSB_tel.h :

typedef struct

{

uint8_t Nom_Chan[MAXKANADC] ; //номера используемых каналов

uint8_t kolvo ; //общее количество телефонов

uint8_t Numb_tel[MAXKOLVOTEL][12]; //здесь сохраняются телефоны

} Tel_Def;

#define TelefoneM ((Tel_Def*)TEL_BASE)

#define TEL_BASE 0x080E0000

Где TEL_BASE –базовый адрес структурной переменной телефоны, все данные сохраняем в последнем 11 секторе Flash памяти [5] Рис 4.6.1.

Рис 4.6.1 Карта Flash памяти микроконтроллера

Также определим массив структурных переменных содержащие настройки каналов:

typedef struct

{

uint8_t kolispADC; //количество используемых уставок

uint8_t vidOpovesh[4]; //вид оповещения для каждой уставки

uint8_t SoobSMS[4][60]; //сообщение для каждой уставки

uint8_t UrovADC[4][2]; //уставка значений напряжений

uint8_t ZadADC[4][2]; //задержка для каждой уставки

uint8_t napravl[4]; //направление действия

………..

} KanADC;

#define TEL_BASE 0x080E0000

#define ADCstr (( KanADC *)ADC_struct) –данные по каналам записываются по адресу 0x080E021D.

Пример реализации функции записи данных во флэш память Рис 4.6.2 :

static uint16_t VCP_DataRx (uint8_t* Buf, uint32_t Len)

{ ……uint8_t fi=0;

if (* Buf=='N') // встретили букву N это телефоны

{

fi=fiS+1; //вспомогательная переменная хранит общее количество тел.

Buf++;

flash_unlock(); //разблокируем flash память для записи

if(fi==0)

flash_erase_page(0x58);//если это первый телефон очищаем память

flash_write_start(); //начинаем запись телефонов

for(pi=0;pi<11;pi++)

TelefoneM->Numb_tel[fi][pi]=*Buf++;

TelefoneM->Numb_tel[fi][pi]=’\0’;

flash_write_end ( ); //конец записи во flash

flash_lock(); //блокируем запись

fiS++; //ведем счет текущим телефонам

…….

}

Рис 4.6.2. Запись конфигурационных данных во Flash память